first_one_dot_com

Untitled

Feb 12th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.66 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. int** create_matrix(int n, int m);          // дИкларирАваие функций
  6. void rand_matrix(int **matr, int n, int m);
  7. void print_matrix(int **matr, int n, int m);
  8. void free_matrix(int **matr);
  9. void cut_matrix (int **matr, int n, int m);
  10.  
  11. int main()
  12. {
  13.     int n = 0;
  14.     int m = 0;
  15.    
  16.     printf ("Матрица ЭМ на ЭН: ");         //1999
  17.     scanf ("%d", &n);
  18.     scanf ("%d", &m);
  19.     if (m*n<2)
  20.         {
  21.             perror ("2 на 2 шоб минимал\n");
  22.         }
  23.    
  24.  
  25.     int **matr = create_matrix(n, m);
  26.     rand_matrix(matr, n, m);
  27.     print_matrix(matr, n, m);
  28.     cut_matrix(matr, n, m);
  29.    
  30.  
  31. return (0);
  32. }
  33.  
  34.                                     // дифайн функций
  35.  
  36.  
  37.  
  38. int** create_matrix(int n, int m)
  39. {
  40.     int **matr = calloc(n, sizeof(int*));   // первое измерение (первая строка)
  41.     if (matr == NULL)
  42.         perror("1000 прыжков с парашютом, 999 из них не открылось, вопросы?");
  43.    
  44.     for (int i = 0; i < n; i++)
  45.     {
  46.         matr[i] = calloc(m, sizeof(int));   // второе измерение (матрикс)
  47.         if (matr[i] == NULL)
  48.             perror("Ошибка при создании  \"второго измерения\"");
  49.     }
  50. return matr;
  51. }
  52.  
  53. void rand_matrix(int **matr, int n, int m)
  54. {  
  55.  srand(time(NULL));             // чтобы рандом был рандомным
  56.     for (int i = 0; i < n; i++)
  57.     {
  58.         for (int j = 0; j < m; j++)
  59.         {
  60.             matr[i][j] =-30 + rand() %60;
  61.         }
  62.     }
  63. }
  64.  
  65. void print_matrix(int **matr, int n, int m)
  66. {
  67.     for (int i = 0; i < n; i++)
  68.     {
  69.         for (int j = 0; j < m; j++)
  70.         {
  71.             printf("%3d ", matr[i][j]);
  72.         }
  73.     puts("");
  74.     }
  75. }
  76.  
  77. void free_matrix(int **matr)
  78. {
  79.     free (matr);
  80. }
  81.  
  82. void cut_matrix(int **matr, int n, int m)
  83. {
  84.     int max = matr[0][0];
  85.     int max_i = 0;
  86.     int max_j = 0;
  87.     int min = matr[0][0];
  88.     int min_i = 0;
  89.     int min_j = 0;
  90.  
  91.     // поиск макисмума и минимума
  92.     for (int i = 0; i < n; i++)        // прабежка па "строкам"
  93.     {
  94.         for (int j = 0; j < m; j++)    // прабежка па "столбцам"
  95.         {
  96.             if (max < matr[i][j])
  97.             {
  98.                 max = matr[i][j];
  99.                 max_i = i;
  100.                 max_j = j;
  101.             }
  102.             else if (min > matr[i][j])
  103.             {
  104.                 min = matr[i][j];
  105.                 min_i = i;
  106.                 min_j = j;
  107.             }
  108.  
  109.  
  110.         }
  111.  
  112.    
  113.     }
  114.    
  115.     printf("\n%d %d\n", min, max);
  116.  
  117.  
  118.     int amount_str;             //количество строк
  119.     int amount_clm;             //количество столбцов
  120.     int count_i;                //для
  121.     int count_j;                //цикла
  122.     amount_str = max_i - min_i;
  123.     if(amount_str < 0)
  124.         amount_str *= -1;
  125.        
  126.     amount_clm = max_i - min_i;
  127.     if(amount_clm < 0)
  128.         amount_clm *= -1;
  129.    
  130.     // много ИФов
  131.    
  132.     if(max_i < min_i)
  133.         count_i = max_i;
  134.     else
  135.         count_i = min_i;
  136.        
  137.     if(max_j < min_j)
  138.         count_j = max_j;
  139.     else
  140.         count_j = min_j;
  141.            
  142.     for (int i = count_i; i <= count_i + amount_str; i++) //откуда; границы (столбцы), i++
  143.     {
  144.         for (int j = count_j; j <= count_j + amount_clm; j++) //откуда; границы(строки), j++
  145.         {
  146.             printf("%3d", matr[i][j]);
  147.         }
  148.     }
  149. }
Add Comment
Please, Sign In to add comment