Bucles
Fundamentos de la programación y la informática
Grados en ingeniería aeroespacial, turno de tarde, 2023-2024
Escuela de Ingeniería de Fuenlabrada
Universidad Rey Juan Carlos


Práctica 7.1. Bucle while 1

Escribe un programa en un fichero llamado ~/fpi/practica07/mientras01.pas que, usando la sentencia while, vaya generando números reales aleatorios entre 0 (incluido) y 1 (excluido), y mostrándolos en pantalla. Este proceso se repetirá mientras el número obtenido sea estrictamente menor que una constante (local) llamada Objetivo. Dale por ejemplo el valor 0.9. (En otras palabras: se dentendrá cuando el númer obtenido sea mayor o igual que esta constante). Al finalizar, el programa indicará el número de números que ha sido necesario generar hasta conseguir un valor mayor o igual que la constante.

Práctica 7.2. Bucle while 2

Escribe un programa en un fichero llamado ~/fpi/practica07/mientras02.pas que, usando while, vaya lanzando dados y sumando el total de puntos acumulados. El programa seguirá lanzando y sumando mientras la suma de puntos sea inferior a la constante Objetivo. El número de caras del dado será la constante CarasDado. Ambas constante serán locales al cuerpo del programa principal, dales el valor que prefieras.

Observa que si los puntos acumulados están por debajo del objetivo, pero cerca, tendrás que lanzar un último dado. Que puede provocar que te pases y excedas el objetivo. Es normal, es lo que pide el enunciado. Piensa en el juego de las siete y media.

Práctica 7.3. Lectura de teclado

Preámbulo

En la práctica 5 escribiste programas que pedían información al usuario. Si este no seguía las instrucciones correctamente, los programas mostraban un error y finalizaban. Ahora que conoces los bucles, puedes mejorarlo: si el usuario no sigue las instrucciones, el programa repetirá la petición de información, todas las veces que haga falta.

Descripción del funcionamiento

Copia tu práctica ~/fpi/practica05/filtrado02.pas en un fichero con nombre ~/fpi/practica07/filtrado03.pas. Modifícalo de forma que haga lo mismo que filtrado02.pas, con la diferencia de que si el usuario se equivoca no se limite a mostras un mensaje de error, sino que le siga preguntando, hasta que conteste correctamente.

Instrucciones adicionales

El programa tendrá un procedimiento llamado lee_real con un parámetro de entrada pregunta y un parámetro de salida llamado valor. Si prefieres el inglés, los nombres serán read_real, question y value, respectivamente. Este procedimento llamará a intenta_leer_real, las veces necesarias hasta que el usuario escriba un valor correcto. Observa que la pregunta que el programador incluya en el procedimiento lee_real será la misma que el programa pasará a intenta_leer_real.

Por tanto, lo usarás de manera simila a esta:

lee_real("Introduce la masa", masa);
lee_real("Introduce la aceleración", aceleracion);

Práctica 7.4. Lecturas de teclado, con posiblidad de finalizar

Preámbulo

En ejercicios anteriores, escribías un subprograma con una estructura muy típica: intentaba hacer cierta tarea y devolvía un booleano indicando si había tenido éxito (el usuario había escrito un número) o si había fracasado (el usuario había escrito un carácter no numérico). Además, en caso de éxito, devolvía el número pedido.

Aquí escribirás un subprograma muy similar, solo cambia el concepto éxito: si el usuario solicita acabar (pulsando q), también estará siguiendo las instrucciones y por tanto todo ha sido correcto. En otras palabras: si el usuario escribe o bien un número o bien una q, el booleano valdrá True (todo ha ido bien). En otro caso, False. Adicionalmente, el programa usará un segundo booleano para informar si el usuario pidió acabar o no.

Descripción del funcionamiento

Escribe un programa en el fichero ~/fpi/practica07/filtrado04.pas que muestre los mensajes Escribe el primer número real (o "f" para finalizar), Escribe el segundo número real (o "f" para finalizar). El programa hará lo esperado: pedirá un número real o f, las veces necesarias hasta que el usuario siga las instrucciones. Si el usuario no pidió acabar, pedirá el segundo número real (o f), hasta que el usuario siga las instrucciones. Si el usuario tampoco pidió acabar en la segunda pregunta, el programa multiplicará ambos números y mostrará el resultado en pantalla. Si en algún momento el usuario escribió f, el programa ya no hará nada más. Aquí tienes un ejemplo de uso:

koji@mazinger:~/fpi/practica07$ ./filtrado04 
Escribe el primer número real (o "f" para finalizar)
12.4
Escribe el segundo número real (o "f" para finalizar)
xx
Escribe el segundo número real (o "f" para finalizar)
yy
Escribe el segundo número real (o "f" para finalizar)
14
Producto:173.60
koji@mazinger:~/fpi/practica07$ ./filtrado04 
Escribe el primer número real (o "f" para finalizar)
4
Escribe el segundo número real (o "f" para finalizar)
f
koji@mazinger:~/fpi/practica07$ ./filtrado04 
Escribe el primer número real (o "f" para finalizar)
f

Instrucciones adicionales

  1. El programa deberá tener un procedimiento intenta_leer_real_o_fin. Será una modificación del procedimiento intenta_leer_real de tu praćtica anterior. Lo usarás así:

    intenta_leer_real_o_fin(pregunta, valor, ok, fin);
  2. El programa deberá tener un procedimiento llamado lee_real_o_fin, basado en el procedimiento lee_real de la práctica anterior. Llamará a intenta_leer_real_o_fin las veces necesarias hasta que el usuario siga las instrucciones. Lo usarás de la siguiente manera:

    lee_real_o_fin(pregunta, valor, fin); 
  3. Si prefieres el inglés, usa los identificadores que creas conveniente.

Práctica 7.5. Números aleatorios dentro de intervalo

Escribe un programa en un fichero llamado ~/fpi/practica07/intervalo_reales.pas que genere números reales aleatorios dentro del intervalo (a, b) (intervalo cerrado por la izquierda y abierto por la derecha).

Sobra decir que tienes que escribir una función que genere el número, que el cuerpo del programa principal llamará a la función las veces necesarias y mostrará el resultado.

Observa que puedes conseguir esto:

  1. Partiendo de a

  2. Sumándole un valor aleatorio que será, como mínimo, 0, y como máximo, la diferencia entre a y b. En otras palabras, random() * (b − a)

Ejemplo: a = 10, b = 15. Necesitamos números aleatorios entre 0 y (15 − 10 = 5), que sumaremos a 10. Esto es, multiplicar 5 por un número aletorio entre 0 y 1.

Observa que si alguno de los dos extremos es negativo, esto sigue funcionando.

El programa generará un total de NumeroIteraciones números (constante local) y estará basado en for. Dale a NumeroIteraciones el valor que quieras. Por ejemplo 10.