Сортировка столбцов матрицы с четной суммой элементов методом выбора - C (СИ)
Формулировка задачи:
В матрице размером 7х11 упорядочить элементы столбцов с четной суммой элементов по возрастанию методом выбора.
Решение задачи: «Сортировка столбцов матрицы с четной суммой элементов методом выбора»
textual
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <time.h>
- #define N 20
- #define M 20
- void Formirovanie(int *A, int n, int m, int left, int right) // функция создания рандомной матрицы в заданном диапозоне
- { // left мин число в матрице right максисмальное
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- *(A + i * M + j) = left + rand() % (right - left);
- }
- }
- }
- void Pechat(int *A, int n, int m) // функция печати матрицы
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- printf("%3d", *(A + i*M + j));
- }
- printf("\n");
- }
- }
- int SumElem(int *A, int n) // функция нахождения суммы
- {
- int Sum = 0; //переменная суммы
- for (int i = 0; i < n; i++) //цикл нахождения суммы в столбце
- Sum += *(A + i * M);
- return Sum; // возвращаеммое значение
- }
- void DiapozonArray(int *a, int *b) // ввод диапозона значений
- {
- int n, m; // переменные
- do
- {
- printf("Введите кол-во столбцов : ");
- scanf("%d", &n);
- } while (n <= 0 || n > N); // цикл ввода строк от 0 до 20
- do
- {
- printf("Введите кол-во строк : ");
- scanf("%d", &m);
- } while (m <= 0 || m > M); // цикл ввода столбцов от 0 до 20
- *a = n; // передаем через указатели в функцию main размер строк
- *b = m; // передаем через указатели в функцию main размер столбцов
- }
- void SortVibor(int *A, int n) // сортировка методом выбора
- {
- long i, j, k;
- int x;
- for (i = 0; i < n; i++)
- { // i - номер текущего шага
- k = i; x = *(A + i * M);
- for (j = i + 1; j < n; j++)
- { // цикл выбора наименьшего элемента
- if (*(A + j * M) < x)
- {
- k = j; x = *(A + j * M); // k - индекс наименьшего элемента
- }
- }
- *(A + k * M) = *(A + i * M); *(A + i * M) = x; // меняем местами наименьший с a[i]
- }
- }
- int main(void)
- {
- setlocale(LC_ALL, "Russian");
- srand(time(NULL));
- int A[N][M], n, m;
- int Sum;
- DiapozonArray(&n, &m); // вводим размеры матрицы
- printf("начальный массив :\n");
- Formirovanie(*A, n, m, -5, 5); // формируем матрицу
- Pechat(*A, n, m); // печатаем матрицы
- for (int j = 0; j < m; j++) // цикл передачи в функцию столбцов
- {
- Sum = SumElem(&A[0][j], n); // сумма элементов столбца
- if (Sum % 2 == 0)// четность элемента
- {
- printf("\nЧетный столбец под помером %d", j + 1);
- SortVibor(&A[0][j], n);// сортировка столбца методом выбора
- }
- }
- printf("\n\nКонечный массив :\n");
- Pechat(*A, n, m); // печать конечного массива
- _getch();
- return 0;
- }
Объяснение кода листинга программы
- Создание матрицы методом случайных чисел в заданном диапазоне
- Печать матрицы
- Ввод размеров матрицы
- Создание матрицы
- Печать матрицы
- Цикл передачи столбцов в функцию сортировки
- Сумма элементов столбца
- Проверка четности суммы элементов столбца
- Печать четного столбца
- Цикл сортировки столбца методом выбора
- Печать конечного массива
- Получение сигнала окончания работы программы
- Возвращение значения 0, завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д