Diferencia entre revisiones de «PrInf11: Bucles while»
(→Ejercicio post-práctica) |
(→Ejercicio post-práctica) |
||
| Línea 47: | Línea 47: | ||
== Ejercicio post-práctica == | == Ejercicio post-práctica == | ||
| − | En el código anterior, hemos fijado la probabilidad de acertar en el <math>5\%</math>. Modifica el programa para que pida al usuario la probabilidad de acertar en el centro de la diana. Ejecuta el programa 5 veces para uno de los siguientes valores, y dibuja un gráfico que tenga en el eje horizontal la probabilidad de acierto, y en el vertical el número medio de tiradas que ha hecho el programa (entre las 5 veces que se ejecuta). Usa el comando ''mean'' para calcular la media de una lista de números. Los valores son: | + | En el código anterior, hemos fijado la probabilidad de acertar en el <math>5\%</math>. Modifica el programa para que pida al usuario la probabilidad de acertar en el centro de la diana. De este modo, el programa ya estará estructurado en tres partes: entrada de datos, salida de datos y algoritmo. |
| + | |||
| + | Ejecuta el programa 5 veces para uno de los siguientes valores, y dibuja un gráfico que tenga en el eje horizontal la probabilidad de acierto, y en el vertical el número medio de tiradas que ha hecho el programa (entre las 5 veces que se ejecuta). Usa el comando ''mean'' para calcular la media de una lista de números. Los valores son: | ||
* <math>5\%</math> | * <math>5\%</math> | ||
* <math>20\%</math> | * <math>20\%</math> | ||
* <math>40\%</math> | * <math>40\%</math> | ||
* <math>50\%</math> | * <math>50\%</math> | ||
| + | No es necesario que recojas los resultados del número de tiradas con otro programa, puedes recoger los datos a mano y realizar los cálculos en la línea de comandos para generar la gráfica. | ||
[[Categoría:Prácticas de Informática]] | [[Categoría:Prácticas de Informática]] | ||
Revisión del 19:10 29 jul 2013
| Práctica de Informática | |
|---|---|
| Bucles con while | |
| Práctica anterior | Siguiente práctica |
| Este artículo es un guión de prácticas de Informática | |
| |
Existe otro tipo de bucles que nos permiten repetir un conjunto de comandos si no sabemos cuántas veces se tiene que repetir. Lo que necesitamos saber es qué condición tiene que cumplirse para que se repitan los comandos. Son los denominados bucles while. En esta práctica vamos a introducir los bucles while con un ejemplo de lanzamiento de dardos. Supongamos que la probabilidad de acertar en el centro de una diana es el [math]5\%[/math], ¿cuántas veces tendremos que tirar el dardo para acertar en el centro? En principio, es imposible saber el número de tiradas necesario, unas veces será mayor, otras menor. Pero sí sabemos la condición que tiene que cumplirse: mientras no acertemos en el centro de la diana, seguiremos tirando el dardo.
Contenido
1 Requisitos previos
Es importante entender el concepto de bucle y haber realizado la práctica anterior.
También es importante haber visto el siguiente vídeo antes de realizar esta práctica:
- Prog17: Bucles while, para ver cómo funcionan los bucles while
- Prog15: Ejemplo -- Segundo programa (3/3), que muestra cómo usar una variable bandera, una técnica de programación que vamos a aplicar en esta práctica
2 Comandos que se aprenderán en esta práctica
| while | true | false | mean |
3 Contenido de la práctica
Lanzar un dardo y acertar en el centro de la diana es una tarea difícil. Supongamos que la posibilidad de acertar en el centro de la diana es del [math]5\%[/math]. ¿Cuántas veces tendremos que lanzar el dardo para acertar en el centro? Para responder a esta pregunta necesitaremos repetir la tirada del dardo tantas veces como sea necesario. Es imposible saber cuántas veces hasta que no hayamos acertado en el centro de la diana. Por tanto, es la situación ideal para resolver usando un bucle while.
La primera cuestión a resolver es cómo programar la tirada de un dardo. Dado que tirar un dardo es un fenómeno aleatorio, podemos intentar usar el comando rand para simular un dardo. El comando rand devuelve números uniformemente distribuidos entre 0 y 1. Por tanto, aproximadamente el 5% de las veces nos devolverá un número inferior a 0.05. Por tanto, el código que detecta si el dardo ha acertado en el centro de la diana podría ser el siguiente:
if rand() < 0.05
% El dardo ha acertado en el centro de la diana
else
% El dardo no ha acertado en el centro de la diana
endEl programa tendrá que hacer dos tareas principales:
- Llevar una cuenta de cuántas tiradas se ha realizado, y actualizar esta cuenta cada vez que se realice una tirada.
- Repetir la tirada del dardo tantas veces como sea necesario (hasta que el jugador acierte con el dardo en el centro de la diana).
Para llevar la cuenta usaremos una variable de nombre tiradas, que valdrá inicialmente 0, y cuyo valor se incremente con cada tirada.
Para repetir la tirada, tendremos que usar un bucle while. Necesitaremos otra variable que nos indique si el jugador ha acertado en la diana o no. Esta variable solo podrá tener dos valores: verdadero o falso. Es decir, será de tipo lógico. En el vídeo 15 se usa una variable lógica para un propósito parecido al de esta práctica (en nuestro caso, una variable bandera para detectar si el jugador ha acertado en el centro de la diana.
| |
Tarea: | ¿Cuál es la condición que tiene que cumplir el bucle while? Si no lo tienes muy claro, echa un vistazo al vídeo Prog17: Bucles while y al vídeo Prog15: Ejemplo -- Segundo programa (3/3) |
Escribe un esqueleto del bucle, que contenga la condición que acabas de obtener. Ten en cuenta que el código mostrado arriba tendrá que estar dentro del cuerpo del bucle. Ya casi tenemos el bucle terminado.
Tras detectar la condición que tiene que el bucle, tendremos que decidir el valor inicial de la bandera. La bandera solo tiene dos valores: verdadero o falso. Uno de los valores hace que el bucle siga repitiéndose, mientras que el otro hace que no se repita más. El valor inicial de la bandera tiene que hacer que el bucle se ejecute al menos una vez.
| |
Tarea: | ¿Cuál será el valor inicial de la variable bandera? Escribe el código que inicialice la variable antes de comenzar el bucle |
Cuando ya tengas el código que inicialice la variable bandera, solo queda completar el código que cuente las tiradas, y que actualice la variable bandera cuando sea necesario. Ten en cuenta que este programa es algo especial, ya que no tenemos entrada de datos. Sí que tenemos un algoritmo (el bucle y la detección de acierto en el centro), y una salida de datos, que debe informar del número de tiradas que ha sido necesario para acertar en el centro.
| |
Tarea: | Finaliza el programa escribiendo las partes que faltan dentro del cuerpo del bucle, y la sección de salida de datos |
4 Ejercicio post-práctica
En el código anterior, hemos fijado la probabilidad de acertar en el [math]5\%[/math]. Modifica el programa para que pida al usuario la probabilidad de acertar en el centro de la diana. De este modo, el programa ya estará estructurado en tres partes: entrada de datos, salida de datos y algoritmo.
Ejecuta el programa 5 veces para uno de los siguientes valores, y dibuja un gráfico que tenga en el eje horizontal la probabilidad de acierto, y en el vertical el número medio de tiradas que ha hecho el programa (entre las 5 veces que se ejecuta). Usa el comando mean para calcular la media de una lista de números. Los valores son:
- [math]5\%[/math]
- [math]20\%[/math]
- [math]40\%[/math]
- [math]50\%[/math]
No es necesario que recojas los resultados del número de tiradas con otro programa, puedes recoger los datos a mano y realizar los cálculos en la línea de comandos para generar la gráfica.