1 Основной раздел
Во время работы программы пользователь вводит n строк и m столбцов непротиворечащим условиям (n<=100, m<=50). Дальше код работает следующим образом:
Выбор типа элементов:
Программа предлагает пользователю выбрать тип элементов для матрицы: int(1),float(2),char(3).
Ввод элементов матрицы:
В зависимости от выбора пользователя программа вызывает соответствующую функцию для ввода матрицы. Если выбран тип "int" вызывается целочисленная функция matrix, а если выбран пункт "float" вызывается вещественная функция matrix, а если выбран пункт "char" вызывается символьная функция matrix.
Функция ввода элементов:
В функции inputMatrix (которая перегружена для работы как с целыми числами, так и со строками) программа инициирует цикл, который проходит по всем строкам и столбцам матрицы, запрашивая введение каждого элемента.
Ввод значения для сортировки:
После ввода матрицы программа запрашивает у пользователя значение, которое должно быть перемещено в начало каждой строки.
Сортировка матрицы:
В зависимости от типа элементов выполняется соответствующая функция сортировки, передавая в нее матрицу, размеры и введенное значение.
Функция сортировки:
Для каждой строки данной функции, создаётся временный вектор для хранения элементов, которые не равны заданному значению;
Для каждой строки данной функции, считается количество элементов, равных заданному значению;
Для каждой строки данной функции, перезаполняется текущая строка: сначала заполняется нужное значение, затем копируются остальные элементы.
Вывод упорядоченной матрицы:
После сортировки программа выводит новую упорядоченную матрицу на экран, используя функцию printMatrix, которая проходит по всем строкам и столбцам и выводит элементы.
Таким образом, на этапе работы программы пользователь вводит размеры матрицы и ее элементы, выбрав также тип данных. После этого программа упорядочивает матрицу по заданному критерию, перемещая выбранные значения к началу строк. Завершает работу вывод упорядоченной матрицы на экран. Все операции организованы через отдельные функции, что делает код организованным и читаемым.
2 Блок–схема алгоритма
Представим описание алгоритма в графическом виде на рисунке 2.1.
Рисунок 2.1 – Блок-схема алгоритма программы
Продолжение описание алгоритмов в графическом виде на рисунке 2.2.
Рисунок 2.2 – Блок-схема алгоритма программы
Описание алгоритма в графическом виде окончено, содержит графические блок–схемы три функций.
3 Исходный код
Программная реализация алгоритма для решения задачи представлена ниже.
Листинг 3.1 – Процедура выполнение кода по поставленной задачи
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <typeinfo>
using namespace std;
// Шаблон для ввода матрицы template <typename T> void inputMatrix(vector<vector<T>>& matrix, int n, int m) { cout << "Введите элементы матрицы (тип: " << typeid(T).name() << "):" << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> matrix[i][j]; } } }
// Шаблон для упорядочивания матрицы template <typename T> void sortMatrix(vector<vector<T>>& matrix, int n, int m, const T& value) { for (int i = 0; i < n; i++) { vector<T> temp; int count = 0; // Счетчик для элементов, равных value for (int j = 0; j < m; j++) { if (matrix[i][j] == value) { count++; } else { temp.push_back(matrix[i][j]); } } // Заполнение строки: сначала необходимые значения, потом остальные fill(matrix[i].begin(), matrix[i].begin() + count, value); copy(temp.begin(), temp.end(), matrix[i].begin() + count); }
Продолжение
Листинга
3.1 // Шаблон для вывода матрицы template <typename T> void printMatrix(const vector<vector<T>>& matrix) { for (const auto& row : matrix) { for (const auto& elem : row) { cout << elem << " "; } cout << endl; } }
int main() { int n, m; cout << "Введите количество строк и столбцов (n <= 100, m <= 50): "; cin >> n >> m;
cout << "Выберите тип элементов матрицы (1 - int, 2 - float, 3 - char): "; int choice; cin >> choice;
if (choice == 1) { vector<vector<int>> matrix(n, vector<int>(m)); inputMatrix(matrix, n, m);
int value; cout << "Введите значение, которое нужно переместить в начало: "; cin >> value;
sortMatrix(matrix, n, m, value); cout << "Упорядоченная матрица:" << endl; printMatrix(matrix); } else if (choice == 2) { vector<vector<float>> matrix(n, vector<float>(m)); inputMatrix(matrix, n, m);
float value; cout << "Введите значение, которое нужно переместить в начало: "; cin >> value;
sortMatrix(matrix, n, m, value); cout << "Упорядоченная матрица:" << endl; printMatrix(matrix); } else if (choice == 3) { vector<vector<char>> matrix(n, vector<char>(m)); inputMatrix(matrix, n, m);
char value; cout << "Введите значение, которое нужно переместить в начало: "; cin >> value;
sortMatrix(matrix, n, m, value); cout << "Упорядоченная матрица:" << endl; printMatrix(matrix); } else { cout << "Неверный выбор типа элемента." << endl; } return 0; } |
Продолжение
Листинга
3.1
