Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 19:54   #1
Citromon
 
Аватар для Citromon
 
Регистрация: 17.02.2012
Сообщений: 7
По умолчанию Умножение обычной матрицы на симметричную Pascal

Добрый день.

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

Надеюсь на вашу помощь.
Citromon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрицы.фрипаскаль.Умножение Akcentbek Помощь студентам 0 21.01.2012 13:07
умножение матрицы на матрицу fort-_-minor Общие вопросы C/C++ 2 26.12.2010 19:13
умножение матрицы на вектор 13xxx Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2010 22:15
Умножение матрицы на строку Алексей_xXx Помощь студентам 0 06.12.2009 21:07