PROGRAM Pila_vettore; uses wincrt; const MAXLUNG=50; type tipoelem=integer; pila=record testa: 0..MAXLUNG; elementi: array[1..MAXLUNG] of tipoelem end; procedure creapila(var p:pila); begin p.testa:=0; end; function pilavuota(var p:pila): boolean; begin pilavuota:=(p.testa=0); end; procedure leggipila(var p:pila; var a:tipoelem); begin if not pilavuota(p) then a:=p.elementi[p.testa] else writeln('Leggipila a pila vuota!!'); end; procedure inpila(a:tipoelem; var p:pila); begin if p.testa=MAXLUNG then writeln('Vettore pieno!!') else begin p.testa:=p.testa+1; p.elementi[p.testa]:=a; end; end; procedure fuoripila(var p:pila); begin if not pilavuota(p) then p.testa:=p.testa-1 else writeln('Fuoripila a pila vuota!!'); end; procedure visualpila(var p:pila); var i: integer; begin if not pilavuota(p) then begin for i:=p.testa downto 1 do writeln('|',p.elementi[i]:5,'|'); writeln('|=====|'); end else writeln('La pila è vuota'); end; VAR miapila: pila; elemento: tipoelem; scelta: char; BEGIN creapila(miapila); writeln('Inserisci gli elementi della pila (-1 per terminare):'); repeat readln(elemento); if (elemento<>-1) then inpila(elemento, miapila); until (elemento=-1); writeln('PILA INIZIALE:'); visualpila(miapila); {Operazioni sulla pila} repeat writeln; writeln('I- Push di un elemento'); writeln('O- Pop di un elemento'); writeln('X- Fine programma'); write('Scelta: '); readln(scelta); if (scelta='i') or (scelta='I') then begin write('Inserisci l''elemento da immettere nella pila: '); readln(elemento); inpila(elemento, miapila) end; if (scelta='o') or (scelta='O') then begin leggipila(miapila,elemento); writeln('Elemento estratto dalla pila: ',elemento); fuoripila(miapila) end; writeln; writeln('PILA CORRENTE:'); visualpila(miapila); until ((scelta='x') or (scelta='X')); writeln; writeln('PILA AL TERMINE DEL PROGRAMMA:'); visualpila(miapila); END.