Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба3 / Laba 3 (4)
.cpp#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;
class Matrix {
private:
vector<vector<double>> data;
int rows, cols;
public:
Matrix(int r = 1, int c = 1) : rows(r), cols(c) {
data.resize(rows, vector<double>(cols, 0));
}
Matrix(const vector<vector<double>>& d) : data(d) {
rows = d.size();
cols = d[0].size();
}
// Сложение матриц
Matrix operator+(const Matrix& other) const {
if (rows != other.rows || cols != other.cols) {
throw invalid_argument("Размеры матриц не совпадают для сложения");
}
Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] + other.data[i][j];
}
}
return result;
}
// Вычитание матриц
Matrix operator-(const Matrix& other) const {
if (rows != other.rows || cols != other.cols) {
throw invalid_argument("Размеры матриц не совпадают для вычитания");
}
Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] - other.data[i][j];
}
}
return result;
}
// Умножение матриц
Matrix operator*(const Matrix& other) const {
if (cols != other.rows) {
throw invalid_argument("Несовместимые размеры матриц для умножения");
}
Matrix result(rows, other.cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < other.cols; j++) {
for (int k = 0; k < cols; k++) {
result.data[i][j] += data[i][k] * other.data[k][j];
}
}
}
return result;
}
// Умножение на скаляр
Matrix operator*(double scalar) const {
Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] * scalar;
}
}
return result;
}
friend Matrix operator*(double scalar, const Matrix& m);
double& operator()(int i, int j) { return data[i][j]; }
const double& operator()(int i, int j) const { return data[i][j]; }
void print() const {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << data[i][j] << "\t";
}
cout << endl;
}
}
int getRows() const { return rows; }
int getCols() const { return cols; }
};
Matrix operator*(double scalar, const Matrix& m) {
return m * scalar;
}
int main() {
SetConsoleOutputCP(65001);
cout << "=== Задача 3.4 - Прямоугольная матрица ===" << endl;
Matrix m1({{1, 2, 3}, {4, 5, 6}});
Matrix m2({{7, 8}, {9, 10}, {11, 12}});
Matrix m3({{1, 2}, {3, 4}});
cout << "Матрица m1 (2x3):" << endl;
m1.print();
cout << "Матрица m2 (3x2):" << endl;
m2.print();
cout << "Матрица m3 (2x2):" << endl;
m3.print();
try {
Matrix product = m1 * m2;
cout << "m1 * m2:" << endl;
product.print();
} catch (const invalid_argument& e) {
cout << "Ошибка: " << e.what() << endl;
}
Matrix sum = m3 + m3;
cout << "m3 + m3:" << endl;
sum.print();
Matrix scaled = m3 * 2.5;
cout << "m3 * 2.5:" << endl;
scaled.print();
return 0;
}
Соседние файлы в папке Лаба3
