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