Задать матрицу 8х8 с псевдослучайными числами и упорядочить побочную диагональ по убыванию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, долго мучался с двумерным массивом и его упорядочиванием, в конце концов что то получилось, матрицу выводит, но считает не верно, ещё и после упорядочивания выводит матрицу не 8х8, а 7х10 с неполной последней строкой, подскажите, пожалуйста, в чём я ошибся?
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
 
#define MIN_VALUE -100
#define MAX_VALUE 100
 
#define ROWS    8
#define COLS    8
 
int main(int argc, char **argv)
{
    setlocale(LC_ALL, "RUSSIAN");
 
    int A[8][8];
    int i, k, n,t;
    n = 8;
 
    printf("Матрица до сортировки\n");
    for (i = 0; i < ROWS; ++i)
    {
        for (k = 0; k < COLS; ++k)
        {
            A[i][k] = rand() % 50-25;//заплнене случайным числами
            printf("%d\t", A[i][k]);
        }
        printf("\n");   // каждую строку матрицы выводим на новой строке
    }
 
    for(i = 0; i<n-1; i++)
    {
        for(k = i-1; k<n; k++)
        {
            if (A[k][n-1+k] < A[i][n-1+i])
            {
                t = A[i][n-1+k];
                A[k][n-1+k] = A[i][n-1+i];
                A[i][n-1+i] = t;
 
            }
        }
    }
printf("Матрица после сортировки\n");
for (i = 0; i < ROWS; ++i)
    {
        for (k = 0; k < COLS; ++k)
        {
            printf("%d\t", A[i][k]);
        }
    }
    return 0;
}
Заранее спасибо!

Решение задачи: «Задать матрицу 8х8 с псевдослучайными числами и упорядочить побочную диагональ по убыванию»

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#define ROWS    8
#define COLS    8
 
int main(int argc, char **argv)
{
    setlocale(LC_ALL, "RUSSIAN");
    int A[ROWS][COLS];
    int i, k, t, j;
    printf("Матрица до сортировки\n");
    for (i = 0; i < ROWS; ++i){
        for (k = 0; k < COLS; ++k)
            printf("%3d", A[i][k]  = rand() % 50-25);
        printf("\n");
    }
    for(j = 0; j < ROWS; j++)
        {
        for(i = 0; i < ROWS - 1; i++)
        {
            for(k = COLS - 1; k > 0; k--)
            {
                if (A[i][k] > A[i + 1][k - 1])
                {
                    t = A[i + 1][k - 1];
                    A[i + 1][k - 1] = A[i][k];
                    A[i][k] = t;
                }
            }
        }
    }
    printf("Матрица после сортировки\n");
    for (i = 0; i < ROWS; ++i){
        for (k = 0; k < COLS; ++k)
            printf("%3d", A[i][k]);
        printf("\n");
    }
    return 0;
}

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

В этом коде задается матрица 8х8 с помощью которой реализуется следующая логика:

  1. Инициализация матрицы A случайными числами от 25 до 49 с помощью функции rand() % 50-25.
  2. Вывод содержимого матрицы до сортировки.
  3. Упорядочивание побочной диагонали матрицы по убыванию с помощью алгоритма сортировки пузырьком.
  4. Вывод отсортированной матрицы.
  5. Завершение работы программы.

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

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