(*****************) (* Pole pointeru *) (*****************) program DemoDDS4; const DelkaPole = 100; { indexy 0..99 } MaxPocetPoli = 100; type TPole = array[0..DelkaPole-1] of real; var PoleP: array[0..MaxPocetPoli-1] of ^TPole; { pole pointeru } Delka: word; { celkova delka pole } PosledniPole: byte; { posledni alokovane pole } i: integer; function DejPrvek(index: word; var ok: boolean): real; var pole: integer; prvek: integer; begin if index < Delka then begin prvek := index mod DelkaPole; pole := (index-prvek) div DelkaPole; ok := true; DejPrvek := PoleP[pole]^[prvek]; end else begin ok := false; DejPrvek := 0; end; end; procedure ZmenPrvek(index: word; vysl: real); var pole, prvek, i: integer; begin prvek := index mod DelkaPole; pole := (index-prvek) div DelkaPole; if (index >= Delka) and (pole < MaxPocetPoli) then begin for i := PosledniPole+1 to pole do New(PoleP[i]); PosledniPole := pole; Delka := (pole+1) * DelkaPole; end; PoleP[pole]^[prvek] := vysl; end; procedure VypisPrvek(index: word); var vporadku: boolean; begin write( DejPrvek(index,vporadku) :8:4); if vporadku then writeln(' Soucast pole') else writeln(' Mimo pole'); end; begin New(PoleP[0]); { alokovany je prvni pointer pole } PosledniPole := 0; { zatim mame jedine pole - s indexem 0 } Delka := DelkaPole; { celkova delka = delka jednoho pole } ZmenPrvek(56,2.22); VypisPrvek(56); writeln; writeln(' Pred zmenou prvku 128:'); VypisPrvek(128); ZmenPrvek(128,5.5); writeln; writeln(' Po zmene prvku 128:'); VypisPrvek(128); for i := 0 to PosledniPole do Dispose(PoleP[i]); readln; end.