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