Advertisement
daniil_mironoff

Untitled

Nov 17th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4.  
  5. void inputMatrix(int** matrix, unsigned int x, unsigned int y) {
  6.     for (int i = 0; x > i; i++) {      // строки
  7.         for (int j = 0; y > j; j++) {  // столбцы
  8.             printf("Введите matrix[%d][%d]: ", i, j);
  9.             scanf("%d", &matrix[i][j]);
  10.         }
  11.     }
  12. }
  13.  
  14. void printMatrix(int** matrix, unsigned int x, unsigned int y) {
  15.     for (int i = 0; x > i; i++) {
  16.         for (int j = 0; y > j; j++) {
  17.             printf("%d ", matrix[i][j]);
  18.         }
  19.         printf("\n");
  20.     }
  21. }
  22.  
  23. void checkMatrix(int** matrix, unsigned int x, unsigned int y) {
  24.     for (int i = 0; x > i; i++) {
  25.         // Если числа в столбце отличаются - переменная flag останется 0
  26.         // иначе, будет равна 1
  27.         int flag = 0;
  28.  
  29.         for (int j = 0; y - 1 > j; j++) {
  30.             for (int k = j + 1; y > k; k++) {
  31.                 if (matrix[i][j] == matrix[i][k]) {
  32.                     flag = 1;
  33.                     break;
  34.                 }
  35.             }
  36.  
  37.             // Выходим из цикла по горизонтали
  38.             if (flag == 1) {
  39.                 break;
  40.             }
  41.  
  42.         }
  43.  
  44.         // Если не все числа отличаются,
  45.         // значит мы должны найти наименьший и наибольший
  46.         // и поменять их значения
  47.         if (flag == 1) {
  48.             unsigned int indexMin = 0;
  49.             unsigned int indexMax = 0;
  50.  
  51.             for (int j = 1; y > j; j++) {
  52.                 // Если число больше предыдущего наибольшего
  53.                 // то мы запоминаем индекс этого числа
  54.                 if (matrix[i][j] > matrix[i][indexMax]) {
  55.                     indexMax = j;
  56.                 }
  57.  
  58.                 // тоже самое, но с наименьшим
  59.                 if (matrix[i][indexMin] > matrix[i][j]) {
  60.                     indexMin = j;
  61.                 }
  62.  
  63.             }
  64.  
  65.             // Меняем местами
  66.             int tempInt = matrix[i][indexMin];
  67.             matrix[i][indexMin] = matrix[i][indexMax];
  68.             matrix[i][indexMax] = tempInt;
  69.  
  70.         }
  71.  
  72.     }
  73. }
  74.  
  75. int main() {
  76.     unsigned int N, M;
  77.  
  78.     printf("Введите M (x): ");
  79.     scanf("%d", &M);
  80.  
  81.     printf("Введите N (y): ");
  82.     scanf("%d", &N);
  83.  
  84.     int** matrix = (int **)malloc(N *sizeof(int *));
  85.     for(int i = 0; i < N; i++) {
  86.         matrix[i] = (int *)malloc(M*sizeof(int));
  87.     }
  88.  
  89.     // Ввод значений
  90.     inputMatrix(matrix, N, M);
  91.  
  92.     // Вывод текущий матрицы
  93.     printf("Текущая матрица:\n");
  94.     printMatrix(matrix, N, M);
  95.  
  96.     // Проверка матрицы
  97.     checkMatrix(matrix, N, M);
  98.  
  99.     // Вывод новой матрицы
  100.     printf("Получилась матрица:\n");
  101.     printMatrix(matrix, N, M);
  102.  
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement