[ Foro de Pascal ]

pascal, duda, crear menu

18-Mar-2014 16:38
Invitado (wind)
3 Respuestas

Saludos.
Mi pequeño programa permite convertir kilómetros a metros, deseo crear un programa que permita seleccionar opciones, es decir:
opción 1: Para transformar de kilómetros a metros.
opción 2: Para transforma de metros a kilómetros.
(El procedure menu no lo entiendo, por el momento)
¿Qué modificación le harías a mi programa? si es posible explicar.


program Longitud;
uses Crt;
var
M,KM:real;
begin
(*Presentacion del programa*)
TextColor(LightGreen);
writeln('Convertidor de Longitud');
writeln('Programa creado por Benjamin C.');
(*Captura de datos*)
TextColor(White);
write('Ingrese longitud en kilometros:');
readln(KM);
(*Centro de operaciones*)
M:=Km*1000;
writeln('Metros:',M:2:2);
readln;
end.   



18-Mar-2014 21:20
Invitado (Marc)

Me interesara ver la respuesta. El tema de crear menús aún no lo domino. Y mas, en esos programas que tienen varios de ellos. Es decir, que vas navegando por menús. Ya que como todo programa tiene un principio y un fin, no se como volver hacía atrás en el programa. Supongo que sera con funciones y procedimientos.

Saludos!


19-Mar-2014 01:29
Luis Torres (+18)

Efectivamente, cuando utilizas un menú, cada una de las opciones debe ir acompañada de un procedimiento o función, a excepción de la opción de salida. Por "volver a atrás" no te preocupes, porque una vez que se ejecuta la función o el procedimiento o algún menú inserto en uno de esos procedimientos, el programa automáticamente vuelve a atrás al punto en el que fue invocado. A continuación te dejo un esqueleto del código que pudiera tener tu programa, solo que deberás escribir los códigos correspondientes a los procedimientos, en cada uno de ellos necesitas pedir los datos para kilómetro o metro, según sea el caso:


program ConvertirUnidadesDeLongitud;
uses Crt;

var
 Salida: boolean;
 Opc: integer;

procedure ConvertirDeKilometrosAMetros;
Begin
  ClrScr;
  writeln('Aqui deberia ir el codigo para convertir de Kilometros a Metros.');
  readln;
End;

procedure ConvertirDeMetrosAKilometros;
Begin
  ClrScr;
  writeln('Aqui deberia ir el codigo para convertir de Metros a Kilometros.');
  readln;
End;  
 
procedure MostrarMenuPrincipal;
Begin
  gotoxy(33,2); writeln('MENU PRINCIPAL');
  gotoxy(21,5); writeln('1.- Convertir de Kilometros a Metros.');
  gotoxy(21,7); writeln('2.- Convertir de Metros a Kilometros.');
  gotoxy(21,9); writeln('3.- Salir.');
End; 


BEGIN
  Salida:= false;
  Repeat
    ClrScr;
    MostrarMenuPrincipal;
    gotoxy(40,11); write('Opcion: ');
	readln(Opc);
    case Opc of
	  1: ConvertirDeKilometrosAMetros;
	  2: ConvertirDeMetrosAKilometros;
	  3: Salida:= true;
	end;  
  Until (Salida=true);
END.


19-Mar-2014 11:39
Nacho Cabanes (+83)

Efectivamente, la respuesta de Luis es muy buena (como siempre).

Un menú es poco más que mostrar un texto (varios WriteLn), pedir una respuesta (un ReadLn) y analizar dicha respuesta (con "if" o "case").

Si luego lo quieres modularizar, puedes crear un "procedure" que agrupe todos los WriteLn y analizar los datos desde el cuerpo del programa, o puedes optar por crear una "function" que también incluya el "ReadLn" y devuelva el valor que ha introducido el usuario.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)