Cześć! Dwa krótkie pytania: 1) Coś jest źle z mnożeniem macierzy w moim programie. Wie ktoś może co i jakbym mógł to poprawić? Kod niżej.
2) Czy w funkcji (którą mam zamiar jeszcze napisać ;)) będę mógł się odwoływać to tablic zaimplementowanych w tej procedurze? Jeśli nie, to co powinienem zrobić aby stało się to możliwe?
program zad41;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure tab(w, s, ww, ss, rz, k: Integer);
var
Tab1, Tab2, Tab3: array of array of Integer;
i, j, l, t: Integer ;
suma: Integer;
begin
randomize;
repeat
writeln('Prosze o wybranie liczb naturalnych z wykluczeniem zera');
writeln('Podaj ilosc wierszy pierwszej tablicy');
readln(w);
writeln('Podaj ilosc kolumn pierwszej tablicy');
readln(s);
writeln('Podaj ilosc wierszy drugiej tablicy');
readln(ww);
writeln('Podaj ilosc kolumn drugiej tablicy');
readln(ss);
writeln;
until (w>0) and (s>0) and (ww>0) and (ss>0);
SetLength(Tab1, w+1, s+1);
SetLength(Tab2, ww+1, ss+1);
for i:=1 to w do begin
for j:=1 to s do begin
Tab1[i][j]:=random(40) - 20;
write(Tab1[i][j]:4); end;
writeln; end;
writeln;
for i:=1 to ww do begin
for j:=1 to ss do begin
Tab2[i][j]:=random(40) - 20;
write(Tab2[i][j]:4); end;
writeln; end;
writeln;
repeat
writeln('Ktory wiersz chcesz zobaczyc?');
readln(rz);
until (rz>0) and (rz<=w);
for j:=1 to s do
begin write(Tab1[rz][j]:4) end;
writeln;
repeat
writeln('Ktora kolumne chcesz obejrzec?');
readln(k);
until (k>0) and (k<=s);
for i:=w downto 1 do
begin writeln(Tab1[i][k]:4) end;
if s=ww then
begin
i:=1;t:=1;l:=1;j:=1;
for i := Low(Tab1) to High(Tab1) do
begin
while l <= High(Tab2[0]) do
begin
suma := 0;
t:= 1;
for j:=Low(Tab1[0]) to High(Tab1[0]) do
begin
suma := suma + Tab1[i,j]*Tab2[t,l];
inc(t);
end;
Tab3[i,l] := suma;
inc(l);
end;
l := 1;
end;
end
else begin
writeln('Liczba kolumn macierzy 1 musi byc rowna liczbie wierszy macierzy 2')end;
for i:=1 to w do
begin for j:=1 to ss do
begin write(Tab3[i][j]:4) end;
writeln; end;
end;
var
w, s, ww, ss, rz, k: Integer;
begin
tab(w, s, ww, ss, rz, k);
readln;
end.
Wszystko oprócz mnożenia macierzy działa jak powinno, tylko przy mnożeniu się zacina. Za wyjaśnienia i odpowiedzi, z góry dziękuje.