Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах - C (СИ)
Формулировка задачи:
Помогите доделать программу
Задание:из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах.
Пример
Была матрица:
2 -3 4 -10 1
-3 1 5 7 -2
0 0 0 -10 10
Максимальный элемент в 1 столбце:2
Максимальный элемент в 2 столбце:1
Максимальный элемент в 3 столбце:5
Максимальный элемент в 4 столбце:7
Максимальный элемент в 5 столбце:10
Должно получиться
1.r11 = 2 - 2 = 0; r21 = 2 - (-3) = 5; r31 = 2 - 0 = 2;
2.r12 = 1 - (-3) = 4; r22 = 1 - 1 = 0; r32 = 1 - 0 = 1;
3.r13 = 5 - 4 = 1; r23 = 5 - 5 = 0; r33 = 5 - 0 = 5;
4.r14 = 7 - (-10) = 17; r24 = 7 - 7 = 0; r34 = 7 - (-10) = 17;
5.r15 = 10 - 1 = 9; r25 = 10 - (-2) = 12; r35 = 10 - 10 = 0;
Результаты
Ai П1 П2 П3 П4 П5
A1 0 4 1 17 9
A2 5 0 0 0 12
A3 2 1 5 17 0
Сама программа
Я нашел максимальные элементы в каждом столбце, а дальше не знаю как сделать
#include <stdio.h> #include <string.h> #include <stdlib.h> const int n=3; const int m=5; int VivodMassiva(int mas[n][m]); int main() { int mas[n][m],C[n],i,j,t,max,k=0,menu; printf ("1-Vvesti massiv s klaviaturi \n2-Iz Faila\n"); scanf ("%d",&menu); /*---------Ввод матрицы с клавиатуры-------------------------------------------*/ if(menu==1) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { printf ("M[%d][%d]:",i,j); scanf ("%d",&(mas[i][j])); } } } /*-----------------------------------------------------------------------------*/ /*---------Ввод матрицы из файла-----------------------------------------------*/ if(menu==2) { FILE *file; if((file=fopen("1.txt","r"))==NULL) { printf("no file\n"); system("PAUSE"); return 1; } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { fscanf (file,"%d",&mas[i][j]); } } fclose(file); } /*-----------------------------------------------------------------------------*/ for(i=1;i<=m;i++) { max=0; for(j=1;j<=n;j++) { for(t=1; t<=n;t++) if(mas[j][i]>max) { max=mas[j][i]; } } k++;C[k]=max; printf("Max element %d stolbca=%d ",i,max); printf("\n"); } /*-----------------------------------------------------------------------------*/ /*------------Вывод матрицы----------------------------------------------------*/ VivodMassiva(mas); printf ("\n"); for(i=1;i<=k;i++) printf ("%d ",C[i]); printf ("\n"); /*-----------------------------------------------------------------------------*/ system("PAUSE"); return 0; } int VivodMassiva(int mas[n][m]) { int i; int j; for(i=1;i<=n;i++) { printf("\n "); for(j=1;j<=m;j++) { printf ("%d \t",mas[i][j]); } } return 0; }
Решение задачи: «Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах»
textual
Листинг программы
void doTask(int **matrix, int n, int m){ for (int i = 0; i < n; ++i){ int maxInRow = matrix[i][0]; for (int j = 1; j < m; ++j){ if(matrix[i][j] > maxInRow){ maxInRow = matrix[i][j]; } } for (int k = 0; k < m; ++k){ matrix[i][k] -= maxInRow; } matrix[i][m] = maxInRow; } }
Объяснение кода листинга программы
- Входные данные:
int **matrix
- двумерный массив, представляющий собой квадратную матрицу целых чисел, гдеn
- количество строк, аm
- количество столбцов.int n
- количество строк в матрице.int m
- количество столбцов в матрице.
- Создается цикл, который проходит по каждой строке матрицы:
- Внутри цикла создается переменная
maxInRow
, которая инициализируется значением первого элемента текущей строки. - Создается вложенный цикл, который проходит по каждому элементу в текущей строке, начиная со второго элемента. Если значение текущего элемента больше значения
maxInRow
, то значениеmaxInRow
обновляется. - После завершения вложенного цикла, создается еще один цикл, который проходит по каждому столбцу текущей строки. Значение
maxInRow
вычитается из каждого элемента текущей строки. - После завершения внешнего цикла, функция завершается.
- Значение
maxInRow
записывается в последний столбец текущей строки. Это гарантирует, что в каждом столбце будет максимальное значение из всех элементов этого столбца.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д