You are on page 1of 8

MANUAL DE USUARIO Y CDIGO DE PILAS

Presentado por: Andres Palacio Yury Lorena Cuesta

Presentado A: Luis Fernando Zapata Alvarez

Compiladores

Corporacin Universitaria Remington Medelln (Antioquia) 2013

MANUAL DE USUARIO
Presionar doble clic sobre el icono

Cuando ingresa al sistema aparecer una ventana como la siguiente Digite Cadena: all debe ingresar la cadena de caracteres que desea que el sistema valide, solo podr registrar datos numricos, signos matemticos y los parntesis abiertos y cerrados.

Cuando el sistema identifique que hay un parntesis abierto automticamente lo apilara y mostrara en la mquina de pila.

Cuando el sistema identifique que hay un parntesis cerrado automticamente lo desapilara y quitara de la mquina de pila.

En caso de que intente registrar un parntesis cerrado y no existan parntesis abiertos para desapilar el sistema mostrara un mensaje diciendo que no hay parntesis abiertos para desapilar y no le permitir registrarlo.

Una vez termine de registrar la cadena debe presionar el botn validar que le informara si la cadena es de aceptacin o rechazo.

Para registrar una nueva cadena debe presionar el botn limpiar y para salir del programa su respectivo botn.

Cdigo del programa con sus respectivo comentarios que explican cada paso.
---------------------//declaracin de pila PPilas = ^Pilas; Pilas = record Siguiente : PPilas; Informacion : String; end; ----------------------------//declaracion de varibales var Form1: TForm1; Pila : PPilas; --------------------------------implementation

{$R *.DFM}

//procedimiento que crea la pila function CrearPila : PPilas; begin Result := nil; end; -----------------------------------------//procedmiento para mostrar pila vacia function PilaVacia(Pila : PPilas) : Boolean; begin

Result := Pila = nil; end; ----------------------------------------//procedmiento para apilar function Apilar(Pila : PPilas; S : String) : PPilas; var PilaTemporal : PPilas; begin new(PilaTemporal); PilaTemporal^.Informacion := S; PilaTemporal^.Siguiente := Pila; Result := PilaTemporal; end; ---------------------------------------//procedmiento para despailar function Desapilar(Pila: PPilas): PPilas; begin if Pila <> nil then begin Result := Pila^.Siguiente; Dispose(Pila); end else Result := nil; end; ------------------------------------//procedmiento para mostrar los datos la pila procedure Visualizacion(Pila: PPilas); var PilaTemporal : PPilas;

begin PilaTemporal := Pila; Form1.ListBox1.Clear; while PilaTemporal <> nil do begin Form1.ListBox1.Items.Add(PilaTemporal^.Informacion); PilaTemporal := PilaTemporal^.Siguiente; end; end; -----------------------------procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin //eleige culaes son los datos que puede registrar el usuario //numero del 0 al 9 // parentesis abierto y cerrado // signos y borrar if not(Key in ['0'..'9','(',')','+','-','*','/']) then begin Key:=#0; end;

if (Key in ['(']) then begin //apilar Pila := Apilar(Pila, '('); // Visualizar el contenido de la pila. Visualizacion(Pila); end

else if (Key in [')']) then begin //si la pila esta vacia muestra mensaje if PilaVacia(Pila) then begin ShowMessage('No ha registrado corchetes abiertos, no hay datos para desapilar'); c := 1; end else //desapilar Pila := Desapilar(Pila); // Visualizar el contenido de la pila. Visualizacion(Pila); end; end; ------------------------------------------//procedmiento para validar si la cadena es de aceptacion o rechazo procedure TForm1.Button1Click(Sender: TObject); begin //si el campo que almacena la cadena esta vacio debe motrar mensaje if Edit1.Text = '' then ShowMessage('Debe registrar informacion') else //pregunta si la pila esta vacia, si es verdad es de aceptacion sino es rechazo if PilaVacia(Pila) then ShowMessage('Aceptacion') else ShowMessage('Rechazo');

end; --------------------------------------------

//procedimiento para limpiar procedure TForm1.Button2Click(Sender: TObject); begin //limpiar campo que almacena cadena Edit1.Text := ''; c := 0; end; -------------------------------------------------------procedure TForm1.Edit1Change(Sender: TObject); var campo : string; begin -------------------------------------------------// si la c es igual a 1 es porque no encontro parentesis cerrado para desapilar y debe borrar el parentesis que acabo de digitar if c=1 then begin c :=0; campo := edit1.text; delete(campo,length(campo),1); edit1.Text := campo; end end; -------------------------------------------//procedmiento para cerrar programa procedure TForm1.Button3Click(Sender: TObject); begin close; end;