Mnożenie macierzy[Delphi]

gosia301
Użytkownik
Użytkownik
Posty: 94
Rejestracja: 10 maja 2009, o 18:13
Płeć: Kobieta
Pomógł: 1 raz

Mnożenie macierzy[Delphi]

Post autor: gosia301 »

proszę o sprawdzenie bo źle wypisuje mi iloczyn macierzy

const
max = 100; {maksymalna wielkosc tablicy}
type
tablica = array [1..max,1..max] of integer;
var
n,i,j : integer;
A,B,C : tablica;

Procedure wczytaj_tablice ( var tab : tablica );
var
i,j : integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
write('Podaj wartosc w polu [',i,',',j,'] : ');
readln(tab[i,j]);
end;
end;
end;

Procedure wyswietl_tablice ( var tab : tablica );
var
i,j : integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
write(tab[i,j]:4, #9);
end;
writeln;
end;
end;

procedure Transponuj(var A,B : tablica; n : integer);
var i,j : integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
B[j,i]:=A[i,j];
end;
end;
end;

procedure iloczyn(i,j:integer;A,B:tablica;var C:tablica);
var k,iloczyn:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
for k:=1 to n do
begin
iloczyn:=a[i,j]*b[j,k];
c[i,k]:=iloczyn;
end;
end;
end;


BEGIN

writeln('=====================================================================');
writeln('Program wczytuje tablice o podanych rozmiarach i wypisuje ja na ekran');
writeln('=====================================================================');
writeln;
writeln('Uwaga! Ilosc wierszy i kolumn nie moze byc > 100 ! ');
writeln;
write('Podaj ilosc wierszy : ');readln(n);
//write('Podaj ilosc kolumn : ');readln(n);

wczytaj_tablice(A);
wyswietl_tablice(A);
Transponuj(A,B,n);
writeln('Transponowana macierz to: ');
wyswietl_tablice(B);
iloczyn(i,j,A,B,C);
writeln('Macierz ortogonalna: ');
wyswietl_tablice(C);
//wyswietl_tablice(C);


readln;
END.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Mnożenie macierzy[Delphi]

Post autor: spajder »

No bo jest źle napisany. Iloczyn macierzy liczy się tworząc wyrażenia (zgodnie z Twoimi oznaczeniami) a[i,k]*a[k,j] po wszystkich możliwych k i dopiero po ich zsumowaniu dostajesz wartość c[i,j]

Reasumując: mnożysz przez siebie nie te elementy co trzeba i nigdzie nie tworzysz sumy (przypisujesz do wyjściowej macierzy po prostu wartość jednego z tych iloczynów)
ODPOWIEDZ