Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант 18 / ПР-8.docx
Скачиваний:
3
Добавлен:
07.12.2024
Размер:
459 Кб
Скачать

1 Основной раздел

Во время работы программы пользователь вводит n строк и m столбцов непротиворечащим условиям (n<=100, m<=50). Дальше код работает следующим образом:

  1. Выбор типа элементов:

  • Программа предлагает пользователю выбрать тип элементов для матрицы: целые числа (1) или строки (2).

  1. Ввод элементов матрицы:

  • В зависимости от выбора пользователя программа вызывает соответствующую функцию для ввода матрицы. Если выбран тип "целые числа" вызывается целочисленная функций matrix, а если выбран пункт "строки" вызывается строчная функция matrix.

  1. Функция ввода элементов:

  • В функции inputMatrix (которая перегружена для работы как с целыми числами, так и со строками) программа инициирует цикл, который проходит по всем строкам и столбцам матрицы, запрашивая введение каждого элемента.

  1. Ввод значения для сортировки:

  • После ввода матрицы программа запрашивает у пользователя значение, которое должно быть перемещено в начало каждой строки.

  1. Сортировка матрицы:

  • В зависимости от типа элементов выполняется соответствующая функция сортировки, передавая в нее матрицу, размеры и введенное значение.

  1. Функция сортировки:

  • Для каждой строки данной функции, создаётся временный вектор для хранения элементов, которые не равны заданному значению;

  • Для каждой строки данной функции, считается количество элементов, равных заданному значению;

  • Для каждой строки данной функции, перезаполняется текущая строка: сначала заполняется нужное значение, затем копируются остальные элементы.

  1. Вывод упорядоченной матрицы:

  • После сортировки программа выводит новую упорядоченную матрицу на экран, используя функцию 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

Соседние файлы в папке Вариант 18