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

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

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

Задание: Дан массив 7х7, необходимо отсортировать столбцы массива по возрастанию их произведения. То есть: Вычисляется произведение элементов каждого из семи столбцов. Найденные значения сортируются в порядке возрастания, а вместе с тем, должны меняться местами и столбцы. Нахожу произведения столбцов и сортирую их, а как дальше реализовать код - не знаю. Очевидно, что можно связать массив из произведений с определёнными столбцами и вывести получившийся массив, но как это написать? Нужна Ваша помощь.

Заранее благодарю

#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
    
int main()
{
    const int N = 7;
    int i, j, k, abuf, bbuf, b[N];
    int a[N][N];
    srand (time(NULL));    
    printf ( "\n Array 7x7 \n \n" );
    for( j = 0; j < N; j++ )
        for( i=0; i < N; i++ )
        a[i][j] = rand()%18+(-9);
    for( j = 0; j < N ; j++ )
    {
        for( i = 0; i < N ; i++ )
            printf( "%3d\t", a[i][j] );
        printf( "\n" );
    }
    for( i = 0 ; i < N ; i++ )
    {
        k = 1;
        for( j = 0 ; j < N ; j++ )
        {            
            k = k * a[i][j];
            b[i] = k;
        }
        printf( "b = %d\n", b[i] );
    }
    for( i = 0 ; i < N ; i++ )
    {
        for ( j = N - 1 ; j > i ; j-- )
        {
            if ( b[j - 1] > b[j])
            {
                bbuf = b[j - 1];
                b[j - 1] = b[j];
                b[j] = bbuf;    
            } 
        }
        printf( "\nb = %d", b[i] );
    }
    getch();
    return 0;   
}

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
int main() {
    const int N = 7;
    int i, j, k, bbuf, b[N], buff[N];
    int a[N][N];
    srand(time(NULL));
 
    for (j = 0; j < N; j++) {
        for (i = 0; i < N; i++) {
            a[i][j] = rand() % 18 + (-9);
        }
    }
 
    printf("\n Array 7x7 \n \n");
    for (j = 0; j < N ; j++) {
        for (i = 0; i < N ; i++) {
            printf("%3d\t", a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
    for (i = 0 ; i < N ; i++) {
        k = 1;
        for (j = 0 ; j < N ; j++) {
            k = k * a[i][j];
            b[i] = k;
        }
        printf("b = %d\n", b[i]);
    }
    printf("\n");
 
    for (i = 0 ; i < N ; i++) {
        for (j = N - 1 ; j > i ; j--) {
            if (b[j - 1] > b[j]) {
                bbuf = b[j - 1];
                b[j - 1] = b[j];
                b[j] = bbuf;
 
                memcpy(buff, a[j - 1], sizeof(buff));
                memcpy(a[j - 1], a[j], sizeof(buff));
                memcpy(a[j], buff, sizeof(buff));
            }
        }
        printf("b = %d\n", b[i]);
    }
 
    for (j = 0; j < N ; j++) {
        for (i = 0; i < N ; i++) {
            printf("%3d\t", a[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

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

  1. Подключение необходимых библиотек для работы с массивами, временем и вводом-выводом
  2. Объявление переменных: N (размер массива), i, j, k, bbuf, b[N], buff[N], a[N][N] (массив размером NxN)
  3. Инициализация генератора случайных чисел с помощью функции srand(time(NULL))
  4. Заполнение матрицы a[N][N] случайными числами в диапазоне от -9 до 9 с помощью цикла for и функции rand()
  5. Вывод на экран заполненной матрицы с помощью цикла for и функции printf()
  6. Вычисление произведения элементов каждого столбца матрицы a[N][N] и сохранение результатов в массив b[N] с помощью цикла for
  7. Сортировка массива b[N] по возрастанию с помощью алгоритма сортировки пузырьком в цикле for
  8. Вывод на экран отсортированного массива b[N] с помощью цикла for и функции printf()
  9. Вывод на экран исходной матрицы a[N][N] с помощью цикла for и функции printf()
  10. Ввод с клавиатуры символа для продолжения работы программы с помощью функции system(pause)
  11. Возврат 0, что означает успешное завершение программы

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


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

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

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