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

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

  1. Citromon

    Citromon Гость

    Добрый день.

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

    Мне помогли это сделать. Вот код этой программы.
    Код (Text):
     
    {$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 - симметричная.

    Вот заготовок программы.
    Код (Text):
    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.

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

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