Professional Documents
Culture Documents
Compiladores
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;