PROGRAM p;
TYPE
TElemento = char;
TPila = ^TNodo;
TNodo = RECORD
e: TElemento;
sig: TPila;
END;
TFICHERO = FILE OF TPila;
VAR
pil:TPila;
ele:TElemento;
PROCEDURE CargarDatos(VAR baraja:TPila);
VAR
ficher:TFICHERO;
BEGIN
Assign(ficher,'C:pila.dat');
RESET(ficher);
read(ficher,baraja);
CLOSE(ficher);
END;
{Esto lo que hace es guardar una partida en ficheros binario, lo hace guardando los 10 registros que contienen datos de la partida}
PROCEDURE GuardarDatos(VAR baraja:TPila);
VAR
ficher:TFICHERO;
BEGIN
Assign(ficher,'C:pila.dat');
REWRITE(ficher);
write(ficher,baraja);
CLOSE(ficher);
END;
PROCEDURE CrearPilaVacia(VAR pila: TPila);
BEGIN
pila := NIL;
END;
FUNCTION EsPilaVacia(pila: TPila): boolean;
BEGIN
EsPilaVacia := (pila = NIL);
END;
PROCEDURE Apilar(VAR pila: TPila; e: TElemento);
VAR
aux: TPila;
BEGIN
new(aux);
aux^.e:=e;
aux^.sig:= pila;
pila:=aux;
END;
PROCEDURE Desapilar(VAR pila: TPila);
VAR
aux: TPila;
BEGIN
IF NOT EsPilaVacia(pila) THEN
BEGIN
aux := pila;
pila := pila^.sig;
dispose(aux);
END;
END;
PROCEDURE Cima(pila: TPila; VAR e: TElemento);
{Implementado como procedimiento por generalidad. Una función
podría no ser capaz de devolver TElemento.
Se devuelve la cima sin eliminar el elemento de la pila.}
BEGIN
{Para un tipo simple la asignación simple es válida}
e := pila^.e;
writeln(e);
END;
BEGIN
CrearPilaVacia(pil);
CargarDatos(pil);
cima(pil,ele);
readln;
END.