Работы с двумя матрицами - Ввод двух матриц, змеевидная сортировка. сохранение результатов в файлы
Описание
Программа на Си
Ввод данных матриц:
Пользователю предлагается ввести количество строк и столбцов для двух матриц.
Выделение памяти и ввод значений матриц:
Для каждой матрицы выделяется динамическая память.
Пользователь вводит значения для каждого элемента матрицы.
Сортировка матриц змейкой:
Элементы каждой матрицы объединяются в одномерный массив.
Этот массив сортируется в порядке возрастания.
Отсортированные значения возвращаются в матрицу в змеевидном порядке: по строкам слева направо, затем в обратном порядке.
Вывод результатов в файлы:
Результаты для каждой матрицы выводятся в отдельный текстовый файл (output1.txt и output2.txt).
В каждом файле сначала указываются размеры матрицы, а затем значения элементов.
Освобождение выделенной памяти:
Выделенная динамическая память для обеих матриц освобождается.
Завершение программы:
Файлы закрываются, и программа завершается с кодом возврата 0.
Таким образом, программа принимает две матрицы от пользователя, сортирует их значения, записывает результат в файлы и освобождает выделенную память.
Показать/скрыть дополнительное описание
Работы с двумя матрицами - Ввод двух матриц, змеевидная сортировка. сохранение результатов в файлы Программа на Си Ввод данных матриц: Пользователю предлагается ввести количество строк и столбцов для двух матриц. Выделение памяти и ввод значений матриц: Для каждой матрицы выделяется динамическая память. Пользователь вводит значения для каждого элемента матрицы. Сортировка матриц змейкой: Элементы каждой матрицы объединяются в одномерный массив. Этот массив сортируется в порядке возрастания. Отсортированные значения возвращаются в матрицу в змеевидном порядке: по строкам слева направо, затем в обратном порядке. Вывод результатов в файлы: Результаты для каждой матрицы выводятся в отдельный текстовый файл (output1.txt и output2.txt).
В каждом файле сначала указываются размеры матрицы, а затем значения элементов. Освобождение выделенной памяти: Выделенная динамическая память для обеих матриц освобождается. Завершение программы: Файлы закрываются, и программа завершается с кодом возврата 0. Таким образом, программа принимает две матрицы от пользователя, сортирует их значения, записывает результат в файлы и освобождает выделенную память. 1.scan_matrix: Функция запрашивает у пользователя размеры матрицы (количество строк и столбцов), выделяет динамическую память под матрицу и заполняет её значениями, введенными с клавиатуры. 2.compare: Функция сравнения, используемая для сортировки чисел в массиве.
3.snake_sort: Функция, которая сначала создает одномерный массив из элементов матрицы, затем сортирует его с использованием стандартной функции qsort и, наконец, переставляет отсортированные элементы обратно в матрицу в змеевидном порядке (зигзагообразно). 4.print_file: Функция записи матрицы в файл. Открывает файл, записывает размеры матрицы и элементы матрицы в текстовый файл. 5.free_matrix: Функция освобождения динамически выделенной памяти для матрицы. 6.main: В функции main программа сначала считывает две матрицы с помощью функции scan_matrix. Затем она сортирует обе матрицы с использованием функции snake_sort. После этого результаты записываются в два различных файла (output1.txt и output2.txt) с использованием функции print_file.
Наконец, программа освобождает выделенную память и закрывает файлы. Программа работает с матрицами, сортирует их и записывает отсортированные матрицы в файлы. Код: #include <stdio.h> #include <stdlib.h> // n, m - указатели на размеры матрицы // возвращается указатель на данные матрицы int **scan_matrix(int *n, int *m) { // вводим количество строк printf(\"Enter n (kol-vo strok): \"); scanf(\"%d\", n); // вводим количество столбцов printf(\"Enter m (kol-vo stolbtsov): \"); scanf(\"%d\", m); // выделяем память под список из n указателей на строки матрицы int **arr = calloc(*n, sizeof(int *)); // выделяем память под каждую строку for (int i = 0; i < *n; ++i) { arr = calloc(*m, sizeof(int)); } // вводим матрицу for (int i = 0; i < *n; ++i) { for (int j = 0; j < *m; ++j) { // i - номер строки // j - номер столбца // вводим arr[j] printf(\"Enter arr[%d][%d]: \", i, j); scanf(\"%d\", &arr[j]); } } return arr; } // функция, сравнивающая два int int compare(const void *a, const void *b) { // возвращает отрицательное число, если a идет перед b return * (int *)a - * (int *)b; } // сортировка змейкой // arr - матрица // n - количество строк // m - количество столбцов void snake_sort(int **arr, int n, int m) { // создаем массив b[n * m] int *b = calloc(n * m, sizeof(int)); // выписываем туда все числа из матрицы for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { b[i * m + j] = arr[j]; } } // сортируем b по возрастанию qsort(b, n * m, sizeof(int), compare); // проходимся змейкой по массиву, выписываем туда b[k++] int k = 0; for (int j = 0; j < m; ++j) { for (int i = 0; i < n; ++i) { if (j % 2 == 0) { // при нечетном столбце в обратном порядке arr[j] = b[k++]; } else { arr[n - i - 1][j] = b[k++]; } } } free(b); } // выводим матрицу в файл void print_file(FILE *fout, int **arr, int n, int m) { fprintf(fout, \"%d %d\\n\", n, m); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { fprintf(fout, \"%d \", arr[j]); } fprintf(fout, \"\\n\"); } } // освобождение ресурсов матрицы void free_matrix(int **arr, int n, int m) { for (int i = 0; i < n; ++i) { free(arr); } free(arr); } int main() { // считываем первую матрицу arr1[n1][m1] printf(\"Enter first matrix\\n\"); int n1, m1; int **arr1 = scan_matrix(&n1, &m1); // считываем вторую матрицу arr2[n2][m2] printf(\"Enter second matrix\\n\"); int n2, m2; int **arr2 = scan_matrix(&n2, &m2); // сортируем матрицы snake_sort(arr1, n1, m1); snake_sort(arr2, n2, m2); // открываем два файла FILE *fout1 = fopen(\"output1.txt\", \"w\"); FILE *fout2 = fopen(\"output2.txt\", \"w\"); // выводим матрицы в файл print_file(fout1, arr1, n1, m1); print_file(fout2, arr2, n2, m2); // освобождаем память free_matrix(arr1, n1, m1); free_matrix(arr2, n2, m2); // закрываем файлы fclose(fout1); fclose(fout2); return 0; }.
Характеристики решённой задачи
Список файлов
