Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах - 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
записывается в последний столбец текущей строки. Это гарантирует, что в каждом столбце будет максимальное значение из всех элементов этого столбца.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д