Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах - 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;
    } 
}

Объяснение кода листинга программы

  1. Входные данные:
    • int **matrix - двумерный массив, представляющий собой квадратную матрицу целых чисел, где n - количество строк, а m - количество столбцов.
    • int n - количество строк в матрице.
    • int m - количество столбцов в матрице.
  2. Создается цикл, который проходит по каждой строке матрицы:
  3. Внутри цикла создается переменная maxInRow, которая инициализируется значением первого элемента текущей строки.
  4. Создается вложенный цикл, который проходит по каждому элементу в текущей строке, начиная со второго элемента. Если значение текущего элемента больше значения maxInRow, то значение maxInRow обновляется.
  5. После завершения вложенного цикла, создается еще один цикл, который проходит по каждому столбцу текущей строки. Значение maxInRow вычитается из каждого элемента текущей строки.
  6. После завершения внешнего цикла, функция завершается.
  7. Значение maxInRow записывается в последний столбец текущей строки. Это гарантирует, что в каждом столбце будет максимальное значение из всех элементов этого столбца.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5
Похожие ответы