Subido por rmontanesturonspam

03 - Instrucciones de repetición C++

Anuncio
Instrucciones de Repetición
1.- Instrucciones de repetición
En la unidad anterior vimos que hay dos tipos de instrucciones para controlar el flujo de un
programa: las instrucciones de selección y las de repetición. Después de haber estudiado
las de selección, le llega ahora el turno a las instrucciones de repetición.
Estas instrucciones permiten crear bucles en nuestro programa. Un bucle es un bloque de
código que se repite un determinado número de veces. A cada una de esas repeticiones
se le llama iteración. Por tanto, las instrucciones de repetición permiten hacer que un
bloque de código se repita tantas veces como nosotros queramos. Estas instrucciones son
for, while y do-while.
2.- Instrucción for
Imagina que queremos ejecutar un conjunto de instrucciones un determinado número de
veces. Por ejemplo, queremos que un LED parpadee 100 veces seguidas. Con lo que
sabemos hasta ahora, no tendríamos más remedio que repetir 100 veces las mismas
instrucciones, lo que implicaría un código muy largo y pesado.
Para evitar tener que repetir código innecesario, existe una instrucción que permite repetir
un determinado código las veces que queremos. Tan sólo hay que especificarle cuántas
veces queremos que se repita. Esta instrucción se llama for, y su estructura es la siguiente:
La instrucción for inicializa una variable al valor elegido por nosotros. Cuando termina la
primera iteración, incrementa la variable según lo especificado, y comprueba si dicha
variable cumple la condición indicada. Si la cumple, se ejecuta una nueva iteración. Si
no la cumple, se abandona el bucle.
Por ejemplo, para hacer que el LED interno
parpadee 100 veces escribiríamos:
En este ejemplo, estamos utilizando la variable i
para contar el número de iteraciones.
Concretamente,
estamos
diciendo
que
inicialmente la variable i valga 0. Después
decimos que las acciones se repitan mientras i sea
menor que 100. Finalmente, estamos diciendo
que cada vez que se ejecute una nueva iteración,
la variable i se incremente en 1 su valor.
Cuestión:
Indica cuántas veces se ejecutará el código que se encuentra dentro de la siguiente
instrucción for:
Ejercicios.
1.- Realiza un programa para que el microcontrolador de Arduino haga que cuatro diodos
LED parpadeen al mismo tiempo cuatro veces cada vez que se acciona un pulsador.
2.- Realiza un programa para que el microcontrolador de Arduino controle el parpadeo de
cuatro diodos LED mediante cuatro pulsadores, según las siguientes reglas:
• Si se acciona el pulsador 1, los LEDs papadearán 2 veces.
• Si se acciona el pulsador 2, los LEDs parpadearán 4 veces.
• Si se acciona el pulsador 3, los LEDs parpadearán 6 veces.
• Si se acciona el pulsador 4, los LEDs parpadearán 8 veces.
3.- Si el ejercicio 2 lo has resuelto escribiendo 4 bucles for, cada uno de ellos con un
número de iteraciones diferente, vuelve a realizar el ejercicio 2, pero esta vez escribiendo
un único bucle for, en el que el número de iteraciones no sea un número fijo sino una
variable.
4.- Realiza un programa para que el microcontrolador de Arduino provoque el parpadeo
de cuatro diodos LED, de forma que el usuario pueda elegir el número de veces que los
LEDs parpadean, utilizando para ello 2 pulsadores. El funcionamiento será el siguiente: el
usuario irá pulsando uno de los pulsadores, y el microcontrolador deberá ir contando el
número de pulsaciones. Cuando el usuario accione el segundo pulsador, los LEDs deberán
parpadear tantas veces como se haya pulsado el primer pulsador.
3.- Instrucción while_
Existe otra instrucción que sirve para repetir un mismo código un número determinado de
veces. Esa instrucción se llama while, y su estructura es la siguiente:
While significa en inglés mientras. Por tanto, la acción o acciones que se encuentran
dentro de las llaves se ejecutarán mientras se cumpla la condición establecida entre
paréntesis. Esta condición puede cambiar a expensas de una expresión dentro del código
del bucle o por un evento externo, por ejemplo, un cambio en un pin al que esté
conectado un sensor o un pulsador.
Para hacer que el LED interno de Arduino parpadee 100 veces
escribiríamos:
En este caso, la variable que utilizamos para contar el número de iteraciones ha de ser
inicializada antes de empezar la instrucción while (mientras que), y debe ser actualizada
durante la ejecución del bucle para que el programa pueda salir de él en un momento
dado.
Como acabamos de ver en el ejemplo anterior, es posible escribir el mismo bucle
utilizando dos instrucciones diferentes: while (mientras que) o for(repite). Si esto es así,
¿por qué existen dos instrucciones distintas cuando sobraría con una sola?
La respuesta es que en realidad no son dos instrucciones equivalentes, sino que tienen una
diferencia muy importante: cuando escribimos una instrucción for, tenemos que saber de
antemano cuántas veces queremos que se repita el bucle. Sin embargo, cuando utilizamos
la instrucción while, no necesariamente tenemos que saber cuántas veces debe ejecutarse el
bucle, sino que eso puede definirse a lo largo de la ejecución del programa. Por ejemplo,
imagina que quieres hacer un programa para que el LED interno parpadee indefinidamente
hasta que el usuario accione un pulsador. En este caso, cuando escribimos el código no
sabemos cuántas veces tiene que repetirse el bucle, ya que de
hecho el número de repeticiones puede cambiar cada vez. Por tanto, deberíamos usar la
instrucción while de la siguiente manera:
En el programa de la derecha, las acciones se
repetirán mientras el valor leído en el pin 11
del pulsador sea 1, es decir, mientras el
pulsador no esté pulsado. En el momento
en que alguien accione el pulsador, el valor
leído en el pin será 0, por lo que no se
cumplirá la condición y se saldrá del bucle.
Es decir, en este programa la condición de
salida del bucle depende de algo que sucede
externamente.
Ejercicios.
5.- Vuelve a escribir el programa del ejercicio 1, pero utilizando un bucle while en lugar
de un bucle for.
6.- Vuelve a escribir el programa del ejercicio 4, pero utilizando un bucle while en lugar
de un bucle for.
7.- Realiza un programa para que el microcontrolador de Arduino genere una secuencia
de encendido y apagado de 2 diodos LED. La secuencia en concreto debe ser la siguiente:
- Inicialmente debe parpadear 4 veces el diodo derecho.
- A continuación, deben parpadear los dos LEDs indefinidamente hasta que el
usuario accione un pulsador.
- Finalmente debe parpadear 4 veces el LED izquierdo.
- Una vez terminada la secuencia, ésta debe repetirse desde el principio. 8.- Realiza
un programa para que el microcontrolador de Arduino genere una secuencia de encendido
y apagado de 8 diodos LED controlada por un conmutador. La secuencia en concreto debe
ser la siguiente:
- Inicialmente parpadeará únicamente el primer LED, hasta que el usuario ponga el
conmutador en la posición de ‘1’ lógico.
- A continuación, parpadeará únicamente el segundo LED, hasta que el usuario
ponga el conmutador en la posición de ‘0’ lógico.
- Seguidamente parpadeará únicamente el tercer LED, hasta que el usuario vuelva a
poner el conmutador en la posición de ‘1’ lógico.
- A continuación, parpadeará únicamente el cuarto LED, hasta que el usuario vuelva
a poner el conmutador en la posición de ‘0’ lógico.
- El proceso continuará hasta que todos los LEDs hayan parpadeado, momento en el
que la secuencia volverá a empezar desde el principio.
9.- Realiza un programa para que el microcontrolador de Arduino una serie de efectos de
visualización sobre dos diodos LED controlados por dos conmutadores y un pulsador.
Cuando el usuario accione el pulsador, el microcontrolador leerá los dos conmutadores y
realizará los siguientes efectos:
- Si los dos conmutadores están a 0, parpadeará 4 veces el LED derecho. - Si el
primer conmutador está a 0 y el segundo está a 1, parpadeará 4 veces el LED
izquierdo.
- Si el primer conmutador está a 1 y el segundo está a 0, parpadearán 6 veces los dos
LEDs.
- Si los dos conmutadores están a 1, parpadearán 8 veces los dos LEDs.
Cuando termine la secuencia seleccionada, los LEDs permanecerán apagados hasta que
el usuario vuelva a accionar el pulsador, momento en que volverá a repetirse la secuencia
elegida.
4.- Instrucción do-while
El formato de la instrucción do-while es el siguiente:
La instrucción do-while funciona de la forma parecida a la instrucción while, con la
salvedad de que la condición se evalúa al final del bucle, en lugar de al principio. Esto
implica que el bucle siempre se ejecutará al menos una vez. En cambio, en la instrucción
while, si la condición no se cumple desde el principio, el bucle no llega a ejecutarse
ninguna vez.
Para hacer que un LED parpadee 100 veces con la instrucción do-while
escribiríamos:
A modo de resumen, utilizaremos las instrucciones for, while o do-while según lo
siguiente:
▪ For: cuando sepamos de antemano el número de veces que debe ejecutarse el bucle. ▪
While: cuando no sepamos de antemano el número de veces que se ejecutará el bucle, sino
que esto se decidirá durante la ejecución del programa.
▪ Do-while: cuando no sepamos de antemano el número de veces que se ejecutará el bucle,
y además deseamos que pase lo que pase se ejecute al menos una vez.
Ejercicios
10.- Vuelve a escribir el programa del ejercicio 5, pero utilizando un bucle do-while en
lugar de un bucle while.
11.- Vuelve a escribir el programa del ejercicio 6, pero utilizando un bucle do-while en
lugar de un bucle while.
12.- Vuelve a escribir el programa del ejercicio 7, pero utilizando un bucle do-while en
lugar de un bucle while.
5.- Instrucción continue
La instrucción continue se utiliza dentro de un bucle, y hace que el programa se salte el
resto de las instrucciones de la iteración actual del bucle, y vaya directamente a comprobar
si se cumple la condición para la siguiente iteración.
Por ejemplo, en el siguiente programa:
Cuando el bucle se encuentre entre las iteraciones 31 y 49, se ejecutará la instrucción
continue, lo que hará que se salte las acciones que vienen a continuación, pasando
directamente a la siguiente iteración. Es decir, las acciones escritas a continuación de la
instrucción continue no se ejecutan en las iteraciones que van de la 31 a la 49.
La instrucción continue no es muy utilizada, pero conviene conocerla porque puede ayudar
a simplificar la programación en algunos casos.
Ejercicios.
13.- Se pretende realizar un sistema que controle la activación de una pantalla de 7
segmentos mediante dos pulsadores. El funcionamiento debe ser el siguiente:
- Inicialmente, la pantalla mostrará el número 0.
- Cada vez que se accione el pulsador 1, el número de la pantalla irá
incrementándose en 1 (para simplificar el problema, supondremos que no se
pulsará más de 9 veces).
- Cuando el usuario accione el pulsador 2, el sistema comenzará a generar una
cuenta atrás automática, empezando en el último número mostrado en pantalla, y
terminando en 0. Cada número se mostrará durante 1 segundo.
- Cuando termine la cuenta atrás, el sistema inicializará todos los valores para
poder comenzar de nuevo.
Ejemplo: si, una vez alimentada la placa, el usuario acciona 5 veces el pulsador 1, la
pantalla irá incrementándose con cada pulsación hasta el número 5. Si en ese momento
acciona el pulsador 2, comenzará la siguiente cuenta atrás automática: 5-4-3-2-1-0 (cada
número durante 1 segundo).
14.- Se pretende implementar un dado electrónico con una pantalla de 7 segmentos y un
pulsador. El funcionamiento debe ser el siguiente:
- Nada más resetear el microcontrolador, éste comenzará a contar del 1 al 6
periódicamentea mucha velocidad. Deesta forma, el usuario no podrá distinguir el
número que aparece en la pantalla de 7 segmentos.
- Cuando el usuario apriete un pulsador, la cuenta se detendrá durante dos segundos,
de forma que el usuario podrá ver el valor de la tirada del dado electrónico.
- Después, el número que aparece en pantalla parpadeará tantas veces como indique el
propio número. Es decir, si sale un 4, parpadeará 4 veces, con un tiempo de
apagado y encendido de 500ms.
- Después del parpadeo el microcontrolador volverá a la situación inicial, contando a
gran velocidad, preparado para una nueva tirada.
15.- Utiliza la placa Arduino UNO para diseñar un pequeño programador de riego de 4
sectores. El programador dispondrá de un pulsador para iniciar el riego, 2 conmutadores
para que el usuario pueda seleccionar el número de veces que se repetirá el ciclo de riego,
4 salidas para activar 4 electroválvulas (una por sector) y una pantalla de 7 segmentos
donde aparecerá el tiempo que queda de riego del sector que se está regando en ese
momento.
El funcionamiento del programador será el siguiente: inicialmente, el usuario utilizará los
dos conmutadores para seleccionar el número de veces que se repetirá el ciclo de riego
(00 -> no se riega; 01 -> el ciclo se hace sólo una vez; 10 -> el ciclo se repite dos veces;
11 -> el ciclo se repite tres veces). Cuando el usuario accione el pulsador, comienza el
ciclo de riego, en el que cada sector se debe regar durante 3 minutos. En concreto, el ciclo
será el siguiente:
- Inicialmente se activa la electroválvula 1, y en la pantalla aparece el número 3.
Transcurrido un minuto, en la pantalla aparece el 2. Transcurrido otro minuto,
aparece un 1.
- Cuando transcurre otro minuto, se apaga la electroválvula 1, se enciende la número
2, y en la pantalla vuelve a aparecer el número 3, que va decrementándose
conforme pasan los minutos.
- El mismo ciclo se repite para las electroválvulas 3 y 4.
Cuando termina el ciclo de riego, éste debe repetirse tantas veces como haya indicado
previamente el usuario con los conmutadores.
Para simular las electroválvulas se emplearán diodos LED. Por otro lado, para no tener
que esperar tantos minutos para comprobar el correcto funcionamiento del circuito, se
puede sustituir cada minuto por 1 segundo, es decir, que cada sector se riegue 3 segundos
en lugar de 3 minutos.
Descargar