Програмування
операцій з квадратними масивами(матрицями)
мовою Pascal
Базові операції обробки двовимірних масивів.
Наведемо спочатку перелік базових операцій над матрицями та їх елементами. До
таких операцій належать: а) введення та виведення матриць; б) створення нової
матриці за заданим алгоритмом; в) пошук елементів матриці за певним критерієм;
г) визначення, чи задовольняє матриця або окремі її елементи певній
властивості; д) виконання певних операцій над компонентами матриць
(переставлення рядків і стовпців, додавання матриць, віднімання матриць, множення
матриць на число, добуток двох квадратних матриць тощо).
Program MATRIX; {Найменування програми}
Uses CRT;
var i1, i2, i3:
integer; {Лічильник рядків}
j1, j2, j3: integer; {Лічильник стовпців}
operation: integer; {Варіант розвитку програми}
det: real; {Визначник} k:
integer; {Робоча змінна}
{Масиви (матриці), що використовуються в програмі}
MAS1, {Матриця А} MAS2, {Матриця В} MAS3: array [1 .. 10,1 .. 10]
of real; {Матриця С}
BEGIN {Початок програми}
WriteLn ('Що Ви бажаєте робити з матрицями?');
{Вибір користувачем варіанту розвитку програми}
WriteLn ('Якщо Ви бажаєте знайти визначник матриці, натисніть 1');
WriteLn ('Якщо Ви бажаєте знайти зворотну матрицю,
натисніть 2');
WriteLn ('Якщо Ви бажаєте транспонувати матрицю,
натисніть 3');
WriteLn ('Якщо Ви бажаєте скласти матриці,
натисніть 4');
WriteLn ('Якщо Ви бажаєте відняти матриці,
натисніть 5');
WriteLn ('Якщо Ви бажаєте перемножити матриці,
натисніть 6');
ReadLn (operation); {Занесення обраного варіанту в
пам'ять}
WriteLn ('Введіть кількість рядків матриці, не
більше 10');
ReadLn (m1);
WriteLn ('Введіть кількість стовпців початкової
матриці, не більше 10');
ReadLn (n1);
If ((1> n1) or
(n1> 10) or (1> m1) or (m1> 10)) {Умови помилки}
then begin
WriteLn ('ПОМИЛКА !!!'); end
for i1: = 1 to m1 do
for j1: = 1 to n1 do
Read (MAS1 [i1, j1]); end;
for i1: = 1 to m1 do {Відповідь вихідної матриці}
begin
for j1: = 1 to n1 do
Write (MAS1 [i1, j1]); WriteLn;
end;
Case operation of {Оператор вибору
«operation»}
1: begin {Визначник}
if (m1 <> n1)
then writeLn ('ПОМИЛКА !!!') {Умова
помилки} else
begin {Формула визначника}
det: = (MAS1 [1,1] *
MAS1 [2,2] * MAS1 [3,3]+ MAS1 [2,1] * MAS1 [3,2] * MAS1 [1,3] + MAS1 [1,2] * MAS1
[2,3] * MAS1 [3,1])- (MAS1 [3,1] * MAS1 [2,2] * MAS1 [1,3]+ MAS1 [3,2] * MAS1
[2,3] * MAS1 [1,1]+ MAS1 [2,1] * MAS1 [1,2] * MAS1 [3,3]);
WriteLn ('Визначник матриці розміром 3х3, det =', det);
{Висновок визначника} end; end;
2: begin {обернена матриця}
if (m1 <> n1)
then WriteLn ('ПОМИЛКА !!!') {Умова помилки}
else begin {Визначник}
det: = (MAS1 [1,1] *
MAS1 [2,2] * MAS1 [3,3] + MAS1 [2,1] * MAS1 [3,2] * MAS1 [1,3]+ MAS1 [1,2] *
MAS1 [2,3] * MAS1 [3,1])- (MAS1 [3,1] * MAS1 [2,2] * MAS1 [1,3]+ MAS1 [3,2] *
MAS1 [2,3] * MAS1 [1,1]+ MAS1 [2,1] * MAS1 [1,2] * MAS1 [3,3]);
if det = 0 then WriteLn
('ПОМИЛКА !!!') {Умова помилки} else begin {Союзна матриця}
for i1: = 1 to m1 do
for j1: = 1 to n1 do
MAS2 [i1, j1]: = MAS1 [j1, i1]; {Підсумкова формула}
for i1: = 1 to m1 do
for j1: = 1 to n1 do
MAS3 [i1, j1]: = (1/det) * MAS2 [i1, j1];
WriteLn; WriteLn ('обернена матриця:');
for i1: = 1 to m1 do
begin {Відповідь оберненої матриці}
for j1: = 1 to n1 do
Write (MAS3 [i1, j1]);
WriteLn; end; end;
end; end;
3: begin {Транспонування матриці}
for i1: = 1 to m1 do
for j1: = 1 to n1 do
MAS2 [i1, j1]: = MAS1 [j1, i1]; {Формула}
WriteLn ('Транспонована матриця:');
for i1: = 1 to m1 do
begin {Відповідь транспонованої матриці}
for j1: = 1 to n1 do
Write (MAS2 [i1, j1]);
WriteLn; end; end;
4,5: begin {Додавання / віднімання матриць} {Введення другої матриці}
WriteLn ('Введіть кількість рядків другої матриці'); ReadLn (m2);
Writeln ('Введіть кількість стовпців другого матриці'); ReadLn (n2);
If (n2 <> n1) or
(m2 <> m1) then WriteLn ('OSHIBKA !!!') {Умова помилки}
else begin
WriteLn ('Введіть другу матрицю');
for i1: = 1 to m1 do
for j1: = 1 to n1 do
Read (MAS2 [i1, j1]);
end;
for i1: = 1 to m1 do {Вигляд другої матриці}
begin
for j1: = 1 to n1 do
Write (MAS2 [i1, j1]); WriteLn; end;
if operation = 4 then
k: = 1;
if operation = 5 then
k: = -1;
for i1: = 1 to m1 do
for j1: = 1 to n1 do
MAS3 [i1, j1]: = MAS1
[i1, j1] + k * MAS2 [i1, j1]; {Підсумкова формула}
writeln ('Сума / різниця:');
for i1: = 1 to m1 do begin
for j1: = 1 to n1 do
Write (MAS3 [i1, j1]); WriteLn; end; end;
6: begin {Множення матриць} {Введення другого матриці}
WriteLn ('Введіть кількість рядків другий
матриці'); ReadLn (m2);
Writeln ('Введіть кількість стовпців другого
матриці'); ReadLn (n2);
If ((1> = m2) or
(m2> = 10) or (1> = n2) or (n2> = 10) {Умова помилки}
or (n2 <> m1))
then WriteLn ('ПОМИЛКА !!!') else begin
WriteLn ('Введіть другу матрицю');
for i2: = 1 to m2 do
for j2: = 1 to n2 do
Read (MAS2 [i2, j2]); end;
for i2: = 1 to m2 do
begin {Вигляд другої матриці}
for j2: = 1 to n2 do
Write (MAS2 [i2, j2]); WriteLn;
end;
m3: = m1; n3: = n2;
for i3: = 1 to m3 do
for j3: = 1 to n3 do
begin MAS3 [i3, j3]: = 0;
for i2: = 1 to m2 do
{Підсумкова формула}
MAS3 [i3, j3]: = MAS3
[i3, j3] + MAS1 [i3, i2] * MAS2 [i2, j3];
end;
begin {Вигляд добутку матриць}
writeln;
writeln ('Добуток двох матриць:');
for i3: = 1 to m1 do
begin
for j3: = 1 to n2 do
Write (MAS3 [i3, j3]);
WriteLn;
end; end; end; end; {End Case}
END. {Кінець програми}
Немає коментарів:
Дописати коментар