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
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.
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.
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.
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.
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);
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.
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
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);
El parámetro pregunta será de entrada. Contendrá el texto de la petición a formular al usuario.
El parámetro fin será de salida, el procedimiento lo usará para informar si el usuario pidió acabar o no (no importa si escribió un número o un error, lo único relevante es si escribió f o no).
El parámetro ok será de salida, el procedimiento lo usará para informar si el usuario siguió las instrucciones correctamente (escribió un número o f) o no.
El parámetro valor será de salida. Si el usuario siguió las instrucciones y no escribió f, entonces contendrá el número escrito por el usuario. En otro caso, esta valor será indeterminado e irrelevante.
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);
El parámetro pregunta se usará como en el procedimiento anterior.
El parámetro fin se usará como en el procedimiento anterior.
El parámetro valor será de salida. Si el usuario pidió salir, su contenido será indeterminado e irrelevante. En otro caso, contendrá el número solicitado.
Si prefieres el inglés, usa los identificadores que creas conveniente.
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:
Partiendo de a
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.