Сортировка строк - ошибка в коде - C (СИ)
Формулировка задачи:
Здравствуйте! Прошу помощи в решении задачи.
Нужно создать функцию для заполнения массива в диапазоне, указанном пользователем, функцию для вывода массива на экран и функцию сортировки каждой строки массива.
Вот код , который у меня получился. Компилируется, но большинстве случаев возникает ошибка при выполнении функции сортировки строк (иногда работает).
Листинг программы
- #include <iostream>
- #include <time.h>
- using namespace std;
- //Заполнение двумерного массива случайными числами в диапазоне, указанном пользаователем
- void create(int mas[][5], int row)
- {
- int min, max, temp;
- cout << "Нижняя граница диапазона:";
- cin >> min;
- cout << "Верхняя граница диапазона:";
- cin >> max;
- if (max < min)
- {
- temp = max;
- max = min;
- min = temp;
- }
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < 5; j++)
- {
- mas[i][j] = min + rand() % (max - min + 1);
- }
- }
- }
- //вывод на экран
- void show(int mas[][5], int row)
- {
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < 5; j++)
- {
- cout << "[" << i << "][" << j << "]=\t" << mas[i][j] << "\t";
- }
- cout << "\n";
- }
- }
- //Сортировка каждой строки
- void row(int mas[][5], int row)
- {
- int temp, obmen, kol = 0;
- for (size_t i = 0; i < row - 1; i++)
- {
- do
- {
- obmen = 0;
- for (size_t j = 0; j < 5 - 1 - kol; j++)
- {
- if (mas[i][j + 1] < mas[i][j])
- {
- temp = mas[i][j];
- mas[i][j] = mas[i][j + 1];
- mas[i][j + 1] = temp;
- obmen = 1;
- }
- }
- kol++;
- } while (obmen == 1);
- }
- }
- void main()
- {
- setlocale(LC_ALL, "rus");
- srand(time(NULL));
- int array[7][5];
- int s = 7;
- create(array, s);
- show(array, s);
- cout << "\n";
- row(array, s);
- show(array, s);
- }
Решение задачи: «Сортировка строк - ошибка в коде»
textual
Листинг программы
- void row(int mas[][5], int row)
- {
- int temp, obmen, kol = 0;
- for (int i = 0; i < row; i++)
- for (int j = 0; j < 4 ; j++)
- for (int k =0; k <4; k ++)
- if (mas[i][k + 1] < mas[i][k])
- {
- temp = mas[i][k];
- mas[i][k] = mas[i][k + 1];
- mas[i][k + 1] = temp;
- }
- }
Объяснение кода листинга программы
В представленном коде реализована функция сортировки строки (или массива) в порядке возрастания. Список действий, которые происходят в коде:
- В функции объявляются три переменные:
temp
,obmen
иkol
.temp
используется для временного хранения значения переменной,obmen
используется для обмена значениями переменных, аkol
используется для подсчета количества итераций цикла. - Запускается цикл, который проходит по каждой строке (или элементу) массива.
- Внутри этого цикла запускается еще два вложенных цикла. Первый проходит по каждому столбцу (или элементу) строки, а второй по всем элементам, начиная со второго столбца (или элемента).
- Вложенный цикл проверяет, если текущий элемент больше следующего, то происходит обмен их значениями.
- После завершения вложенных циклов, функция завершает свою работу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д