Advertisement
daniil_mironoff

Untitled

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