Diferencia entre revisiones de «PrInf14: Interrumpir bucles while»
(→Contenido de la práctica) |
(→Contenido de la práctica) |
||
| Línea 68: | Línea 68: | ||
fprintf('Tiradas: %d C: %d +: %d\n', tiradas, nCaras, nCruces);}} | fprintf('Tiradas: %d C: %d +: %d\n', tiradas, nCaras, nCruces);}} | ||
{{ Tarea | Ejecuta el programa anterior varias veces. ¿Hay algún problema con el programa? ¿Qué debería ocurrir si salen tres cruces? ¿Por qué salen tres caras siempre? ¿Qué hemos hecho mal en el programa? }} | {{ Tarea | Ejecuta el programa anterior varias veces. ¿Hay algún problema con el programa? ¿Qué debería ocurrir si salen tres cruces? ¿Por qué salen tres caras siempre? ¿Qué hemos hecho mal en el programa? }} | ||
| − | El programa está obviamente incompleto. En la condición del bucle hemos supuesto que el jugador va a ganar siempre, y le hemos pedido que se siga ejecutando hasta que gane, ignorando el número de cruces que se obtienen. Ahora vamos añadir un trozo de código que use ''break'', que en caso de que se obtengan tres cruces, termine el bucle porque ha perdido la partida. | + | El programa está obviamente incompleto. En la condición del bucle hemos supuesto que el jugador va a ganar siempre, y le hemos pedido que se siga ejecutando hasta que gane, ignorando el número de cruces que se obtienen. Ahora vamos añadir un trozo de código que use ''break'', que en caso de que se obtengan tres cruces, termine el bucle porque ha perdido la partida. Mira las líneas 18 a 21, que no estaban en el programa anterior: |
{{ matlab | codigo= | {{ matlab | codigo= | ||
tiradas = 0; | tiradas = 0; | ||
Revisión del 17:48 2 ago 2013
| Práctica de Informática | |
|---|---|
| Cómo interrumpir bucles while | |
| Práctica anterior | Siguiente práctica |
| Este artículo es un guión de prácticas de Informática | |
| |
En un bucle while, no sabemos a priori cuántas veces se va ejecutar el bucle. Pero sí podemos saber la condición que tiene que cumplirse para que se siga ejecutando el bucle. Si esta condición es muy compleja, puede ser recomendable simplificarla y añadir algún break o continue al cuerpo del bucle. De nuevo, el uso de break y continue debería ser minoritario, ya que muchas veces hacen el código más difícil de entender y modificar, y más propenso a contener fallos. En esta práctica vamos a ver una condición compleja, y cómo añadiendo un break hacemos el programa más sencillo.
Contenido
1 Requisitos previos
Es importante haber realizado las siguientes prácticas antes de realizar esta práctica:
Para la segunda parte de la práctica, también puede ser necesario repasar la práctica sobre expresiones lógicas:
2 Vídeos posteriores
Tras realizar esta práctica, el siguiente vídeo te ayudará a afianzar conocimientos:
3 Contenido de la práctica
En esta práctica vamos a realizar una simulación de un juego con una moneda. El juego consiste en tirar una moneda varias veces. Si el jugador saca tres caras, gana un premio en euros igual al número de tiradas que se hayan realizado. Si saca tres cruces, pierde la cantidad en euros igual al número de tiradas realizado. Nuestro programa tiene que tirar la moneda las veces que sean necesarias para sacar tres caras o tres cruces, y luego mostrar el número de tiradas que han sido necesarias.
Para simular el lanzamiento de una moneda usaremos la función rand, que devuelve un número aleatorio entre 0 y 1. Si el número es menor que 0.5, entenderemos que ha salido cara, y si no lo es, que ha salido cruz.
El primer paso consiste en crear tres variables para llevar la cuenta del número de tiradas, caras y cruces:
tiradas = 0;
nCaras = 0;
nCruces = 0;Una vez creadas estas variables, tenemos que repetir la tirada tantas veces como sea necesario. Como no podemos saber el número de tiradas que hará falta, tenemos que usar un bucle while para repetir los comandos.
| |
Tarea: | ¿Cuál es la condición que tiene que cumplir el bucle while para seguir realizando tiradas? |
while nCaras < 3
% Cuerpo del bucle
endwhile nCaras < 3
if rand() < 0.5
% Sale cara
nCaras = nCaras + 1;
else
% Sale cruz
nCruces = nCruces + 1;
end
% Salga cara o cruz, hemos hecho una tirada
tiradas = tiradas + 1;
endPor último, escribiremos la salida del programa, informando del número de tiradas, caras y cruces:
fprintf('Tiradas: %d C: %d +: %d\n', tiradas, nCaras, nCruces);tiradas = 0;
nCaras = 0;
nCruces = 0;
while nCaras < 3
if rand() < 0.5
% Sale cara
nCaras = nCaras + 1;
else
% Sale cruz
nCruces = nCruces + 1;
end
% Salga cara o cruz, hemos hecho una tirada
tiradas = tiradas + 1;
end
fprintf('Tiradas: %d C: %d +: %d\n', tiradas, nCaras, nCruces);
El programa está obviamente incompleto. En la condición del bucle hemos supuesto que el jugador va a ganar siempre, y le hemos pedido que se siga ejecutando hasta que gane, ignorando el número de cruces que se obtienen. Ahora vamos añadir un trozo de código que use break, que en caso de que se obtengan tres cruces, termine el bucle porque ha perdido la partida. Mira las líneas 18 a 21, que no estaban en el programa anterior:
tiradas = 0;
nCaras = 0;
nCruces = 0;
while nCaras < 3
if rand() < 0.5
% Sale cara
nCaras = nCaras + 1;
else
% Sale cruz
nCruces = nCruces + 1;
end
% Salga cara o cruz, hemos hecho una tirada
tiradas = tiradas + 1;
% Cuidado: no sigas tirando si hemos perdido
if nCruces == 3
disp('Has perdido la partida');
break; % Termina el bucle
end
end
fprintf('Tiradas: %d C: %d +: %d\n', tiradas, nCaras, nCruces);