Отсортировать столбцы матрицы по убыванию элементов побочной диагонали - C (СИ)
Формулировка задачи:
Условие-- Сортировать колонки массива по убыванию элементов побочной диагонали.
Выдает вот такой результат
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <vcl.h>
void main()
{
const N0=100;
int A[N0][N0];
int M;
unsigned int i, j, k, N;
do
{
clrscr();
printf(" N = ");
scanf("%d",&N);
}while (N>N0||N<1);
Randomize();
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
A[i][j]=random(N0);
printf("%d",A[i][j]);
}
printf("\n");
}
printf("\n");
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if (A[i][N-i+1]<A[j][N-j+1])
{
M=A[i][N-i+1];
A[i][N-i+1]=A[j][N-j+1];
A[j][N-j+1]=M;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%d",A[i][j]);
printf("\n");
}
return;
}Решение задачи: «Отсортировать столбцы матрицы по убыванию элементов побочной диагонали»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
const int N = 4;
int a, f[N][N], i, j, baf, h, f1[N][N], min[4];
const int k[N][N] = { { 6, 1, 2, 6 },
{ -2, -1, 4, 6 },
{ 3, -11, 90, 8 },
{ 5, 12, -15, 1 } };
system("cls");
printf("1. Zapovniti yak konstantu");
printf("\n2. Zapovniti vipadkovimy chislami");
printf("\n3. Zapovniti vrychnu");
printf("\nZrobit vubir:");
scanf("%i", &a);
switch (a)
{
case 1:
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
f[i][j] = k[i][j];
break;
case 2:
srand(time(NULL));
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
f[i][j] = rand() % 100 - 50;
break;
case 3:
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
{
printf("f[%i][%i]:", i, j);
scanf("%i", &f[i][j]);
}
break;
default:
printf("\nNevirniy vubir");
getch();
return 1;
break;
}
printf("Zadana matrica\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf(" %4i", f[i][j]);
}
printf("\n\n");
}
printf("\n");
for (i = 0; i < N; i++) /*Присвоюємо в одновимірний масив
наші числа побічної діагоналі по порядку*/
{
min[i] = f[i][N - i - 1];
}
for (i = 0; i < N - 1; i++) /*Сортировка нового масиву із елементами
в середені оголошення змінної min_e, можно винести в початок,
але портірбно щоб їх значення присвоювалось циклі [i]
(МЕТОД ВИБІРКОВОГО СОРТУВАННЯ)*/
{
int min_e = i;
for (j = i + 1; j < N; j++)
if (min[j] > min[min_e])
min_e = j;
baf = min[i];
min[i] = min[min_e];
min[min_e] = baf;
}
for (i = 0; i < N; i++) /*Порівняння побічної діагоналі масиву f із нашим відсортованим одновимірним масивом,
якщо елементи співпадають присвоюємо відповідний
рядок масиву f рядку масиву f1 по порядку, після всіх дій отримуємо правильний масив,
відсортований по елементам побічної діагоналі, відповідними їм колонками*/
{
for (h = 0; h < N; h++)
if (min[i] == f[h][N - h - 1])
for (j = 0; j < N; j++)
{
f1[j][i] = f[j][N - h - 1];
}
}
printf("Sortyrovka kolonok za zmenshenyam pobichnoi diagonali\n");
printf("Matrica pislya sortirovku\n\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf(" %4i", f1[i][j]);
}
printf("\n\n");
}
getch();
getch();
return 0;
}
Объяснение кода листинга программы
- В первой части кода определен размер матрицы N = 4 и инициализированы переменные a, f[N][N], i, j, baf, h, f1[N][N], min[4]. Также в этой части кода определена матрица k[N][N] размером 4x4, которую в дальнейшем будут использовать для различных операций.
- Во второй части кода происходит взаимодействие с пользователем. Сначала с помощью функции printf выводятся варианты выбора, а затем с помощью функции scanf считывается выбор пользователя и сохраняется в переменной a.
- В третьей части кода происходит сортировка матрицы f по убыванию элементов побочной диагонали. Сначала элементы побочной диагонали сохраняются в массиве min, затем происходит сортировка этого массива методом выборочного сортирования.
- В четвертой части кода происходит сравнение и перенос элементов из матрицы f в матрицу f1. Сначала происходит сравнение элементов побочной диагонали матрицы f и массива min, а затем при совпадении элементов происходит перенос соответствующих строк из матрицы f в матрицу f1.
- В пятой части кода выводится отсортированная матрица f1 с помощью функции printf, а затем с помощью функции getch происходит проверка на нажатие клавиши и завершение работы программы.