Умножение матриц (комплексные числа)
Задача.
Умножить матрицу комплексных чисел на другую.
PROGRAM MNOJAR;
uses crt;
const nmax=20; mmax=30; nmmax=600; {= nmax*mmax;}
type cmplx= record
re,im:real; {соответственно: вещественная и мнимая части числа}
end;
mas = array [1..nmmax] of cmplx; {представим матрицу одномерным массивом}
var a,b,c:mas; n,m,k,i,j:integer;
PROCEDURE MNOJKA(a,b:cmplx; var rez:cmplx);
BEGIN rez.re:=a.re*b.re - a.im*b.im; rez.im:=b.re*a.im + a.re * b.im;
END;
PROCEDURE MNOJ2(var a,b,c:mas; n,m,k:integer);
var i,j,l:integer; sum,mnoj:cmplx;
BEGIN
for i:=1 to n do for j:=1 to k do
begin sum.re:=0; sum.im:=0; for l:=1 to m do
begin mnojka(a[(l-1)*n+i],b[(j-1)*m+l],mnoj);
sum.re:= sum.re + mnoj.re; sum.im:=sum.im + mnoj.im;
end;
c[(j-1)*n + i] := sum;
end;
END;
BEGIN textattr := $70; clrscr; {цвет экрана=$7; цвет шифта=$0. Затем - чистим экран}
{если убрать 1-ю и последнюю строку, то модуль crt не нужен (у кого он не работает)}
writeln(' Программа перемножает две комплексные матрицы...');
writeln(' Аварийный выход - Ctrl Pause-Break, затем восстанови цвета - ' );
writeln(' ( выполнить команду cls в командной строке DOS ) '); writeln;
write(' Введи число строк массива А ---> ');readln(n);
write(' Введи число столбцов массива А ---> ');readln(m);
writeln(' (Число строк массива В равно числу столбцов массива А)');
write(' Введи число стобцов массива B ---> ');readln(k);
writeln(' Введи элементы массива А (по столбцам)');
for j:=1 to m do for i:=1 to n do
begin
write (' Введи A[',i,',',j,'].Re ===> ');readln(a[i+(j-1)*n].re);
write (' Введи A[',i,',',j,'].Im ===> ');readln(a[i+(j-1)*n].im);
end;
writeln(' Введи элементы массива B (по столбцам)');
for j:=1 to k do for i:=1 to m do
begin
write (' Введи B[',i,',',j,'].Re ===> ');readln(b[i+(j-1)*m].re);
write (' Введи B[',i,',',j,'].Im ===> ');readln(b[i+(j-1)*m].im);
end;
{ -------- умножим A*B = C ----------------------- }
mnoj2(a,b,c,n,m,k); writeln(
'------ Результат умножения A*B = C --------- ');
for j:=1 to k do for i:=1 to n do
writeln (' C[',i,',',j,'] = ',c[i+(j-1)*n].re:10:5,' + ',
c[i+(j-1)*n].im:10:5,' * I');
writeln(' жми клавишу Enter (но не сильно) ... ' ); readln;
textattr := $07; clrscr;
END.
---- Результат: ------
Программа перемножает две комплексные матрицы...
Аварийный выход - Ctrl Pause-Break, затем восстанови цвета -
( выполнить команду cls в командной строке DOS )
Введи число строк массива А ---> 2
Введи число столбцов массива А ---> 3
(Число строк массива В равно числу столбцов массива А)
Введи число стобцов массива B ---> 1
Введи элементы массива А (по столбцам)
Введи A[1,1].Re ===> 1
Введи A[1,1].Im ===> 2
Введи A[2,1].Re ===> 2
Введи A[2,1].Im ===> 1
Введи A[1,2].Re ===> 1
Введи A[1,2].Im ===> 3
Введи A[2,2].Re ===> 2
Введи A[2,2].Im ===> 0
Введи A[1,3].Re ===> 4
Введи A[1,3].Im ===> 2
Введи A[2,3].Re ===> 2
Введи A[2,3].Im ===> 5
Введи элементы массива B (по столбцам)
Введи B[1,1].Re ===> 2
Введи B[1,1].Im ===> 2
Введи B[2,1].Re ===> 1
Введи B[2,1].Im ===> 4
Введи B[3,1].Re ===> 2
Введи B[3,1].Im ===> 2
------ Результат умножения A*B = C ---------
C[1,1] = -9.00000 + 25.00000 * I
C[2,1] = -2.00000 + 28.00000 * I
жми клавишу Enter (но не сильно) ...