Advertisement
semenrbt

3.3 dinamic

Feb 18th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. int **CreateArray(int N, int M, int min, int max){ // min, max - диапазон рандомных значений матрицы, Н,М - ее размеры
  7.     int **Arr = NULL;
  8.     if(max < min)
  9.     {
  10.         int s = min;
  11.         min = max;
  12.         max = s;
  13.     }
  14.     Arr = (int**) malloc(N*sizeof(int*)); // Выделяем память для массива
  15.     if(Arr == NULL) return NULL;
  16.     for(int k = 0; k < N; k++){
  17.         Arr[k] = (int*) malloc(M*sizeof(int));
  18.         if(Arr[k] == NULL)
  19.         {     // Если в процессе выеделения памяти произошла ошибка, то вся память
  20.             for(int i = 0; i < k; i++) // Освобождается
  21.                 free(Arr[i]);
  22.             free(Arr);
  23.             return NULL;
  24.         }
  25.     }
  26.     for(int i = 0; i < N; i++){ // Наполняем массив значениями
  27.         for(int j = 0; j < M; j++){
  28.             Arr[i][j] = rand()%(max - min + 1) + min; // Тут формула, как найти рандомное число
  29.         }                                      
  30.     }
  31.     return Arr;
  32. }
  33.  
  34. int main()
  35. {
  36.   srand(time(NULL));
  37.   const int N = rand()%8+2;
  38.   int ** x = CreateArray(N, N, 0, 1);
  39.   if(x == NULL){ // Проверка
  40.         printf("Error.\n");
  41.         return 0;
  42.   }
  43.   int sum = 0;
  44.   int M = N-1;
  45.   for(int i = 0; i < N; i++) // Выводим x в консоль
  46.     {
  47.       for(int j = 0; j < N; j++)
  48.       {
  49.         printf("%d, ", x[i][j]);
  50.       }
  51.       printf("\n");
  52.     }
  53.     printf("\n");
  54.   if(N%2 == 1)
  55.   {
  56.     for(int i = 0; i <= (N-1)/3; i++)
  57.     {
  58.       for(int j = i; j <= (N-1)/3; j++)
  59.       {
  60.         sum = sum + x[i][j] + x[i][M-j] + x[M-i][j] + x[M-i][M-j];
  61.       }
  62.     }
  63.     for(int k = 0; k < N; k++)
  64.     {
  65.       sum = sum + x[k][M/2];
  66.     }
  67.     printf("Sum = %d\n", sum);
  68.   }
  69.   else
  70.   {
  71.     for(int i = 0; i < (N-2)/2; i++)
  72.     {
  73.       for(int j = i; j < (N-2)/2; j++)
  74.       {
  75.         sum = sum + x[i][j] + x[M-i][j] + x[i][M-j] + x[M-i][M-j];
  76.       }
  77.     }
  78.     for(int i = 0; i < N; i++)
  79.     {
  80.       for(int j = (N-2)/2; j <= (N-2)/2 + 1; j++)
  81.       {
  82.         sum = sum + x[i][j];
  83.       }
  84.     }
  85.     printf("Sum = %d\n", sum);
  86.   }
  87.  
  88.  
  89.  
  90.     for (int i = 0; i < N; i++) { // Освобождаем память
  91.         free(x[i]);
  92.     }
  93.     free(x);
  94.  
  95.   return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement