пʼятниця, 6 лютого 2015 р.

Програмування операцій з квадратними масивами(матрицями) мовою Pascal

Програмування  операцій з квадратними  масивами(матрицями) мовою 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
else begin  WriteLn ('Введіть початкову матрицю'); {Введення вихідної матриці}
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. {Кінець програми}

Немає коментарів:

Дописати коментар