Отсортировать в матрице по убыванию столбцы, номер которых не больше, чем вводимое с клавиатуры число - 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;}

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

В этом коде выполняется сортировка матрицы по убыванию столбцов, номер которых не больше, чем вводимое с клавиатуры число.

  1. #include — подключает файл стандартного ввода/вывода
  2. #include — подключает файл стандартного ввода/вывода
  3. #include — подключает файл стандартных библиотек
  4. #include — подключает файл математических функций
  5. #include — подключает файл локали
  6. # define ROW 2 — определяет количество строк в матрице
  7. # define COL 4 — определяет количество столбцов в матрице
  8. int main() — функция main() является точкой входа в программу
  9. setlocale(LC_CTYPE,Russian); — установка локали на русский язык
  10. int a[ROW][COL]; — объявление двумерного массива a()
  11. int i; — объявление переменной i для цикла
  12. int j; — объявление переменной j для цикла
  13. int temp; — объявление временной переменной temp
  14. int p; — объявление переменной p для ограничения сортировки
  15. puts(\n Введите число а); — вывод сообщения и запрос ввода числа p
  16. scanf(%d, &p); — ввод числа p с клавиатуры
  17. puts(\n Введите элементы массива:); — вывод сообщения и запрос ввода элементов матрицы
  18. for(j=0;j<COL;j++){ — цикл для заполнения матрицы
  19. printf (Введите столб %d \n, j ); — вывод сообщения с номером столбца
  20. for(i=0;i<ROW;i++) — цикл для заполнения строки
  21. scanf(\n %d, &a[i][j]); — ввод элемента матрицы с клавиатуры
  22. puts(\n  Исходный массив:); — вывод сообщения и исходной матрицы
  23. for(i=0;i<ROW;i++){ — цикл для вывода элементов строки
  24. for(j=0;j<COL;j++) — цикл для вывода элементов столбца
  25. printf(%2d, a[i][j]); — вывод элемента матрицы
  26. printf(\n); — переход на новую строку
  27. for(int k=0;k<p;++k) — цикл для сортировки ограниченного количества столбцов
  28. for(i=0;i<ROW;++i){ — цикл для прохода по строкам
  29. for(j=i+1;j<ROW;++j) — цикл для прохода по столбцам, начиная с i+1
  30. if(a[i][k]<a[j][k]){ — проверка на убывание
  31. temp=a[i][k]; — временное хранение элемента
  32. a[i][k]=a[j][k]; — замена элемента
  33. a[j][k]=temp; — возврат временного значения
  34. } — конец проверки
  35. puts(\n  Исходный массив:); — вывод сообщения и исходной матрицы
  36. for(i=0;i<ROW;i++){ — цикл для вывода элементов строки
  37. for(j=0;j<COL;j++) — цикл для вывода элементов столбца
  38. printf(%2d, a[i][j]); — вывод элемента матрицы
  39. printf(\n); — переход на новую строку
  40. printf(количество столбцов: %d, j); — вывод количества столбцов
  41. return 0; — завершение программы

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


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

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

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