Yo no puedo enviarte archivos desde mi página de todoexpertos, pero sin embargo, te voy a pegar aquí el código fuente para que lo puedas usar. Te recomiendo que lo copies, lo pegues, y lo leas con tranquilidad. Yo no tengo un archivo hecho por mi explícitamente de pilas ni de archivos, así te he copiado el ejemplo que viene en el tutorial básico de Pascal realizado por Nacho Cabanes: ---------FUENTE-------------- 1 - Implementar una pila de string[20]. {--------------------------} { Ejemplo en Pascal: } { } { Pila dinámica de } { string[20] } { PILA.PAS } { } { Este fuente procede de } { CUPAS, curso de Pascal } { por Nacho Cabanes } { } { Comprobado con: } { - Turbo Pascal 7.0 } {--------------------------} program Pila20; type str20 = string[20]; puntero = ^TipoDatos; TipoDatos = record valor: string[20]; sig: puntero end; { Valor nuevo en la pila } procedure Apilar(var Pila: puntero; nValor: str20); var r: puntero; { Variable auxiliar } begin new(r); { Reserva memoria } r^.valor := nValor; { Guarda el valor } r^.sig := pila; { Encima del anterior } pila := r; { Y pasa a ser la cima } end; { Devuelve el valor que hay en la cima } function Cima(pila:puntero): str20; begin Cima := pila^.valor; end; { Quita la cima de la pila } procedure DesApilar(var pila: puntero); var r: puntero; { Variable auxiliar } begin r := pila^.sig; { Guarda la nueva anterior } dispose(pila); { Libera la memoria que ocupaba } pila := r; { Y actualiza la nueva cima } end; var p: puntero; { Variables globales: la pila } begin p := nil; { Inicializa la pila } Apilar(p, 'Uno'); { Inserta un dato } Apilar(p, 'Dos'); { Inserta otro } Apilar(p, 'Tres'); { Inserta otro } Apilar(p, 'Cuatro'); { y otro más } Writeln(cima(p)); { Muestra la cima } DesApilar(p); { Quita el valor de la cima } DesApilar(p); { y el segundo } Writeln(cima(p)); { Muestra la nueva cima } DesApilar(p); { Quita otro más } Writeln(cima(p)); { Muestra la nueva cima } DesApilar(p); { Y vacía la pila } end. 2 - Implementar una cola de enteros. {--------------------------} { Ejemplo en Pascal: } { } { Cola dinámica de } { números enteros } { COLA.PAS } { } { Este fuente procede de } { CUPAS, curso de Pascal } { por Nacho Cabanes } { } { Comprobado con: } { - Turbo Pascal 7.0 } {--------------------------} program ColaInt; type puntero = ^TipoDatos; TipoDatos = record valor: integer; sig: puntero end; { Valor nuevo en la pila } procedure Encolar(var Cola: puntero; nValor: integer); var r,s: puntero; { Variables auxiliares } begin new(r); { Reserva memoria } r^.valor := nValor; { Guarda el valor } r^.sig := nil; { Que será el último } if cola = nil then { Si no había cola } cola := r { Será el primero } else { Si ya había alguien } begin s := cola; { Miro hacia atrás } if s^.sig<>nil then { hasta llegar al final } repeat s := s^.sig; until s^.sig = nil; s^.sig := r; { Y ahí lo dejo } end; end; { Devuelve el valor que hay en la cima } function Cabeza(cola:puntero): integer; begin Cabeza := cola^.valor; end; { Quita la cima de la pila } procedure DesEncolar(var cola: puntero); var r: puntero; { Variable auxiliar } begin r := cola^.sig; { Guarda el segundo elemento } dispose(cola); { Libera la memoria que ocupaba } cola := r; { Y actualiza la nueva cabeza } end; var c: puntero; { Variables globales: la cola } begin c := nil; { Inicializa la cola } Encolar(c, 1); { Inserta un dato } Encolar(c, 2); { Inserta otro } Encolar(c, 3); { Inserta otro } Encolar(c, 4); { y otro más } Writeln(cabeza(c)); { Muestra la cabeza } DesEncolar(c); { Quita el valor de la cabeza } DesEncolar(c); { y el segundo } Writeln(cabeza(c)); { Muestra la nueva cabeza } DesEncolar(c); { Quita otro más } Writeln(cabeza(c)); { Muestra la nueva cabeza } DesEncolar(c); { Y vacía la cola } end. ------------FINAL----------