Pascal. Умножение Обычной Матрицы На Симметричную

  • Автор темы Citromon
  • Дата начала
C

Citromon

#1
Добрый день.

Мне была поставлена задача написать программу на pascal-e, реализующую умножение обычной m*n матрицы на симметричную m*n матрицу.

Мне помогли это сделать. Вот код этой программы.
Код:
{$N+}

const
m=7;
n=5;

var
a:array[1..m, 1..n] of single;	 {definition first (non-symmetric) matrix A}
b:array[1..n, 1..n] of single;	 {and second symmetric matrix B}
c:array[1..m, 1..n] of single;	 {third matrix is a result matrix C}
i,j,k:integer;

begin
randomize;
for i:=1 to m do		 {initialization the matrix A by random numbers}
for j:=1 to n do
a[i,j]:=4*random-2;

for i:=1 to n do		 {initialization the symmetric matrix B by random numbers}
for j:=1 to n do
begin
b[i,j]:=4*random-2;
b[j,i]:=b[i,j];
end;

writeln('Matrix A');	 {displaying non-symmetric matrix A}
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j]:8:3);
writeln;
end;
writeln;

writeln('Matrix B');	 {displaying symmetric matrix B}
for i:=1 to n do
begin
for j:=1 to n do write(b[i,j]:8:3);
writeln;
end;
writeln;

for i:=1 to m do		 {begining of matrix multuplication}
for j:=1 to n do
begin
c[i,j]:=0;
for k:=1 to n do c[i,j]:=c[i,j]+a[i,k]*b[k,j];
end;

writeln('Matrix C=A*B'); {displaying the matrix C}
for i:=1 to m do
begin
for j:=1 to n do write(c[i,j]:8:3);
writeln;
end;

writeln('Press [Enter] ');
readln;
end.
Теперь от меня требуется переделать эту программу, учитывая некоторые нюансы.

Матрицы нужно представить в виде одномерных массивов.
- - - - - - - - - - - - - - - -

Допустим, матрица A - обычная, а B - симметричная.

Вот заготовок программы.
Код:
program matrix_multiplication; 

const 
m=7; 
n=5; 

var 
a:array[1..m]; 
b:array[1..n*(n+1)div2]; 

begin 
randomize; 

for i:=1 to m do 
a[i]=5*random-3; 
for i:=1 to n do 
b[i]=6*random-4; 
end; 

k:=i(i-1)div2+j; 

for i:=1 to m do 
begin 
if i>=о then k:=i*(i-1)div2+j; 

{initialization matrix B} 
k:=1; 
for i:=1 to n*(n-1)div2 do begin 
b[k]:=random(...); 
k:=k+1; end; 

{print matrix B} 
k:=1; 
for i:=1 to n do begin 
for j:=1 to i do begin 
write(b[k]:8); 
k:=k+1; end; 
writeln; 
end;
Нужно ещё реализовать само умножение и печать итоговой матрицы C.

Надеюсь на вашу помощь.