Отсортировать столбцы матрицы по убыванию элементов побочной диагонали - 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;
}

Объяснение кода листинга программы

  1. В первой части кода определен размер матрицы N = 4 и инициализированы переменные a, f[N][N], i, j, baf, h, f1[N][N], min[4]. Также в этой части кода определена матрица k[N][N] размером 4x4, которую в дальнейшем будут использовать для различных операций.
  2. Во второй части кода происходит взаимодействие с пользователем. Сначала с помощью функции printf выводятся варианты выбора, а затем с помощью функции scanf считывается выбор пользователя и сохраняется в переменной a.
  3. В третьей части кода происходит сортировка матрицы f по убыванию элементов побочной диагонали. Сначала элементы побочной диагонали сохраняются в массиве min, затем происходит сортировка этого массива методом выборочного сортирования.
  4. В четвертой части кода происходит сравнение и перенос элементов из матрицы f в матрицу f1. Сначала происходит сравнение элементов побочной диагонали матрицы f и массива min, а затем при совпадении элементов происходит перенос соответствующих строк из матрицы f в матрицу f1.
  5. В пятой части кода выводится отсортированная матрица f1 с помощью функции printf, а затем с помощью функции getch происходит проверка на нажатие клавиши и завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.167 из 5
Похожие ответы