Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах - 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 Сама программа Я нашел максимальные элементы в каждом столбце, а дальше не знаю как сделать
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. const int n=3;
  5. const int m=5;
  6. int VivodMassiva(int mas[n][m]);
  7. int main()
  8. {
  9. int mas[n][m],C[n],i,j,t,max,k=0,menu;
  10. printf ("1-Vvesti massiv s klaviaturi \n2-Iz Faila\n");
  11. scanf ("%d",&menu);
  12. /*---------Ввод матрицы с клавиатуры-------------------------------------------*/
  13. if(menu==1)
  14. {
  15. for(i=1;i<=n;i++)
  16. {
  17. for(j=1;j<=m;j++)
  18. {
  19. printf ("M[%d][%d]:",i,j);
  20. scanf ("%d",&(mas[i][j]));
  21. }
  22. }
  23. }
  24. /*-----------------------------------------------------------------------------*/
  25.  
  26. /*---------Ввод матрицы из файла-----------------------------------------------*/
  27. if(menu==2)
  28. {
  29. FILE *file;
  30. if((file=fopen("1.txt","r"))==NULL)
  31. {
  32. printf("no file\n");
  33. system("PAUSE");
  34. return 1;
  35. }
  36. for(i=1;i<=n;i++)
  37. {
  38. for(j=1;j<=m;j++)
  39. {
  40. fscanf (file,"%d",&mas[i][j]);
  41. }
  42. }
  43. fclose(file);
  44. }
  45. /*-----------------------------------------------------------------------------*/
  46. for(i=1;i<=m;i++)
  47. {
  48. max=0;
  49. for(j=1;j<=n;j++)
  50. {
  51. for(t=1; t<=n;t++)
  52. if(mas[j][i]>max)
  53. {
  54. max=mas[j][i];
  55. }
  56. }
  57. k++;C[k]=max;
  58. printf("Max element %d stolbca=%d ",i,max);
  59. printf("\n");
  60. }
  61. /*-----------------------------------------------------------------------------*/
  62.  
  63. /*------------Вывод матрицы----------------------------------------------------*/
  64. VivodMassiva(mas);
  65. printf ("\n");
  66. for(i=1;i<=k;i++)
  67. printf ("%d ",C[i]);
  68. printf ("\n");
  69. /*-----------------------------------------------------------------------------*/
  70. system("PAUSE");
  71. return 0;
  72. }
  73. int VivodMassiva(int mas[n][m])
  74. { int i;
  75. int j;
  76. for(i=1;i<=n;i++)
  77. {
  78. printf("\n ");
  79. for(j=1;j<=m;j++)
  80. {
  81. printf ("%d \t",mas[i][j]);
  82. }
  83. }
  84. return 0;
  85. }

Решение задачи: «Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах»

textual
Листинг программы
  1. void doTask(int **matrix, int n, int m){
  2.  
  3.     for (int i = 0; i < n; ++i){
  4.         int maxInRow = matrix[i][0];
  5.  
  6.         for (int j = 1; j < m; ++j){
  7.             if(matrix[i][j] > maxInRow){
  8.                 maxInRow = matrix[i][j];
  9.             }
  10.         }              
  11.         for (int k = 0; k < m; ++k){
  12.             matrix[i][k] -= maxInRow;
  13.         }
  14.         matrix[i][m] = maxInRow;
  15.     }
  16. }

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

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

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


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

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

8   голосов , оценка 3.625 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы