Отсортировать столбцы в массиве, согласно их найденному произведению - 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;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с массивами, временем и вводом-выводом
- Объявление переменных: N (размер массива), i, j, k, bbuf, b[N], buff[N], a[N][N] (массив размером NxN)
- Инициализация генератора случайных чисел с помощью функции srand(time(NULL))
- Заполнение матрицы a[N][N] случайными числами в диапазоне от -9 до 9 с помощью цикла for и функции rand()
- Вывод на экран заполненной матрицы с помощью цикла for и функции printf()
- Вычисление произведения элементов каждого столбца матрицы a[N][N] и сохранение результатов в массив b[N] с помощью цикла for
- Сортировка массива b[N] по возрастанию с помощью алгоритма сортировки пузырьком в цикле for
- Вывод на экран отсортированного массива b[N] с помощью цикла for и функции printf()
- Вывод на экран исходной матрицы a[N][N] с помощью цикла for и функции printf()
- Ввод с клавиатуры символа для продолжения работы программы с помощью функции system(
pause) - Возврат 0, что означает успешное завершение программы