Autor Tema: Ejemplo bucle while en Pascal, programa que no termine hasta cumplirse condición  (Leído 9145 veces)

zadok

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola otra vez, como no cuanto más quiere hacer uno más dudas y más problemas surgen, el caso es que cuando ejecuto el programa, al final se acaba cerrando.

¿Cómo hago para que se reinicie?

Ejemplo

Código: [Seleccionar]
writeln;
   writeln;
   writeln('Pulsa ENTER para salir');
   readln
end.

Como hago para que llegados a ese punto, el programa de la opción de salir o reiniciarlo, he probado con:

Código: [Seleccionar]
program portas;

USES Crt;

var
numporta: string;
dec: char;

Procedure inicio ;
begin

.....
.....
     writeln;
     writeln;
     writeln ('Continuar? (S/N)') ;
     readln (dec);
     if (dec = ('S'))
     then begin inicio;
     else
end.
« Última modificación: 04 de Marzo 2015, 08:23 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Reiniciar el programa
« Respuesta #1 en: 03 de Marzo 2015, 23:28 »
Hola usa un bucle while para controlar cuándo el usario ha respondido que quiere continuar.

Ejemplo

Código: [Seleccionar]
PROGRAM CUADRADOS;
VAR
n, c : INTEGER;
BEGIN
WRITELN('Introduzca un numero entero: ');
READLN(n);
WHILE (n<>0) DO
BEGIN
c := n * n;
WRITELN('El cuadrado de ', n, ' es ', c);
WRITELN('Introduzca un n umero entero: ');
READLN(n);
END;
WRITELN('PULSA ENTER PARA FINALIZAR');
READLN;
END.

Saludos
« Última modificación: 09 de Marzo 2015, 11:10 por Alex Rodríguez »

zadok

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
No consigo hacerlo y lo he intentado de muchas maneras, como me dijiste y de otras muchas que vi por internet, en algo fallo... pongo el ejemplo de mi programa que será más práctico que hacer suposiciones jeje

Código: [Seleccionar]
program portas;
USES Crt;

var
numporta: string;

begin
writeln ('Escribe el numero del porta, matricula o nombre del conductor (mayuscula)...');
writeln ('');
readln(numporta);


//Portavehiculos 001
if (numporta = ('001')) or (numporta = ('0000XXX')) or (numporta = ('NOMBRE1'))
   then
   begin
        writeln('NOMBRE1');
        writeln('Portavehiculos 001');
        writeln('Matricula: 0000-XXX');
        writeln('EXT:00001');
        writeln('Movil: 666666666');
        writeln ('=============================');
   end

//Portavehiculos 002
else if (numporta = ('002')) or (numporta = ('0000ZZZ')) or (numporta = ('NOMBRE2'))
   then
   begin
        writeln('NOMBRE2');
        writeln('Portavehiculos 002');
        writeln('Matricula: 0000-ZZZ');
        writeln('EXT:00002');
        writeln('Movil: 666666667');
        writeln ('=============================');
   end


//Portavehiculos 003
else if (numporta = ('003')) or (numporta = ('0000VVV')) or (numporta = ('NOMBRE3'))
   then
   begin
        writeln('NOMBRE3');
        writeln('Portavehiculos 003');
        writeln('Matricula: 0000-VVV');
        writeln('EXT:00003');
        writeln('Movil: 666666668');
        writeln ('=============================');
   end

writeln;
   writeln;
   writeln('Pulsa ENTER para salir');
   readln
end.


En ese caso, como hago que al llegar al final, si deseamos volver a realizar una búsqueda, reinicie todo?


Gracias!

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Hola la idea es introducir un bucle while. Si no te sale prueba a hacer pequeños programas probando el while antes del programa en sí:

Código: [Seleccionar]
program portas;
USES Crt;

var
numporta: string;
quiereReptir: string;

