Отсортировать в матрице по убыванию столбцы, номер которых не больше, чем вводимое с клавиатуры число - C (СИ)
Формулировка задачи:
Дана прямоугольная матрица [m n]. Отсортировать по убыванию столбцы, номер которых не больше, чем вводимое с клавиатуры число а.
допустим 4 3 8
5 4 9
6 5 1
а нужно, чтобы было
6 5 9
5 4 8
4 3 1
в чем ошибка в сортировке?
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <windows.h>
# define ROW 2
# define COL 4
int main()
{SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_CTYPE,"Russian");
int a[ROW][COL];
int i;
int j;
int temp;
int p;
puts("\n Введите число а");
scanf("%d", &p);
puts(" \n Введите элементы массива: ");
for(j=0;j<COL;j++){
printf ("Введите столб %d \n", j );
for(i=0;i<ROW;i++)
scanf(" \n %d", &a[i][j]);}
puts("\n Исходный массив: ");
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++)
printf("%2d", a[i][j]);
printf("\n");}
// по столбцам
for(j=0;j<p;j++)
if(a[i][j]>a[i+1][j])
{
temp=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=temp;
}
puts("\n Исходный массив: ");
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++)
printf("%2d", a[i][j]);
printf("\n");}
printf(" количество столбцов: %d", j);
return 0;}Решение задачи: «Отсортировать в матрице по убыванию столбцы, номер которых не больше, чем вводимое с клавиатуры число»
textual
Листинг программы
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
//#include <windows.h>
# define ROW 2
# define COL 4
int main()
{//SetConsoleCP(1251);
// SetConsoleOutputCP(1251);
setlocale(LC_CTYPE,"Russian");
int a[ROW][COL];
int i;
int j;
int temp;
int p;
puts("\n Введите число а");
scanf("%d", &p);
puts(" \n Введите элементы массива: ");
for(j=0;j<COL;j++){
printf ("Введите столб %d \n", j );
for(i=0;i<ROW;i++)
scanf(" \n %d", &a[i][j]);}
puts("\n Исходный массив: ");
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++)
printf("%2d", a[i][j]);
printf("\n");}
for(int k=0;k<p;++k)
{
for(i=0;i<ROW;++i){
for(j=i+1;j<ROW;++j)
if(a[i][k]<a[j][k]){
temp=a[i][k];
a[i][k]=a[j][k];
a[j][k]=temp;}
}
}
puts("\n Исходный массив: ");
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++)
printf("%2d", a[i][j]);
printf("\n");}
printf(" количество столбцов: %d", j);
return 0;}
Объяснение кода листинга программы
В этом коде выполняется сортировка матрицы по убыванию столбцов, номер которых не больше, чем вводимое с клавиатуры число.
- #include
— подключает файл стандартного ввода/вывода - #include
— подключает файл стандартного ввода/вывода - #include
— подключает файл стандартных библиотек - #include
— подключает файл математических функций - #include
— подключает файл локали - # define ROW 2 — определяет количество строк в матрице
- # define COL 4 — определяет количество столбцов в матрице
- int main() — функция main() является точкой входа в программу
- setlocale(LC_CTYPE,
Russian); — установка локали на русский язык - int a[ROW][COL]; — объявление двумерного массива a()
- int i; — объявление переменной i для цикла
- int j; — объявление переменной j для цикла
- int temp; — объявление временной переменной temp
- int p; — объявление переменной p для ограничения сортировки
- puts(
\n Введите число а); — вывод сообщения и запрос ввода числа p - scanf(
%d, &p); — ввод числа p с клавиатуры - puts(
\n Введите элементы массива:); — вывод сообщения и запрос ввода элементов матрицы - for(j=0;j<COL;j++){ — цикл для заполнения матрицы
- printf (
Введите столб %d \n, j ); — вывод сообщения с номером столбца - for(i=0;i<ROW;i++) — цикл для заполнения строки
- scanf(
\n %d, &a[i][j]); — ввод элемента матрицы с клавиатуры - puts(
\n Исходный массив:); — вывод сообщения и исходной матрицы - for(i=0;i<ROW;i++){ — цикл для вывода элементов строки
- for(j=0;j<COL;j++) — цикл для вывода элементов столбца
- printf(
%2d, a[i][j]); — вывод элемента матрицы - printf(
\n); — переход на новую строку - for(int k=0;k<p;++k) — цикл для сортировки ограниченного количества столбцов
- for(i=0;i<ROW;++i){ — цикл для прохода по строкам
- for(j=i+1;j<ROW;++j) — цикл для прохода по столбцам, начиная с i+1
- if(a[i][k]<a[j][k]){ — проверка на убывание
- temp=a[i][k]; — временное хранение элемента
- a[i][k]=a[j][k]; — замена элемента
- a[j][k]=temp; — возврат временного значения
- } — конец проверки
- puts(
\n Исходный массив:); — вывод сообщения и исходной матрицы - for(i=0;i<ROW;i++){ — цикл для вывода элементов строки
- for(j=0;j<COL;j++) — цикл для вывода элементов столбца
- printf(
%2d, a[i][j]); — вывод элемента матрицы - printf(
\n); — переход на новую строку - printf(
количество столбцов: %d, j); — вывод количества столбцов - return 0; — завершение программы