Поменять местами максимальный элемент выше главной диагонали и минимальный ниже ее - C (СИ)
Формулировка задачи:
Всем доброго времени суток! Смотрите, у меня получился код, который меняет местами (отражает зеркально) элементы, расположенные выше главной и побочной диагоналей и ниже их. Элементы диагоналей не затронуты. А мне нужно чтобы был найден максимальный элемент выше главной диагонали и минимальный – ниже ее, и нужно их поменять местами. У кого какие соображения? Я так понимаю нужно поменять условия, начиная с 3 цикла for. Должно быть как на картинке.
Код:
Листинг программы
- #include <stdio.h> //inclusion of libraries
- #include <conio.h>
- #include <math.h>
- #include <time.h>
- int main()
- {
- int i, j, n, massiv_min, massiv_max,swap;
- time_t t; // actual time for initialization
- // of random number generator
- srand((unsigned) time(&t)); // generator initialization
- printf("\nInput the lower border of range:");
- scanf("%d", &massiv_min);
- printf("\nInput the upper border of range:");
- scanf("%d", &massiv_max);
- printf("\nInput number of rows and columns:");
- scanf("%d", &n);
- int massiv[n][n];
- printf("\nSource massive:\n");
- for (i=0; i<n; i++)
- {
- // getting of random number in range
- // for massiv_min to massuv_max
- for (j=0; j<n; j++)
- {
- massiv[i][j]=rand()%(massiv_max-massiv_min + 1) + massiv_min;
- printf("%7d", massiv[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- for (i=0;i<=n/2;i++)
- {
- for (j=i+1;j<n-(i+1);j++)
- {
- swap=massiv[i][j];
- massiv[i][j]=massiv[n-(i+1)][j];
- massiv[n-(i+1)][j]=swap;
- }
- }
- printf("\n");
- printf("\nNew massive:\n");
- for (i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- printf("%7d", massiv[i][j]);
- printf("\n");
- }
- return 0;
- }
- //function description
Решение задачи: «Поменять местами максимальный элемент выше главной диагонали и минимальный ниже ее»
textual
Листинг программы
- int iMax=0, jMax=1; // индексы максимального элемента
- int iMin=1, jMin=0; // индексы минимального элемента
- for (i=0; i<n; i++)
- for (j=0; j<n; j++)
- {
- if (i < j) // выше главной диагонали
- {
- if (massiv[i][j] > massiv[iMax][jMax])
- {
- iMax = i;
- jMax = j;
- }
- }
- else if (i > j) // ниже главной диагонали
- {
- if (massiv[i][j] < massiv[iMin][jMin])
- {
- iMin = i;
- jMin = j;
- }
- }
- }
- swap = massiv[iMax][jMax];
- massiv[iMax][jMax] = massiv[iMin][jMin];
- massiv[iMin][jMin] = swap;
Объяснение кода листинга программы
- Вначале объявляются четыре переменные: iMax, jMax, iMin и jMin. Они используются для хранения индексов максимального и минимального элементов.
- Начальные значения iMax и jMax устанавливаются равными 0 и 1 соответственно, что означает, что начальный максимальный элемент находится в позиции (0,0). Начальные значения iMin и jMin устанавливаются равными 1 и 0 соответственно, что означает, что начальный минимальный элемент находится в позиции (1,0).
- Затем следует вложенный двойной цикл for, который проходит по всем элементам массива.
- Если текущий элемент находится выше главной диагонали (то есть i < j), то проверяется, является ли он максимальным среди уже найденных максимальных элементов. Если это так, то обновляются значения iMax и jMax.
- Если текущий элемент находится ниже главной диагонали (то есть i > j), то проверяется, является ли он минимальным среди уже найденных минимальных элементов. Если это так, то обновляются значения iMin и jMin.
- После завершения циклов, в переменной swap хранится значение элемента, находящегося в позиции (iMax, jMax).
- Затем происходит обмен значениями между элементами в позициях (iMax, jMax) и (iMin, jMin), используя переменную swap.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д