Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
{ 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.