(********************************************) (* Plne dynamicke pole s urcenim jeho delky *) (********************************************) program DemoDDS3; type PInt = ^integer; var pole: pointer; { pointer na budouci plne dynamicke pole } p_i: PInt; { pointer, pomoci ktereho se budeme v poli pohybovat } { pozor - nemuzeme pouzivat indexy! } delka,prvku,i: integer; procedure NactiPrvky(kam: PInt; kolik: integer); var i: integer; { adresa ulozena v pointeru kam se ve skutecnosti mimo funkci nezmeni } begin for i := 1 to kolik-1 do begin write(i:2,': '); readln(kam^); inc(kam); end; write(kolik:2,': '); { pozor, abychom se neposunuli az do pameti, ktera } readln(kam^); { nam nepatri } end; procedure VypisPrvky(ktere: PInt; kolik: integer); var i: integer; begin for i := 1 to kolik-1 do begin write(ktere^:4); inc(ktere); end; write(ktere^:4); end; begin write('Zadejte delku pole: (alespon 2) '); readln(delka); if delka < 2 then delka := 2; GetMem(pole, delka * sizeof(integer)); p_i := pole; { promenna pole obsahuje adresu, takze nepouzivame @ } write('Kolik prvku pole chcete zadat? (alespon dva) '); readln(prvku); if prvku < 2 then prvku := 2; if prvku > delka then prvku := delka; NactiPrvky(p_i, prvku); { pointer p_i zustava nastaven na zacatku pole } writeln; writeln('Prvky pole:'); VypisPrvky(p_i, prvku); FreeMem(pole, delka * sizeof(integer)); writeln; writeln('V teto chvili muzeme pouzit misto, ktere zabirala promenna'); write('"pole", k jinym ucelum - je volne'); readln; end. { kdybychom chteli vedet, kde momentalne v poli je pointer p_i, zavedeme novou promennou index, ktera se bude menit pri kazdem pohybu p_i -> vime, jak daleko od zacatku pole jsme a muzeme kontrolovat, jestli se pri posunu nedostaneme mimo pole }