Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
01.11.2025
Размер:
3.96 Кб
Скачать
#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