Programación General > Pascal

 Realizar un Menu

(1/2) > >>

Sh!ky Drákula:
Esta es la estructura que tengo en un programa básico, pero mi problema radica en que no puedo hacer que regrese al inicio después de haber visitado cualquier apartado de mi menú...transcribo la idea:

program examen;
uses crt;
var
   pac:char;
   po,I:integer;
BEGIN
CLRSCR; (*INICIA MARCO*)
    I:=0;
    while I<78 do
    begin
    I:=I+1;
    gotoxy(I,1);writeln(chr(1));
    gotoxy(I,20);writeln(chr(1));
    end;
    I:=0;
    while I<20 do
    begin
    I:=I+1;
    gotoxy(1,I);writeln(chr(1));
    gotoxy(78,I);writeln(chr(1));
    end;   (*FIN DE MARCO*)

     gotoxy(25,2);writeln('  B I E N V E N I  D O  ¯');
     gotoxy(5,4);writeln('¿Qué‚ paquete desea ver?');
     gotoxy(5,6);writeln('PAQUETE 1');
     gotoxy(5,8);writeln('PAQUETE 2');
     gotoxy(5,10);writeln('PAQUETE 3');
     gotoxy(5,12);writeln('PAQUETE 4');
     gotoxy(5,17);writeln('INTRODUZCA EL PAQUETE...');
     gotoxy(5,18);readln(pac);
     delay(1000);
     clrscr;

      CLRSCR; (*INICIA MARCO2*)
     I:=0;
     while I<78 do
     begin
     I:=I+1;
     gotoxy(I,1);writeln(chr(1));
     gotoxy(I,20);writeln(chr(1));
     end;
     I:=0;
     while I<20 do
     begin
     I:=I+1;
     gotoxy(1,I);writeln(chr(1));
     gotoxy(78,I);writeln(chr(1));
     end;   (*FIN DE MARCO2*)

     case (pac) of
     '1':
     begin
     gotoxy(15,4);writeln('PAQUETE 1');
     gotoxy(15,6);writeln('Hamburguesa Chica con queso');
     gotoxy(15,8);writeln('Refresco Chico');
     gotoxy(15,10);writeln('Papas chicas c/s queso');
     gotoxy(25,13);writeln('COSTO TOTAL $35');
     gotoxy(5,15);writeln('1. Ver otro paquete');
     gotoxy(5,16);writeln('2. Ordenar ahora');
     gotoxy(5,17);readln(po);

Aquí es el problema, pues como estoy trabajando de esta manera, no tengo idea de cómo hacerle para que en dado caso la respuesta del incisio 1, si es positiva, me mande de nuevo al inicio...y ahora, respecto a la opción 2, me limpie la pantalla y hayan campos de texto en los cuales podamos avanzar y/o retroceder para insertar o eliminar datos...por ejemplo...en ordenar ahora, (opción 2), en dado caso de que se pidan 2 paquetes del número 4, y 5 del número 1, ¿cómo hacerle para que me haga las respectivas operaciones si son datos diferentes?
     
     end;


-----PROGRAM TRUNQUED-----

Adjunto otra versión del mismo programa, pero con el mismo problema

DriverOp:
No se si te comprendí bién cuál es tu problema así que te diré lo que interpreté que quieres hacer.
Quieres que si estas dentro de una de las opciones del menú principal, al salir de esta te regrese de nuevo al principal. Pero debo decirte que para hacer eso es mejor comenzar a usar procedimientos porque Pascal no tiene GOTO (salto incondicional), la idea sería:

procedure MenuPrincipal;
begin
...
end;

procedure Menu1;
begin
...
end;

procedure Menu2;
begin
...
end;

procedure Menu3;
begin
...
end;

begin
repeat
MenuPrincipal;
case Opcion of
1:Menu1;
2:Menu2;
3:Menu3;
end;
until salir=true;
end.

BlackTigerX:
asi es... bien estructurado y "educado"

lo unico que me inquieto fue eso de que "Pascal no tiene GOTO (salto incondicional)"... no se que version usas, pero Pascal siempre ha tenido GOTO... claro que no se recomienda su uso (excepto en casos muy especiales)

DriverOp:
BlackTigerX:
  Pascal no tiene GOTO en el sentido tradicional, la sentencia Goto de Pascal está condicionada a su vez para salto dentro de un mismo bloque begin... end, además depende de la clausula Label que sirve solo para declarar las etiquetas de salto incondicional. En definitiva, en Pascal no puedes saltar "a donde se te de la gana" para decirlo sin vueltas.

bet@:
yo te aconsejo ke uses una programacion mas estructurada y no utilices el goto, porke eso te acabara liando y no es nada claro. :kicking:
bye

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa