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

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

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

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

  • Программа предлагает пользователю выбрать тип элементов для матрицы: int(1),float(2),char(3).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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