{ De la tastatura se citesc mai multe numere naturale.
  Afisati numerele in studiu pe ecran in ordinea inversa citirii. }
Program Tema_2_5_Probl_2;
uses crt;
type AdresaCelula = ^Celula;  {Adresa unei celule}
     Celula = record  {O celula}
       Info: Word;  {Continutul celulei}
       Prec:  AdresaCelula;  {Adresa celulei precedente}
     end;

var S: AdresaCelula;   {Adresa ultimului element din stiva}

procedure Citeste;
var R: AdresaCelula;
begin
  writeln('Scrie un sir de numere naturale (0 va fi ultimul):');
  writeln;
  repeat
    new(R);         {Cream un element nou}
    read(R^.Info);  {Citirea de la tastiera a numarului}
    if(R^.Info = 0) then begin {0 nu se va adauga in stiva}
       dispose(R);   {Distrugem elementul creat}
       Exit;
    end;
    {Introducerea in stiva}
    R^.Prec := S;   {Adresa elementului precedent}
    S := R;         {Actualizare adresei varfului}
  until false;
end;

procedure Scrie;  {Afisarea listei}
var R: AdresaCelula;
begin
  while S <> nil do {Pana nu se ajunge la primul element din stiva}
  begin
    Write(S^.Info, ' '); {Afisarea informatiei din celula}
    R := S;         {Ultimul element din stiva}
    S := R^.Prec;   {Eliminarea elementului din stiva}
    Dispose(R);
  end;
end;

begin
  clrscr;
  S := nil; {Initial stiva este vida}
  writeln;  writeln;
  Citeste;
  clrscr;
  writeln;  writeln;
  Scrie;
  readkey;
end.