zhukov000

Matrix C

Nov 20th, 2019
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.81 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<malloc.h>
  3.  
  4. // double **  - это указатель на указатель, т.е. двумерный массив
  5. // double *** - это указатель на двумерный массив для того, чтобы изменения, которые будут сделаны в функции сохранились
  6. //              вне ее
  7. void input_array(double *** matrix, int * pn, int * pm)
  8. {
  9.   int n, m;
  10.   printf("Input N: "); scanf("%d", &n);
  11.   printf("Input M: "); scanf("%d", &m);
  12.   // выделение памяти
  13.   double ** arr = calloc(n, sizeof(double *));
  14.   for(int i=0; i<n; ++i)
  15.     arr[i] = calloc(m, sizeof(double));
  16.   // заполнение массива с клавиатуры
  17.   for(int i=0; i<n; ++i) // цикл по строкам - первый размер массива
  18.   {
  19.     for(int j=0; j<m; ++j) // в каждой строчке по столбцам
  20.     {
  21.       printf("Input [%d][%d]: ", i, j);
  22.       scanf("%lf", &arr[i][j]);
  23.     }
  24.   }
  25.   // возвращение значений через параметры функции
  26.   *matrix = arr;
  27.   *pn = n;
  28.   *pm = m;
  29. }
  30.  
  31. // найти столбец с наибольшей суммой модулей элементов
  32. int find_column(double ** arr, int n, int m)
  33. {
  34.   int col = -1;
  35.   double max_sum = -1;
  36.   for(int j = 0; j < m; ++j)
  37.   {
  38.     double s = 0;
  39.     for(int i=0; i<n; ++i) s += fabs(arr[i][j]);
  40.     // col == -1 - значит не было еще макс.суммы - первая итерация цикла (для первого столбца)
  41.     // s > max_sum - сумма в столбце больше, чем сохраненная максимальная
  42.     if( col == -1 || s > max_sum  )
  43.     {
  44.       col = j;
  45.       max_sum = s;
  46.     }
  47.   }
  48.   return col;
  49. }
  50.  
  51. // найти минимальный среди элементов столбца col
  52. double find_min(double ** arr, int n, int col)
  53. {
  54.   double ans = arr[0][col];
  55.   for(int i = 1; i < n; ++i)
  56.     if ( arr[i][col] < ans )
  57.       ans = arr[i][col];
  58.   return ans;
  59. }
  60.  
  61. // решение задачи
  62. void task(double ** arr, int n, int m)
  63. {
  64.   printf("\nAnswer = %lf", find_min(arr, n, find_column( arr, n, m )));
  65. }
  66.  
  67. // вывод элементом массива на экран
  68. void print_array(double ** arr, int n, int m)
  69. {
  70.   printf("Elements of matrix:\n");
  71.   for(int i=0; i<n; ++i) // проходим по строкам
  72.   {
  73.     for(int j=0; j<m; ++j) printf("%lf\t", arr[i][j]); // выводим строку
  74.     printf("\n"); // перенос строки
  75.   }
  76. }
  77.  
  78. int main()
  79. {
  80.   int n, m;
  81.   double ** arr = 0;
  82.   input_array( &arr, &n, &m );
  83.   print_array( arr, n, m );
  84.   task(arr, n, m);
  85.   for(int i=0; i<n; ++i)
  86.   {
  87.     free(arr[i]);
  88.   }
  89.   free(arr);
  90.   return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment