alokovanie 2D dynam.pola - Pacsal

Programovacie jazyky, rady, poradňa...
Bender8
Amateur
Amateur
Príspevky: 22
Registrovaný: 14 okt 2009, 1:51

alokovanie 2D dynam.pola - Pacsal

Príspevok od používateľa Bender8 »

Ahoj. Pokusam sa alokovat 2dimenzionalne dynamicke pole(maticu) ale nejak mi to nejde...vytvoril som tuto proceduru(ktora to pole este aj vynuluje):

Kód: Vybrať všetko

type Tmatice = array of array of integer;
.
.
.
.
.
procedure setUp(var m:Tmatice;x:integer;y:integer);

 begin

 setlength(m,x);

 for i:=1 to x do

 setlength(m[i],y);



 for j:=1 to y do

 m[1,j]:=0;



 for i:=2 to x do

 m[i]:=m[1];

 end;
x je pocet riadkov a y pocet stlpcov matice...vypisuje to nejaky error 201, nema niekto iny napad ako nato,resp. kde robim chybu?

prikladam aj cely program, na kt. som to skusal, mozno mam chybu inde...dakujem za rady.

Kód: Vybrať všetko

http://www.edisk.sk/stahni/85657/matica.pas_614B.html
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Problém je, že dynamické pole začína od 0 pozície. Ak dáš forcyklus od 1, nič sa nedeje, ale preskočil si prvú bunku. Ak dáš ten forcyklud do x, tam máš problém, lebo neexistuje, keďže prvá pozícia je 0, posledná bude x-1.
Používaj radšej funkcie Low() a High().

Nemám tu teraz Pascal, ale skúšam to z hlavy:

Kód: Vybrať všetko

type
  TMatica = array of array of Integer; 

procedure VytvorANastav(var m: TMatica; x: Integer; y: Integer); 
var
  i, j: Integer;
begin
  SetLength(m, x);
  for i := Low(m) to High(m) do
  begin
    SetLength(m[i], y);
  end;
  for i := Low(m) to High(m) do
  begin
    for j := Low(m[i]) to High(m[i]) do
    begin
      m[i][j] := 0;
    end;
  end;
end;
Napísať odpoveď