DZ4

Форк
0
/
project2.cpp 
170 строк · 4.8 Кб
1
//Создайте шаблонный класс матрица. Необходимо реализовать динамическое выделение памяти, очистку памяти, заполнение матрицы с клавиатуры, 
2
// заполнение случайными значениями, отображение матрицы, арифметические операции с помощью перегруженных операторов (+, -
3
//*, / ), поиск максимального и минимального элемента.
4
#include <iostream>
5
#include <iomanip>
6
using namespace std;
7
template <typename T>
8
class Matrix {
9
private:
10
    T** data;
11
    int rows;
12
    int cols;
13

14
public:
15
    Matrix(int rows, int cols) : rows(rows), cols(cols) {
16
        data = new T * [rows];
17
        for (int i = 0; i < rows; ++i) {
18
            data[i] = new T[cols];
19
        }
20
    }
21

22
    ~Matrix() {
23
        for (int i = 0; i < rows; ++i) {
24
            delete[] data[i];
25
        }
26
        delete[] data;
27
    }
28

29
    void fillFromKeyboard() {
30
        for (int i = 0; i < rows; ++i) {
31
            for (int j = 0; j < cols; ++j) {
32
                cout << "Enter element [" << i << "][" << j << "]: ";
33
                cin >> data[i][j];
34
            }
35
        }
36
    }
37

38
    void fillRandom(T min, T max) {
39
        for (int i = 0; i < rows; ++i) {
40
            for (int j = 0; j < cols; ++j) {
41
                data[i][j] = rand() % (max - min + 1) + min;
42
            }
43
        }
44
    }
45

46
    void display() {
47
        for (int i = 0; i < rows; ++i) {
48
            for (int j = 0; j < cols; ++j) {
49
                cout << setw(4) << data[i][j];
50
            }
51
            cout << endl;
52
        }
53
    }
54

55
    Matrix operator+(const Matrix& other) {
56
        Matrix result(rows, cols);
57
        for (int i = 0; i < rows; ++i) {
58
            for (int j = 0; j < cols; ++j) {
59
                result.data[i][j] = data[i][j] + other.data[i][j];
60
            }
61
        }
62
        return result;
63
    }
64

65
    Matrix operator-(const Matrix& other) {
66
        Matrix result(rows, cols);
67
        for (int i = 0; i < rows; ++i) {
68
            for (int j = 0; j < cols; ++j) {
69
                result.data[i][j] = data[i][j] - other.data[i][j];
70
            }
71
        }
72
        return result;
73
    }
74

75
    Matrix operator*(const Matrix& other) {
76
        Matrix result(rows, other.cols);
77
        for (int i = 0; i < rows; ++i) {
78
            for (int j = 0; j < other.cols; ++j) {
79
                result.data[i][j] = 0;
80
                for (int k = 0; k < cols; ++k) {
81
                    result.data[i][j] += data[i][k] * other.data[k][j];
82
                }
83
            }
84
        }
85
        return result;
86
    }
87

88
    Matrix operator/(const Matrix& other) {
89
        // Just for demonstration, actual division is more complex
90
        Matrix result(rows, cols);
91
        for (int i = 0; i < rows; ++i) {
92
            for (int j = 0; j < cols; ++j) {
93
                result.data[i][j] = data[i][j] / other.data[i][j];
94
            }
95
        }
96
        return result;
97
    }
98

99
    T findMax() {
100
        T max = data[0][0];
101
        for (int i = 0; i < rows; ++i) {
102
            for (int j = 0; j < cols; ++j) {
103
                if (data[i][j] > max) {
104
                    max = data[i][j];
105
                }
106
            }
107
        }
108
        return max;
109
    }
110

111
    T findMin() {
112
        T min = data[0][0];
113
        for (int i = 0; i < rows; ++i) {
114
            for (int j = 0; j < cols; ++j) {
115
                if (data[i][j] < min) {
116
                    min = data[i][j];
117
                }
118
            }
119
        }
120
        return min;
121
    }
122
};
123

124
int main() {
125
    Matrix<int> mat1(2, 2);
126
    Matrix<int> mat2(2, 2);
127

128
    mat1.fillRandom(1, 10);
129
    mat2.fillRandom(1, 10);
130

131
    cout << "Matrix 1:" << endl;
132
    mat1.display();
133
    cout << endl;
134

135
    cout << "Matrix 2:" << endl;
136
    mat2.display();
137
    cout << endl;
138

139
    Matrix<int> sum = mat1 + mat2;
140
    cout << "Sum of matrices:" << endl;
141
    sum.display();
142
    cout << endl;
143

144
    Matrix<int> difference = mat1 - mat2;
145
    cout << "Difference of matrices:" << endl;
146
    difference.display();
147
    cout << endl;
148

149
    Matrix<int> product = mat1 * mat2;
150
    cout << "Product of matrices:" << endl;
151
    product.display();
152
    cout << endl;
153

154
Matrix<int> quotient = mat1 / mat2;
155
cout << "Quotient of matrices:" << endl;
156
quotient.display();
157
cout << endl;
158

159
int max1 = mat1.findMax();
160
int max2 = mat2.findMax();
161
cout << "Max element in Matrix 1: " << max1 << endl;
162
cout << "Max element in Matrix 2: " << max2 << endl;
163

164
int min1 = mat1.findMin();
165
int min2 = mat2.findMin();
166
cout << "Min element in Matrix 1: " << min1 << endl;
167
cout << "Min element in Matrix 2: " << min2 << endl;
168

169
return 0;
170
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.