Содержание
Постановка задания
С клавиатуры вводятся габариты целочисленной матрицы (количество строк и количество колонок). Затем значения элементов матрицы заполняются случайными целыми числами из отрезка $[-25\ …\ +25]$. Упорядочить строки матрицы по убыванию их наименьших элементов. Вывести на экран исходную и преобразованную матрицы.
Примечание:
- Предполагается, что ввод с клавиатуры является корректным.
- Максимальное количество строк/колонок исходной матрицы не превышает $10$.
Реализация задачи на языке Си
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #include <stdio.h> // для консольного ввода-вывода #include <conio.h> // для задержки программы #include <locale.h> // русификация диалогов в программе #include <stdlib.h> // для работы с динамической памятью #include <time.h> // для генерации случайных чисел #define N 10 // максимальное количество строк и колонок в статической матрице // запрос ввода с клавиатуры количества строк/колонок матрицы int GetSize(char* pmessage) { int value; printf(pmessage); scanf("%d", &value); return value; } // выделение динамической памяти под двухмерный массив заданного размера int** CreateArray(const int prow, const int pcol) { int i; int** result = NULL; result = (int**)malloc(sizeof(int*) * prow); // выделяем память под указатели на ряды(строки) матрицы // выделяем память под элементы матрицы for(i = 0; i < prow; i++) result[i] = (int*)malloc(sizeof(int) * pcol); return result; } // заполнение матрицы случайными числами из отрезка [-25 ... +25] int FillArray(int** pa, const int prow, const int pcol) { int i, j; for(i = 0; i < prow; i++) for(j = 0; j < pcol; j++) pa[i][j] = -25 + rand() % 51; // генерация случайного числа из отрезка [-25 ... +25] } // вывод матрицы на экран void PrintArray(const int** const pa, const int prow, const int pcol, const char* const pmessage) { int i, j; printf(pmessage); for(i = 0; i < prow; i++) { for(j = 0; j < pcol; j++) printf("%8d", pa[i][j]); printf("\n"); } printf("\n"); } // нахождение минимального элемента в заданной строке int GetMinValueInRow(const int* const prow, const int pcount) { int min = prow[0]; int i; for(i = 1; i < pcount; i++) if(prow[i] < min) min = prow[i]; return min; } // поменять местами элементы в заданных строках матрицы void SwapRows(int* const prowL, int* const prowR, int pcount) { int i; for(i = 0; i < pcount; i++) { int swap = prowL[i]; prowL[i] = prowR[i]; prowR[i] = swap; } } // сортировка строк по убыванию их наименьших элементов (сортировка выбором) void Sort(int** const pa, const int prow, const int pcol) { int i, j; for(i = 0; i < prow; i++) { int irow = i; for(j = (i + 1); j < prow; j++) if(GetMinValueInRow(pa[j], pcol) > GetMinValueInRow(pa[irow], pcol)) irow = j; if(irow != j) // чтобы избежать самообмена SwapRows(pa[irow], pa[i], pcol); } } // удаление памяти из-под динамической матрицы void DeleteArray(int** pa, const int prow) { int i; // сначала удаляем память из-под данных матрицы for(i = 0; i < prow; i++) free(pa[i]); free(pa); // удаляем память из-под указателей на данные матрицы } // главная функция программы (точка входа) int main(void) { int** a; // матрица (динамический двухмерный целочисленный массив) int row, col; // количество строк и колонок матрицы setlocale(LC_ALL, ""); // настройка русификации диалогов srand(time(NULL)); // инициализация генератора случайных чисел текущим системным временем // ввод с клавиатуры количества строк и колонок матрицы row = GetSize("Введите количество строк матрицы: "); col = GetSize("Введите количество колонок матрицы: "); a = CreateArray(row, col); // выделение памяти под элементы динамической матрицы FillArray(a, row, col); // заполнение элементов матрицы случайными значениями из отрезка [-25 ... +25] PrintArray(a, row, col, "\nИсходная матрица имеет вид:\n"); Sort(a, row, col); // сортировка строк матрицы по убыванию их наименьших элементов PrintArray(a, row, col, "\nПреобразованная матрица имеет вид:\n"); DeleteArray(a, row); // освобождение памяти из-под элементов динамической матрицы printf("\nДля завершения работы программы нажмите ENTER..."); getch(); // задержка работы программы, чтобы пользователь смог просмотреть результаты return 0; } |
Результаты работы программы

Тестирование работы программы
Заказать у нас работу по программированию
Очень часто нам на почту поступают письма от студентов, которым требуется реализовать похожее задание. То есть студент на сайте нашел пример лабораторной работы, которая почти на $100\%$ соответствует той, которую ему надо выполнить.
➡ Сразу хотим сказать, что бесплатно мы ничего не реализуем по чьей-либо просьбе. Поэтому, если вам необходимо помочь в кодировании похожей работы, то пишите на наш электронный адрес proglabs@mail.ru.
💡 Хорошая новость для вас в том, что это задание является тривиальным и мы готовы предоставить качественное решение за небольшие деньги. Цена обговаривается в индивидуальном порядке.
Добавить комментарий