Оглавление Умножение матриц (комплексные числа)


Задача.

Умножить матрицу комплексных чисел на другую.
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 (но не сильно) ...
Rambler's Top100
Hosted by uCoz