Изменение знака элементов матрицы на противоположный - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго дня! По условию задачи необходимо в каждом столбце двумерного массива целых чисел сменить знак любого максимального по модулю элемента на противоположный. Задачу вроде как сделал.
Листинг программы
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<time.h>
  5. int main()
  6. {
  7. system ("chcp 1251");
  8. system ("cls");
  9. int a[10][10],n,m,i,j,x,y;
  10. printf("введите количество строк от 1 до 10\n");
  11. scanf("%d",&n);
  12. while(n<1||n>10)
  13. {printf("введено неверное значение, пробуй еще\n");
  14. scanf("%d",&n);
  15. }
  16. printf("введите количество элементов строки (столбцов) от 1 до 10\n");
  17. scanf("%d",&m);
  18. while(m<1||m>10)
  19. {printf("введено неверное значение, пробуй еще\n");
  20. scanf("%d",&m);
  21. }
  22. srand(time(0));
  23. for(i=0;i<n;i++)
  24. { for(j=0;j<m;j++)
  25. {
  26. a[i][j]=rand()%21-10;
  27. }
  28. }
  29. for(i=0;i<n;i++)
  30. { for(j=0;j<m;j++)
  31. {printf("%4d",a[i][j]);
  32. }
  33. printf("\n");
  34. }
  35. printf("смена знака любого максимального по модулю элемента столбца на противоположный\n");
  36. int max,i_max,j_max;
  37. for(j=0;j<m;j++)
  38. {max=a[0][j];
  39. i_max=0;
  40. j_max=j;
  41. for(i=0;i<n;i++)
  42. {if (abs(a[i][j])>abs(max))
  43. {max=a[i][j];
  44. i_max=i;
  45. j_max=j;
  46. }
  47. }
  48. y=-a[i_max][j_max];
  49. x=a[i_max][j_max];
  50. a[i_max][j_max]=y;
  51. y=x;
  52. }
  53. printf("\преобразованная матрица\n");
  54. for(i=0;i<n;i++)
  55. { for(j=0;j<m;j++)
  56. {printf("%4d",a[i][j]);
  57. }
  58. printf("\n");
  59. }
  60. return 0;
  61. }
Но не дает покоя такой вопрос: как проделать данную процедуру со всеми максимальными элементами столбца, если их долее одного? Потому что в данном виде программы меняется знак только у одного элемента столбца Помогите разобраться.

Решение задачи: «Изменение знака элементов матрицы на противоположный»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define ROWS 4
  5. #define COLUMNS 5
  6.  
  7. int main(void) {
  8.     int i, j, matrix[ROWS][COLUMNS] = {
  9.         { 3, -4, 8, -1, 5 },
  10.         { -2, -5, 4, 3, -5 },
  11.         { -3, 2, -8, -3, 4 },
  12.         { 2, 5, -4, 2, 5 },
  13.     };
  14.    
  15.     printf("Before:\n");
  16.     for ( i = 0; i < ROWS; ++i ) {
  17.         for ( j = 0; j < COLUMNS; ++j )
  18.             printf("%2d ", matrix[i][j]);
  19.         printf("\n");
  20.     }
  21.    
  22.     for ( j = 0; j < COLUMNS; ++j ) {
  23.         int absmax = abs(matrix[0][j]);
  24.        
  25.         for ( i = 1; i < ROWS; ++i ) {
  26.             int current = abs(matrix[i][j]);
  27.            
  28.             if ( current > absmax )
  29.                 absmax = current;
  30.         }
  31.        
  32.         for ( i = 0; i < ROWS; ++i )
  33.             if ( abs(matrix[i][j]) == absmax )
  34.                 matrix[i][j] *= -1;
  35.     }
  36.    
  37.     printf("After:\n");
  38.     for ( i = 0; i < ROWS; ++i ) {
  39.         for ( j = 0; j < COLUMNS; ++j )
  40.             printf("%2d ", matrix[i][j]);
  41.         printf("\n");
  42.     }
  43.    
  44.     return 0;
  45. }

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

В этом коде определен размер матрицы 4x5 и создана сама матрица. Значения матрицы представлены в виде списков с элементами в круглых скобках. Далее матрица выводится на экран. Затем код ищет максимальное абсолютное значение в каждой колонке матрицы, запоминая его. Затем он проходит по всем строкам в этой колонке и меняет знак тех элементов, абсолютное значение которых равно максимальному. В конце кода матрица снова выводится на экран.

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


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

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

13   голосов , оценка 4.308 из 5

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

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

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