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