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.