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

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

  1. Создание матрицы методом случайных чисел в заданном диапазоне
  2. Печать матрицы
  3. Ввод размеров матрицы
  4. Создание матрицы
  5. Печать матрицы
  6. Цикл передачи столбцов в функцию сортировки
  7. Сумма элементов столбца
  8. Проверка четности суммы элементов столбца
  9. Печать четного столбца
  10. Цикл сортировки столбца методом выбора
  11. Печать конечного массива
  12. Получение сигнала окончания работы программы
  13. Возвращение значения 0, завершение работы программы

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


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

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

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