Pascal задача на двумерные массивы

excel

Местный житель
Регистрация
12 Май 2013
Сообщения
154
Реакции
22
Помогите пожалуйста со следующей задачей по паскалю:

Пользователем вводятся матрицы A, B и C. Нужно посчитать матрицу D=A*A-B*C

По сути, программу я написал, но немного неправильно. Дело в том, что неправильно умножаю матрицу на матрицу. Матрица B*C умножается нормально, а вот A на A не хочет. Вроде как надо написать процедуру умножения матрицы на матрицу, но вот никак не пойму как это сделать. Надеюсь на вашу помощь, код ниже:

PHP:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const nmax=5;
type tmas=array[1..nmax,1..nmax]of real;
var f,e,a,b,c,d:tmas;
    n,i,j,k:integer;
    q,r,s,pr:real;//opisanie globalnoi peremennobegin
procedure vvod(m:integer;var a:tmas);
begin
for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     write('a[',i,'][',j,']=');
     readln(a[i,j]);
    end;
  end;
end;  // vvod
procedure vivod(m:integer; a:tmas);
begin
  for i:=1 to n do
   begin
    for j:=1 to n do write(a[i,j]:8:2);
    writeln;
   end;
end; //vivod
begin
  writeln('razmer matrica');
  readln(n);
  writeln('Vvod matrica A');
  vvod(n,a);
  writeln('vvod matrica B');
  vvod(n,b);
  writeln('vvod matrica C');
  vvod(n,c);
  writeln('matrica A');
  vivod(n,a);
  writeln('matrica B');
  vivod(n,b);
  writeln('matrica C');
  vivod(n,c);
  begin
  for i:=1 to n do
  for j:=1 to n do
     begin
     q:=a[i,j]*a[i,j];
     f[i,j]:=q;
     r:=b[i,j]*c[i,j];
     e[i,j]:=r;
     end;
  end;
  writeln('poluchennoe slozheni matric A*A = F');
  vivod(n,f);
  writeln('poluchennoe slozheni matric B*C = E');
  vivod(n,e);
  for i:=1 to n do
  for j:=1 to n do
   begin
    s:=0;
    for k:=1 to n do
    s:=s+f[i,k]-e[k,j];
    d[i,j]:=s;
   end;
  writeln('proizvedenie matric D=F-E');
  vivod(n,d);
  readln;

end.
 
Код:
q:=a[i,j]*a[i,j];
там сумма произведений должна быть.. числа по строке умножаются на числа по столбцу.. и складывается всё это дело.
 
Код:
q:=a[i,j]*a[i,j];
там сумма произведений должна быть.. числа по строке умножаются на числа по столбцу.. и складывается всё это дело.
А как процедуркой сделать то это?
 
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Последнее редактирование:
ладно, разберусь, спасибо
 
ладно, разберусь, спасибо
А чего разбираться-то? по второй ссылке первый результат... задача 1-в-1.. и ещё один клик до готового решения (код целиком)

Ключевое отличие - считать сумму:
Код:
  S:=0;
  for k:=1 to y do
  S:=S+a[i,k]*b[k,j];
 
А чего разбираться-то? по второй ссылке первый результат... задача 1-в-1.. и ещё один клик до готового решения (код целиком)
ну я и говорю спасибо за помощь
 
А как процедуркой сделать то это?
Процедуркой делать не надо. У тебя в цикле идёт перемножение используются регистры, а если через процедурку, то надо каждый раз кучу параметров передавать и юзать ОЗУ.
 
Назад
Сверху