В матрице поменять местами столбцы с максимальным и минимальным значением суммы элементов - C (СИ)
Формулировка задачи:
Народ, задача звучит так: необходимо в задаче размерностью N<=5, M<=10 (кол-во строк столбцов вводится вначале программы) вычислить сумму элементов для каждого столбца и поменять местами столбцы с максимальным и минимальным значением суммы, ну и собственно, отобразить полученную после свопа матрицу.
Ввод матрицы, отображение исходной матрицы и сумму столбцов я написал, а вот как найти максимальное и минимальное значение суммы, а затем свопнуть соответствующие столбцы я не знаю. Можете помочь доделать/переделать программу?
Исходный код:
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int main(void)
- {
- int n,m;
- printf("Enter n: ");
- scanf("%d", &n);
- printf("\nEnter m: ");
- scanf("%d", &m);
- printf("\n");
- ////////////////////////////
- int mas[n][m];
- int i,j;
- for (i=1; i<=n; i++)
- {
- for (j=1; j<=m; j++)
- {
- printf("a[%d,%d] = ", i, j);
- scanf("%d", &mas[i][j]);
- }
- }
- printf("\n");
- ////////////////////////////
- printf("\n---MATRIX---\n\n");
- for (i=1; i<=n; i++)
- {
- for (j=1; j<=m; j++)
- {
- printf("%d ", mas[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- ////////////////////////////
- printf("\n---COLUMN SUMM---\n\n");
- for (j=1; j<=m; j++)
- {
- int s=0;
- for (i=1; i<=n; i++)
- {
- s+=mas[i][j];
- }
- printf("COL %d | %d\n", j, s);
- }
- printf("\n");
- }
Решение задачи: «В матрице поменять местами столбцы с максимальным и минимальным значением суммы элементов»
textual
Листинг программы
- #include <stdio.h>
- int main()
- {
- int n,m,max=-999,min=-999,max_index=0,min_index=0;
- printf("Enter n: ");
- scanf("%d", &n);
- printf("\nEnter m: ");
- scanf("%d", &m);
- printf("\n");
- ////////////////////////////
- int mas[n][m];
- int i,j;
- for (i=0; i<n; i++)
- {
- for (j=0; j<m; j++)
- {
- printf("a[%d,%d] = ", i, j);
- scanf("%d", &mas[i][j]);
- }
- }
- printf("\n");
- ////////////////////////////
- printf("\n---MATRIX---\n\n");
- for (i=0; i<n; i++)
- {
- for (j=0; j<m; j++)
- {
- printf("%d ", mas[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- ////////////////////////////
- printf("\n---COLUMN SUMM---\n\n");
- for (j=0; j<m; j++)
- {
- int s=0;
- for (i=0; i<n; i++)
- {
- s+=mas[i][j];
- }
- printf("COL %d | %d\n", j, s);
- if(s>max)
- {
- max=s;
- max_index=j;
- }
- if(s<min)
- {
- min=s;
- min_index=j;
- }
- }
- printf("\n");
- //------swap----------
- int tmp;
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- {
- tmp=mas[i][min_index];
- mas[i][min_index]=mas[i][max_index];
- mas[i][max_index]=tmp;
- }
- }
- //-------------
- //---print---
- printf("\n---MATRIX---\n\n");
- for (i=0; i<n; i++)
- {
- for (j=0; j<m; j++)
- {
- printf("%d ", mas[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- return 0;
- }
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Запрашивается у пользователя ввод количества строк и столбцов для создаваемой матрицы с помощью функции scanf().
- Создается матрица, заполняемая пользователем с помощью двух вложенных циклов и функции scanf().
- Выводится на экран созданная матрица с помощью двух вложенных циклов и функции printf().
- Для каждого столбца вычисляется сумма элементов с помощью цикла и функции scanf().
- Если текущая сумма больше максимальной, то обновляются значения максимальной суммы и индекса столбца с максимальной суммой.
- Если текущая сумма меньше минимальной, то обновляются значения минимальной суммы и индекса столбца с минимальной суммой.
- С помощью двух вложенных циклов и временной переменной tmp выполняется перестановка элементов в выбранных столбцах.
- Выводится на экран измененная матрица с помощью двух вложенных циклов и функции printf().
- Программа завершается возвратом значения 0 из функции main().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д