11// Создайте класс SqrMatrix
22// (квадратная матрица с элементами типа double)
33// с операциями + - * /, умножения на скаляр
4- // Размерность матрицы задать в конструкторе
4+ // Размерность матрицы задать в конструкторе
5+
6+ // TODO:
7+ // Используйте приватные поля для данных
8+ // Реализуйте конструктор, который должен устанавливать значения по умолчанию,
9+ // Реализуйте методы для чтения и записи значений полей (set, get), а также ввода и вывода (перегрузка operator<< и operator>> не требуется)
10+ // Если требуется, напишите конструктор копий, оператор присваивания и деструктор
11+ // Напишите программу для тестирования вашего класса
12+
13+ #include " matrix.h"
14+
15+ int main () {
16+ Matrix m1;
17+ m1.print ();
18+
19+ Matrix m2 (10 );
20+ m2.print ();
21+
22+ Matrix m3 (
23+ {
24+ {1 , 2 , 3 , 4 },
25+ {1 , 2 , 3 , 4 },
26+ {1 , 2 , 3 , 4 },
27+ {1 , 2 , 3 , 4 },
28+ }
29+ );
30+ m3.print ();
31+
32+ Matrix m4 (m3);
33+ m4.print ();
34+
35+ Matrix m5 (
36+ {
37+ {1 , 2 },
38+ {3 , 4 }
39+ }
40+ );
41+ m5.print ();
42+
43+ m5 = m3;
44+ m5.print ();
45+
46+ /*
47+ // Error in class constructor: Matrix is not square
48+ Matrix m6(
49+ {
50+ {1, 1, 0, 0, 1},
51+ {1, 1, 0, 0, 1},
52+ {1, 1, 0, 0, 1},
53+ }
54+ );
55+ m6.print();
56+ */
57+
58+ Matrix m7 (5 , 0.01 );
59+ for (int i = 0 ; i < m7.size (); i++)
60+ m7.set (i, i, 9.99 );
61+
62+ m7.set (4 , 2 , 3.14 );
63+ m7.print ();
64+
65+ /*
66+ // Error in 'set' operator: Invalid index
67+ m7.set(m7.size(), m7.size() + 1, 0);
68+ m7.print();
69+ */
70+
71+ m7.set (
72+ {
73+ {1 , 2 , 3 , 4 , 5 },
74+ {1 , 2 , 3 , 4 , 5 },
75+ {1 , 2 , 3 , 4 , 5 },
76+ {1 , 2 , 3 , 4 , 5 },
77+ {1 , 2 , 3 , 4 , 5 }
78+ }
79+ );
80+ m7.print ();
81+
82+ /*
83+ // Error in 'set' operator: Target matrix has different size
84+ m7.set(
85+ {
86+ {1, 2},
87+ {3, 4}
88+ }
89+ );
90+ m7.print();
91+ */
92+
93+ m7.set (0 , 0 , 0 )
94+ .set (0 , m7.size ()-1 , 0 )
95+ .set (m7.size ()-1 , 0 , 0 )
96+ .set (m7.size ()-1 , m7.size ()-1 , 0 );
97+ m7.print ();
98+
99+ Matrix m8 (3 , 0.1 );
100+ m8.print ();
101+
102+ m8.set (
103+ {
104+ {9 , 8 , 7 },
105+ {6 , 5 , 4 },
106+ {3 , 2 , 1 }
107+ }
108+ ).set (2 , 2 , 0 );
109+ m8.print ();
110+
111+ Matrix m9 (3 );
112+ m9.set (m8).set (2 , 2 , 1 );
113+ m9.print ();
114+
115+ Matrix m10 (10 );
116+ m10.set (0 , 0 , 2 ).set (9 , 9 , 9 );
117+ m10.print ();
118+
119+ cout << m10.get (0 , 0 ) << " at 0, 0" << endl
120+ << m10.get (9 , 9 ) << " at 9, 9" << endl
121+ << m10.get (5 , 5 ) << " at 5, 5" << endl << endl;
122+
123+ /*
124+ // Error in 'get' operator: Invalid index
125+ cout << m10.get(10, 10) << " at 10, 10" << endl;
126+ */
127+
128+ m10.transpose ().print ();
129+ m9.transpose ().print ();
130+
131+ Matrix test (
132+ {
133+ {1 , 2 , 3 },
134+ {4 , 5 , 6 },
135+ {7 , 8 , 9 }
136+ }
137+ );
138+
139+ test.print ();
140+ test.transpose ().print ();
141+
142+ // operators test
143+
144+ Matrix summ = Matrix (5 , 1 ) + Matrix (5 , 2 );
145+ summ.print ();
146+ summ -= Matrix (5 , 4 );
147+ summ.print ();
148+
149+ // проверка умножения
150+
151+ Matrix mult1 ({
152+ {1 , 2 , 3 },
153+ {4 , 5 , 6 },
154+ {7 , 8 , 9 },
155+ });
156+
157+ Matrix mult2 ({
158+ {6 , 1 , 8 },
159+ {0 , 4 , 2 },
160+ {6 , 1 , 8 },
161+ });
162+
163+ mult1.print ();
164+ cout << " *\n " << endl;
165+ mult2.print ();
166+
167+ cout << " =\n " << endl;
168+ mult1 *= mult2;
169+ mult1.print ();
170+
171+ Matrix mult3 (6 , 6 );
172+ mult3.print ();
173+ cout << " * 6 =\n " << endl;
174+
175+ mult3 *= 6 ;
176+ mult3.print ();
177+
178+ Matrix det_test ({
179+ {2 , 4 , 3 },
180+ {5 , 7 , 8 },
181+ {6 , 9 , 1 },
182+ });
183+
184+ cout << det_test.determinant () << endl << endl;
185+
186+ det_test.minor_matrix ().print ();
187+ det_test.algebraic_additions ().print ();
188+
189+ Matrix aaa ({
190+ {1 , 2 },
191+ {3 , 4 }
192+ });
193+ aaa.print ();
194+
195+ aaa.inverse ().print ();
196+
197+ Matrix a100 ({
198+ {1 , 18 , 4 , 6 , 9 },
199+ {11 , 17 , 13 , 14 , 8 },
200+ {25 , 2 , 19 , 15 , 21 },
201+ {10 , 5 , 12 , 3 , 7 },
202+ {24 , 20 , 22 , 16 , 23 }
203+ });
204+ a100.print ();
205+
206+ cout << a100.determinant () << endl << endl;
207+ a100.inverse ().print ();
208+
209+ Matrix mult_a ({
210+ {13 , 26 },
211+ {39 , 13 }
212+ });
213+
214+ Matrix mult_b ({
215+ {7 , 4 },
216+ {2 , 3 }
217+ });
218+
219+ // для проверки
220+ // https://ru.wikihow.com/делить-матрицы
221+ (mult_a / mult_b).print ();
222+ }
0 commit comments