Control de flujo I – if, if…else y for

El control de flujo permite variar, en un número ilimitado de ocasiones a lo largo de un programa, el orden «natural» de ejecución del código, omitiendo, ejecutando, o repitiendo sentencias o bloques de sentencias en función de una o varias condiciones. Las instrucciones para el control de flujo son comunes a muchos lenguajes de programación, y son if, if…else, for, while, y do…while. Además, veremos un par de sentencias capaces de variar el comportamiento de estas instrucciones: break y continue.

if

Realiza una comprobación de una condición. En el caso de que esta condición se cumpla, el código escrito entre llaves se ejecuta. Si, por el contrario, la condición entre paréntesis no se cumple, el código entre llaves es ignorado y el programa sigue ejecutándose normalmente.

Como se puede apreciar en el código anterior, la comparación se realiza con el operador ??, que se ha de sustituir por cualquier operador lógico o cualquier operador de comparación. Hay que tener cuidado con el operador de comparación igual que (==), pues se suele confundir con el operador de asignación igual (=). Veámos algunos ejemplos:

Incluso podemos establecer más de una condición:

if…else

Complementa en cierto modo al control de flujo que ofrece la sentencia if, permitiendo ejecutar un bloque de código en el caso de que se cumpla la condición entre paréntesis, y otro bloque de código si la condición no se cumple. Estos dos bloques de código son mutuamente excluyentes, por lo que nunca se podrán ejecutar los dos a la vez.

Podemos anidar varias sentencias if…else, siendo todas ellas, a su vez, mutuamente excluyentes:

Analicemos el código anterior, donde tenemos 4 sentencias mutuamente excluyentes que actuarán como control de flujo en función de distintas condiciones:

delay(100);  se ejecutará si:

  •  x menor o igual que 0.
delay(250);  se ejecutará si:

  • x mayor que 0, derivado de que la anterior condición no se ha cumplido.
  • x menor que 100.
delay(500);  se ejecutará si:

  • x mayor que 0 y  mayor o igual que 100, derivado de que las anteriores condiciones no se han cumplido.
  • x menor o igual que 200.
delay(1000);  se ejecutará si:

  • x mayor que 200, ya que ninguna de las anteriores condiciones se han cumplido.


for

Entramos en la parte del control de flujo relativa a la repetición de un bloque de código siempre que se cumpla una condición. Así pues, siempre que nos encontremos con una instrucción for -también llamado bucle for-, el código encerrado entre llaves se repetirá siempre que se cumpla la condición. Con cada repetición del bloque de código, la condición vuelve a ser evaluada.

Esta estructura está formada siempre por tres campos separados entre sí por un punto y coma. La inicialización se produce una sola vez y sirve para establecer un estado inicial a partir del cual empezar a evaluar la condición. La condición, como ya hemos dicho, se re-evalúa con cada repetición del bucle. Entonces, puede resultar obvio que siempre que se ejecute el bloque de código hay que variar alguna parte de la condición, evitando entrar en el denominado bucle infinito, donde un bloque de código se repite de forma infinita. Con tal fin, tenemos la expresión del tercer campo, una pieza de código que se va a ejecutar después de que lo haga el bloque de código encerrado entre llaves.

En el siguiente ejemplo vemos un caso muy simple pero práctico para imprimir por el puerto serie los números del 0 al 9:

Pero aquí no acaba la cosa. De los 3 campos del bucle for, podemos obviar tantos como queramos, siempre y cuando incluyamos los puntos y coma. Así, podemos hacer la inicialización antes del bucle  (o no hacerla), evaluar la condición dentro del bucle, o modificar la condición dentro del bloque entre llaves.

Nos vemos en la segunda parte de la bilogía destinada al control de flujo, donde explicaremos conceptos tan interesantes como los bucles while y do…while, y las sentencias break y continue.


5 Comentarios

  1. fernando collazos

    Un saludo, quiero que este código no se repita..

     

    int estadoBoton = 0;
    int led = 8;
    int boton = 2;
    void setup() {
    pinMode(led,OUTPUT);
    pinMode(boton,INPUT);
    }

    void loop() {
    estadoBoton=digitalRead(boton);
    if(estadoBoton == HIGH){
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
    delay(2000);
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
    delay(2000);
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
    delay(2000);
    }

    }

  2. //tengo un problema con mi arduino mega realice este codigo pero cuando llega a el else if (cuenta==15) , no ejecuta la siguiente la instruccion quedandoce como en un bucle infinito si alguien me puede ayudar se los agradeceria , este es el codigo:

    int botom = 7 , led = 3 , led1 = 2 , led2 = 4 , led3 = 5 , led4 = 6;
    int cuenta = 0;
    void prender() {
    digitalWrite(led, HIGH);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(100);
    }
    void apagar() {
    digitalWrite(led, LOW);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(100);
    }
    void setup() {
    Serial.begin(9600);
    for (int i = 2; i <= 6; i++) {
    pinMode(i, OUTPUT);
    }

    pinMode(botom, INPUT);
    }
    void loop() {
    if (digitalRead(botom) == HIGH) {
    if (digitalRead(botom) == LOW) {
    cuenta++;
    Serial.println(cuenta);
    delay(10);
    }
    }
    if (cuenta == 6) {
    prender();

    }
    if (cuenta == 10) {
    apagar();
    }
    if (cuenta == 15) {

    prender();
    delay(100);
    apagar();
    delay(100);
    }
    if (cuenta == 17) {
    Serial.println(«llego a maxima cuenta y retorna el contador a = 0»);
    cuenta = 0;
    }
    }

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies