Изменение знака элементов матрицы на противоположный - C (СИ)
Формулировка задачи:
Доброго дня!
По условию задачи необходимо в каждом столбце двумерного массива целых чисел сменить знак любого максимального по модулю элемента на противоположный.
Задачу вроде как сделал.
Но не дает покоя такой вопрос: как проделать данную процедуру со всеми максимальными элементами столбца, если их долее одного?
Потому что в данном виде программы меняется знак только у одного элемента столбца
Помогите разобраться.
Листинг программы
- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- #include<time.h>
- int main()
- {
- system ("chcp 1251");
- system ("cls");
- int a[10][10],n,m,i,j,x,y;
- printf("введите количество строк от 1 до 10\n");
- scanf("%d",&n);
- while(n<1||n>10)
- {printf("введено неверное значение, пробуй еще\n");
- scanf("%d",&n);
- }
- printf("введите количество элементов строки (столбцов) от 1 до 10\n");
- scanf("%d",&m);
- while(m<1||m>10)
- {printf("введено неверное значение, пробуй еще\n");
- scanf("%d",&m);
- }
- srand(time(0));
- for(i=0;i<n;i++)
- { for(j=0;j<m;j++)
- {
- a[i][j]=rand()%21-10;
- }
- }
- for(i=0;i<n;i++)
- { for(j=0;j<m;j++)
- {printf("%4d",a[i][j]);
- }
- printf("\n");
- }
- printf("смена знака любого максимального по модулю элемента столбца на противоположный\n");
- int max,i_max,j_max;
- for(j=0;j<m;j++)
- {max=a[0][j];
- i_max=0;
- j_max=j;
- for(i=0;i<n;i++)
- {if (abs(a[i][j])>abs(max))
- {max=a[i][j];
- i_max=i;
- j_max=j;
- }
- }
- y=-a[i_max][j_max];
- x=a[i_max][j_max];
- a[i_max][j_max]=y;
- y=x;
- }
- printf("\преобразованная матрица\n");
- for(i=0;i<n;i++)
- { for(j=0;j<m;j++)
- {printf("%4d",a[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
Решение задачи: «Изменение знака элементов матрицы на противоположный»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #define ROWS 4
- #define COLUMNS 5
- int main(void) {
- int i, j, matrix[ROWS][COLUMNS] = {
- { 3, -4, 8, -1, 5 },
- { -2, -5, 4, 3, -5 },
- { -3, 2, -8, -3, 4 },
- { 2, 5, -4, 2, 5 },
- };
- printf("Before:\n");
- for ( i = 0; i < ROWS; ++i ) {
- for ( j = 0; j < COLUMNS; ++j )
- printf("%2d ", matrix[i][j]);
- printf("\n");
- }
- for ( j = 0; j < COLUMNS; ++j ) {
- int absmax = abs(matrix[0][j]);
- for ( i = 1; i < ROWS; ++i ) {
- int current = abs(matrix[i][j]);
- if ( current > absmax )
- absmax = current;
- }
- for ( i = 0; i < ROWS; ++i )
- if ( abs(matrix[i][j]) == absmax )
- matrix[i][j] *= -1;
- }
- printf("After:\n");
- for ( i = 0; i < ROWS; ++i ) {
- for ( j = 0; j < COLUMNS; ++j )
- printf("%2d ", matrix[i][j]);
- printf("\n");
- }
- return 0;
- }
Объяснение кода листинга программы
В этом коде определен размер матрицы 4x5 и создана сама матрица. Значения матрицы представлены в виде списков с элементами в круглых скобках. Далее матрица выводится на экран. Затем код ищет максимальное абсолютное значение в каждой колонке матрицы, запоминая его. Затем он проходит по всем строкам в этой колонке и меняет знак тех элементов, абсолютное значение которых равно максимальному. В конце кода матрица снова выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д