begin
quiereRepetir:='s';
WHILE (quiereRepetir=('s')) DO
writeln ('Escribe el numero del porta, matricula o nombre del conductor (mayuscula)...');
writeln ('');
readln(numporta);


//Portavehiculos 001
if (numporta = ('001')) or (numporta = ('0000XXX')) or (numporta = ('NOMBRE1'))
   then
   begin
        writeln('NOMBRE1');
        writeln('Portavehiculos 001');
        writeln('Matricula: 0000-XXX');
        writeln('EXT:00001');
        writeln('Movil: 666666666');
        writeln ('=============================');
   end

//Portavehiculos 002
else if (numporta = ('002')) or (numporta = ('0000ZZZ')) or (numporta = ('NOMBRE2'))
   then
   begin
        writeln('NOMBRE2');
        writeln('Portavehiculos 002');
        writeln('Matricula: 0000-ZZZ');
        writeln('EXT:00002');
        writeln('Movil: 666666667');
        writeln ('=============================');
   end


//Portavehiculos 003
else if (numporta = ('003')) or (numporta = ('0000VVV')) or (numporta = ('NOMBRE3'))
   then
   begin
        writeln('NOMBRE3');
        writeln('Portavehiculos 003');
        writeln('Matricula: 0000-VVV');
        writeln('EXT:00003');
        writeln('Movil: 666666668');
        writeln ('=============================');
   end

writeln;
writeln ('¿Quiere repetir (s/n)');
writeln ('');
readln(quiereRepetir);
END;
end.

zadok

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Llego al mismo punto que otras veces, al introducir el buble while..do me repite la siguiente linea infinidad de veces, pero no ejecuta el resto del código...


Edit: Solucionado, muchas gracias por tu ayuda, al final resultó que me faltaba un begin...
« Última modificación: 10 de Marzo 2015, 09:34 por zadok »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
¡Pega el código con la solución! ¡Puede ayudar a otras personas! Saludos

zadok

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Aquí va:

Código: [Seleccionar]
program portas;
USES Crt;

var
rbusqueda: char;
numporta: string;

begin

rbusqueda := 'S';

WHILE (rbusqueda = ('S')) DO

begin

writeln ('Escribe el numero del porta, matricula o nombre del conductor (mayuscula)...');
writeln ('');
readln(numporta);


//Portavehiculos 001
if (numporta = ('001')) or (numporta = ('0000XXX')) or (numporta = ('NOMBRE1'))
   then
   begin
        writeln('NOMBRE1');
        writeln('Portavehiculos 001');
        writeln('Matricula: 0000-XXX');
        writeln('EXT:00001');
        writeln('Movil: 666666666');
        writeln ('=============================');
   end

//Portavehiculos 002
else if (numporta = ('002')) or (numporta = ('0000ZZZ')) or (numporta = ('NOMBRE2'))
   then
   begin
        writeln('NOMBRE2');
        writeln('Portavehiculos 002');
        writeln('Matricula: 0000-ZZZ');
        writeln('EXT:00002');
        writeln('Movil: 666666667');
        writeln ('=============================');
   end


//Portavehiculos 003
else if (numporta = ('003')) or (numporta = ('0000VVV')) or (numporta = ('NOMBRE3'))
   then
   begin
        writeln('NOMBRE3');
        writeln('Portavehiculos 003');
        writeln('Matricula: 0000-VVV');
        writeln('EXT:00003');
        writeln('Movil: 666666668');
        writeln ('=============================');
   end

else writeln('No es un numero de porta valido');

     writeln;
     writeln ('¿Quiere realizar otra busqueda? (S/N)');
     writeln ('');
     readln(rbusqueda);
     end;



end.




Justo despues de while...do, va un begin, sino lo que hace es repetir la siguiente linea infinidad de veces ;)
« Última modificación: 10 de Marzo 2015, 10:46 por zadok »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Gracias!

zadok

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
A tí por la ayuda  ;)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".