Delphi & Pascal (česká wiki)
{ gfront.pas Copyright (c) TrSek alias Zdeno Sekerak } { Implemantacia FRONT } { - dynamicke pole } { } { Datum:17.04.2007 http://www.trsek.com } unit GFront; interface CONST MaxPocet = 500 ; TYPE TRozPocet = 0..MaxPocet; TIndex = 1..MaxPocet; TPrvok = record autor: string[20]; { meno autora } pocet: integer; { pocet kniziek } end; TPrvky = array[TIndex] of TPrvok; TUdaje = record Zac,Kon,Dlzka : TRozPocet; Prvky : TPrvky; end; PUdaje = ^TUdaje; TFront = PUdaje; cAutori = object Front : TFront; constructor Init; destructor Done; virtual; function Mohutnost: integer; { zisti pocet zaznamov } function JePrazdna: boolean; { urci ci je zoznam prazdny } { zobrazovace } procedure UkazPolozku; procedure MainMenu; { pridavace, mazace } procedure Pridaj (autor: string); { prida novy prvok } procedure PridajNaKon (autor: string); { prida novy prvok } procedure OdoberZoZac (var Prvok: TPrvok); { vyberie prvok } End; implementation uses crt; { inicializacia } constructor cAutori.Init; begin New(Front); { chyba nieje dost pamete } if( Front = nil )then begin writeln('Problem pri alokacii pamete'); halt(1); end; with Front^ do begin Zac:=1; Kon:=0; Dlzka:=0; end; end; { zrusime alokovanu pamat } destructor cAutori.Done; begin Dispose( Front ); end; { zisti pocet zaznamov } function cAutori.Mohutnost: integer; begin Mohutnost := Front^.Dlzka; end; { urci ci je zoznam prazdny } function cAutori.JePrazdna: boolean; begin if( Front^.Dlzka = 0 )then JePrazdna := true else JePrazdna := false; end; { prida do zasobnika dalsi prvok } procedure cAutori.Pridaj (autor: string); var i: integer; begin i:=Front^.Zac; { najpr pohlada ci uz tam nahodou nieje } while(( i < Front^.Dlzka ) and ( autor <> Front^.Prvky[i].autor )) do inc(i); { nasiel sa } if( autor = Front^.Prvky[i].autor )then begin inc(Front^.Prvky[i].pocet); exit; end; { je to novy autor } PridajNaKon(autor); end; { prida do zasobnika dalsi prvok } procedure cAutori.PridajNaKon (autor: string); begin with Front^ do begin { este nieje plny - mozem } if( Dlzka < MaxPocet )then begin Inc(Kon); Inc(Dlzka); Prvky[Kon].autor := autor; Prvky[Kon].pocet := 1; end; end; end; { vyberie zo zasobnika prvok } procedure cAutori.OdoberZoZac (var Prvok: TPrvok); var i:integer; begin { este tam nieco je } if( not( JePrazdna ))then begin with Front^ do begin Prvok := Prvky[Zac]; Dec(Dlzka); Inc(Zac); end; end; end; { zobrazi hlavne menu } procedure cAutori.MainMenu; begin clrscr; writeln(' Zoznam autorov'); writeln(' --------------'); writeln; writeln('Pocet diel | Autor'); writeln('--------------------------------'); end; { zobrazi polozku } procedure cAutori.UkazPolozku; var Prvok: TPrvok; begin { zvyraznovat text alebo nie } OdoberZoZac( Prvok ); writeln( ' ', Prvok.pocet:2, ' | ', Prvok.autor ); end; begin end.