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;
}
Файл:
Вывод в консоли:
Ввод с клавиатуры и чтение из файла
Некорректные данные с клавиатуры
Некорректные данные с файла
Вывод:
В процессе написания лабораторной работы разработан алгоритм распаковки сжатой диагональной матрицы. Был изучен материал для экономии памяти в матрицах, который позволяет повысить производительность программы.
