Отсортировать в матрице по убыванию столбцы, номер которых не больше, чем вводимое с клавиатуры число - 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; — завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д