Помощь - Поиск - Пользователи - Календарь
Полная версия: ВЫЧЕСЛИТЬ МАТРИЦУ АВ-ВА
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
многорассмотрительствующий
Даны квадратные матрицы А и В порядка n. Получить матрицу АВ-ВА.
Перемножение матриц я видел, а тут заглох. Нужна помощь.
Или ссылка. unsure.gif А может я туплююю mad.gif
volvo
Сорри, но если ты видел перемножение матриц, то рядом же было и их сложение. Что мешает сделать так:

...
matrixMult(T1, A, B);
matrixMult(T2, B, A);
matrixSub(res, T1, T2);
...


Процедуру matrixMult смотреть здесь: Массивы. Матрицы. Типичные задачи.
matrixSub делается совершенно аналогично matrixAdd, но со знаком минус...
многорассмотрительствующий
PROGRAM allan_28102006_1325;
{RAZNOST' PROIZVEDENi QvADRATNIx MATRIc AB - BA}
USES crt;
const size = 5;
const cell = 5;
const genM = 5;
TYPE DArray = Array[1..size,1..size]of integer;
var A,B,AB,BA,SubtArr : DArray;
var i,j,k : integer;

procedure multiple (in_arr01, in_arr02 : DArray; var RESULT : Darray);
var i,j,k : integer;
begin
for i:= 1 to high(in_arr02) do
for j:= 1 to high(in_arr01[1]) do begin
RESULT[i,j]:= 0;
for k:= 1 to high(in_arr02[1]) do
RESULT[i,j]:= RESULT[i,j] + in_arr01[i,k]*in_arr02[k,j];
end;
end;

procedure viewing (in_arr : DArray; X,Y : integer; Comment : String);
var i,j : integer;
begin
GotoXY (X,Y); Writeln (Comment);
for i:= 1 to high (in_arr) do begin
for j:= 1 to high (in_arr[1]) do begin
GotoXY (X+j*cell,Y+i); write(in_arr[i,j]);
end;
end;
end;

procedure generate (var in_arr : DArray);
var i,j : integer;
begin
for i:=1 to high (in_arr) do
for j:=1 to high (in_arr[1]) do
in_arr[i,j]:= random(GenM);
end;

procedure subtract (in_arr01, in_arr02: DArray; var RESULT : Darray);
var i,j : integer;
begin
for i:=1 to high (in_arr01) do
for j:=1 to high (in_arr01[1]) do
RESULT[i,j]:=in_arr01[i,j]-in_arr02[i,j];
end;
BEGIN
clrscr;
generate (A);
generate (B);


viewing (A,1,1,'First Array A:');
viewing (B,cell*(size+2),1,'Second Array B:');

multiple (A,B,AB);
viewing (AB,1,size+3,'First Multiple:');

multiple (B,A,BA);
viewing (BA,cell*(size+2),size+3,'Second Multiple:');

subtract (AB,BA,SubtArr);
viewing (SubtArr,1,(size+3)*2,'RESULT AB - BA:');

readln;

end.



Можно сделать более простую ?????
volvo
Во-первых, чего тегами не пользуешься?

Во-вторых, выводить матрицы можно и покрасивее:
procedure viewing (in_arr : DArray; X,Y : integer; Comment : String);
var i,j : integer;
begin
GotoXY (X,Y); Writeln (Comment);
for i:= 1 to high (in_arr) do begin
gotoxy(X, Y + i);
for j:= 1 to high (in_arr[1]) do write(in_arr[i,j]:cell);
end;
end;
(теперь по правому краю выравниваются как положительные, так и отрицательные числа)

Ну, и наконец, объясни, зачем тебе вся эта игра с high(in_arr02) и high (in_arr[1])? Не проще было бы использовать Size? blink.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.