Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП_23_ИСТ_1_1_Какушкина_Ольга_Витальевна_ЛР_2.2.docx
Скачиваний:
2
Добавлен:
23.06.2025
Размер:
217 Кб
Скачать
☆

Matrix_operations.H

#include <unordered_map>

#include <vector>

#include <iostream>

using namespace std;

vector<vector<int>> unpackMatrix(const unordered_map<int, vector<int>>& packedMatrix, int n);

void printUnpackedMatrix(const vector<vector<int>>& unpackedMatrix);

void printEvenElementsSnake(const vector<vector<int>>& unpackedMatrix);

Matrix_operations.Cpp

#include "matrix_operations.h"

vector<vector<int>> unpackMatrix(const unordered_map<int, vector<int>>& packedMatrix, int n) {

vector<vector<int>> unpackedMatrix(n, vector<int>(n, 0));

for (const auto& pair : packedMatrix) {

int diagIndex = pair.first;

const vector<int>& values = pair.second;

if (diagIndex < 0) { // Под главной диагональю

for (int i = 0; i < values.size(); ++i) {

int row = i - diagIndex;

if (row < n) {

unpackedMatrix[row][i] = values[row];

}

}

}

else if (diagIndex > 0) { // Над главной диагональю

for (int i = 0; i < values.size(); ++i) {

int col = i + diagIndex;

if (col < n) {

unpackedMatrix[i][col] = values[i];

}

}

}

else {

for (int i = 0; i < values.size(); ++i) {

unpackedMatrix[i][i] = values[i];

}

}

}

return unpackedMatrix;

}

void printUnpackedMatrix(const vector<vector<int>>& unpackedMatrix) {

cout << "Распакованная матрица:\n";

for (const auto& row : unpackedMatrix) {

for (int col : row) {

cout << col << " ";

}

cout << endl;

}

}

void printEvenElementsSnake(const vector<vector<int>>& unpackedMatrix) {

if (unpackedMatrix.empty()) return;

int n = unpackedMatrix.size();

cout << "Четные элементы (обход змейкой): ";

for (int i = n - 1; i >= 0; --i) {

if (i % 2 == 0) {

for (int j = 0; j < n; ++j) {

if (unpackedMatrix[i][j] % 2 == 0 && unpackedMatrix[i][j] != 0) {

cout << unpackedMatrix[i][j] << " ";

}

}

}

else {

for (int j = n - 1; j >= 0; --j) {

if (unpackedMatrix[i][j] % 2 == 0 && unpackedMatrix[i][j] != 0) {

cout << unpackedMatrix[i][j] << " ";

}

}

}

}

cout << endl;

}

Файл:

Вывод в консоли:

Ввод с клавиатуры и чтение из файла

Некорректные данные с клавиатуры

Некорректные данные с файла

Вывод:

В процессе написания лабораторной работы разработан алгоритм распаковки сжатой диагональной матрицы. Был изучен материал для экономии памяти в матрицах, который позволяет повысить производительность программы.