NIKOLAY_TETUS

deleteThisLater

Apr 15th, 2022
1,001
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. /*
  5. Поменять местами максимальный и минимальный элементы матрицы
  6. А (8х12). Если в массиве максимальное или минимальное значение встречается
  7. неоднократно, данный массив признается некорректным
  8. */
  9.  
  10. int main(void)
  11. {
  12.     int arrVer, arrHor;
  13.  
  14.     printf("arrVer> ");
  15.     scanf("%d", &arrVer);
  16.  
  17.     printf("arrHor>");
  18.     scanf("%d", &arrHor);
  19.  
  20.     int **arr = (int **)malloc(arrVer * sizeof(int *));
  21.  
  22.     for(int i = 0; i < arrVer; i++)
  23.         arr[i] = (int *)malloc(arrHor * sizeof(int));
  24.  
  25.     for (int i = 0; i < arrVer; i++)
  26.         for (int j = 0; j < arrHor; j++)
  27.         {
  28.             printf("arr[%d][%d] = ", i, j);
  29.             scanf("%d", &arr[i][j]);
  30.         }
  31.  
  32.     int *maxP = &arr[0][0],  //Указатель на максимальный элемент массива
  33.         *minP = &arr[0][0];  //Указатель на минимальный элемент массива
  34.  
  35.     int maxAmount = 0,      //Количество максимальных элементов
  36.         minAmount = 0;      //Количество минимальных элементов
  37.  
  38.     for (int i = 0; i < arrVer; i++)
  39.         for (int j = 0; j < arrHor; j++)
  40.         {
  41.             if (arr[i][j] < *minP)
  42.             {
  43.                 minP = &arr[i][j];
  44.                 minAmount = 1;
  45.                 continue;
  46.             }
  47.  
  48.             if (arr[i][j] > *maxP)
  49.             {
  50.                 maxP = &arr[i][j];
  51.                 maxAmount = 1;
  52.                 continue;
  53.             }
  54.  
  55.             if (arr[i][j] == *minP)
  56.                 minAmount++;
  57.  
  58.             if (arr[i][j] == *maxP)
  59.                 maxAmount++;
  60.         }
  61.  
  62.     if (maxAmount > 1 || minAmount > 1)
  63.     {
  64.         printf("Array incorrect");
  65.         return 0;
  66.     }
  67.  
  68.     //Сишный костыль, меняем максимальный и минимальный элемент.
  69.     //swap низя =(
  70.     int buff;
  71.     buff = *minP;
  72.     *minP = *maxP;
  73.     *maxP = buff;
  74.  
  75.     for (int i = 0; i < arrVer; i++)
  76.     {
  77.         for (int j = 0; j < arrHor; j++)
  78.             printf("%3d ", arr[i][j]);
  79.  
  80.         printf("\n");
  81.     }
  82.  
  83.  
  84.     //Освобождаем память динамического массива
  85.     for(int i = 0; i < arrVer; i++)
  86.         free(arr[i]);
  87.  
  88.     free(arr);
  89.  
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment