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

Тема в разделе "Pascal and Delphi", создана пользователем Citromon, 8 апр 2012.

  1. Citromon

    Citromon Гость

    Репутация:
    0
    Добрый день.

    Мне была поставлена задача написать программу на 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.

    Надеюсь на вашу помощь.
     
Загрузка...

Поделиться этой страницей