Nadesłany przez Michał Knasiecki, 29 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Stos/Unit1.pas:
//Plik sciagniety ze strony www.algorytm.org //Program napisal: Michal Knasiecki unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; // Nasz stos będzie się skladal z: TYPE wskaznik_stosu=^skladnik_stosu; skladnik_stosu=record Nazwisko:string; wskaznik:wskaznik_stosu; end; var Form1: TForm1; Licznik:integer=0; //Licznik elementów na stosie wskaznik:wskaznik_stosu; implementation //Zdefiniujemy sobie dwie procedury: //Poniższa procedura dodaje na stos nazwisko procedure nastos(element:string; var wierzcholek:wskaznik_stosu); var punkt:wskaznik_stosu; begin punkt:=wierzcholek; New(wierzcholek); with wierzcholek^ do begin nazwisko:=element; wskaznik:=punkt end; end; //Poniższa procedura usuwa ze stosu nazwisko procedure zestosu(var element:String; var wierzcholek:wskaznik_stosu); var punkt:wskaznik_stosu; begin if wierzcholek<>nil then begin with wierzcholek^ do begin element:=nazwisko; punkt:=wskaznik; end; Dispose(wierzcholek); wierzcholek:=punkt; end; end; {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin //jeżeli stos jest pusty to if licznik=0 then wskaznik:=nil; //Dalej zwiększ licznik o 1 inc(licznik); //i dodaj do niego nazwisko z pola edit1: nastos(edit1.text,wskaznik); end; procedure TForm1.Button2Click(Sender: TObject); var naz:string; begin //jeżeli stos nie jest pusty if wskaznik<>nil then begin //zmniejsz licznik dec(licznik); //zdejmij ze stosu zestosu(naz,wskaznik); //i wypisz edit2.text:=naz; end //jesli stos jest pusty pokaz komunikat else showmessage('Stos jest pusty'); end; end.