Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<malloc.h>
- // double ** - это указатель на указатель, т.е. двумерный массив
- // double *** - это указатель на двумерный массив для того, чтобы изменения, которые будут сделаны в функции сохранились
- // вне ее
- void input_array(double *** matrix, int * pn, int * pm)
- {
- int n, m;
- printf("Input N: "); scanf("%d", &n);
- printf("Input M: "); scanf("%d", &m);
- // выделение памяти
- double ** arr = calloc(n, sizeof(double *));
- for(int i=0; i<n; ++i)
- arr[i] = calloc(m, sizeof(double));
- // заполнение массива с клавиатуры
- for(int i=0; i<n; ++i) // цикл по строкам - первый размер массива
- {
- for(int j=0; j<m; ++j) // в каждой строчке по столбцам
- {
- printf("Input [%d][%d]: ", i, j);
- scanf("%lf", &arr[i][j]);
- }
- }
- // возвращение значений через параметры функции
- *matrix = arr;
- *pn = n;
- *pm = m;
- }
- // найти столбец с наибольшей суммой модулей элементов
- int find_column(double ** arr, int n, int m)
- {
- int col = -1;
- double max_sum = -1;
- for(int j = 0; j < m; ++j)
- {
- double s = 0;
- for(int i=0; i<n; ++i) s += fabs(arr[i][j]);
- // col == -1 - значит не было еще макс.суммы - первая итерация цикла (для первого столбца)
- // s > max_sum - сумма в столбце больше, чем сохраненная максимальная
- if( col == -1 || s > max_sum )
- {
- col = j;
- max_sum = s;
- }
- }
- return col;
- }
- // найти минимальный среди элементов столбца col
- double find_min(double ** arr, int n, int col)
- {
- double ans = arr[0][col];
- for(int i = 1; i < n; ++i)
- if ( arr[i][col] < ans )
- ans = arr[i][col];
- return ans;
- }
- // решение задачи
- void task(double ** arr, int n, int m)
- {
- printf("\nAnswer = %lf", find_min(arr, n, find_column( arr, n, m )));
- }
- // вывод элементом массива на экран
- void print_array(double ** arr, int n, int m)
- {
- printf("Elements of matrix:\n");
- for(int i=0; i<n; ++i) // проходим по строкам
- {
- for(int j=0; j<m; ++j) printf("%lf\t", arr[i][j]); // выводим строку
- printf("\n"); // перенос строки
- }
- }
- int main()
- {
- int n, m;
- double ** arr = 0;
- input_array( &arr, &n, &m );
- print_array( arr, n, m );
- task(arr, n, m);
- for(int i=0; i<n; ++i)
- {
- free(arr[i]);
- }
- free(arr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment