Сортировка столбцов матрицы с четной суммой элементов методом выбора - 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, завершение работы программы