[Pascal] Tablice dwuwymiarowe


(gumis112211) #1

Witam!

Nie wiem, jak utworzyć dwuwymiarową tablicę dynamiczną. Otóż mój kawałek kodu wygląda tak

var

n,i,j:byte;

t:array of array of integer;

begin


   write('Podaj ilosc wierzcholkow '); readln(n);

   setlength(t,n);

  writeln('Podawaj teraz kolejne elementy wierszy macierzy');

  for i := 0 to n - 1 do

    for j := 0 to n - 1 do

      begin

      repeat

       write('Podaj element macierzy x[',i,',',j,']: ');

readln(t[i,j]);

       if ((t[i,j])<>0) and ((t[i,j])<>1) and ((t[i,j])<>2) then

        writeln('Podales zla wartosc elementu(musi byc 0, 1 lub 2)');

      until ((t[i,j])=0) or ((t[i,j])=1) or ((t[i,j])=2);

      end;


    for i := 0 to n - 1 do

    for j := 0 to n - 1 do

      begin

      write(t[i,j],' ') ;

      if (j=n-1) then

       writeln;

      end;


  readln;

end.

ma być to macierz kwadratowa i chcę, aby użytkownik mógł podać jej wymiar, jak sobie z tym poradzić? Jak dawałem samo t:array of integer; to przy wczytaniu przy readln(t[i,j]); wyskakuje błąd a jego opis to "Array type required". Próbowałem też deklarować ją jako typ i wciąż to samo

type tab=array of integer;

 var

n,i,j:byte;

t:tab;

Może ktoś pomóc?


(Latos 89) #2

Witam,

nie wiem czy coś ci pomogę bo styczność z Pascalem miałem kilka lat temu, ale do dynamicznych tablic powinieneś chyba operować na wskaźnikach. Dzięki temu możesz w danej chwili zmienić wielkość tablicy.


(Simplex111) #3

Nie wiem, jakiego Pascala używasz, ale w Delphi i Free Pascalu można podać więcej niż jeden parametr określający rozmiar tablicy w procedurze SetLength. Inaczej mówiąc, można ustalać rozmiar wielowymiarowych tablic dynamicznych. Oto kod:

var n, i, j: byte;

    t: array of array of integer;


begin

  write('Podaj ilosc wierzcholkow ');

  readln(n);

  setlength(t, n, n);

  writeln('Podawaj teraz kolejne elementy wierszy macierzy');

  for i := 0 to n - 1 do

   for j := 0 to n - 1 do begin

     write('Podaj element macierzy x[', i, ',', j, ']: ');

     Readln(t[i, j]);

   end;


   for i:= 0 to n - 1 do

    for j:= 0 to n - 1 do begin

      write(t[i, j]:3) ;

      if j = n-1 then writeln;

    end;

  readln;

end.

(gumis112211) #4

Dzięki wielkie ;]

Podałeś to jak na talerzu, zaraz sobie sprawdzę to rozwiązanie. - piszę w Delphi

jak policzyć ilość wierszy w których wystepuja same zera?