18/04/2024
# Tags
#C++ #Programación

Bucle While – do en C++

Como acabamos de analizar, el bucle While, nos permite ejecutar un conjunto de sentencias mientras una condición sea verdadera. Y también se señaló que existe siempre la posibilidad de que el bucle no se ejecute, (si la condición desde un inicio es falsa). Sin embargo habrá ocasiones que necesitaremos que al menos una vez se ejecute el ciclo de instrucciones. Como podría ser, por ejemplo, el caso en que necesitemos presentar un menú de opciones, para estos casos podemos utilizar la sentencia Do – While.

Do – While

Estructura do / while en C++
Estructura do / while en C++

El bucle do – while se puede leer como «haz – mientras», esta estructura se encarga de repetir de forma cíclica un conjunto de instrucciones que se encuentren dentro del bucle, esta repetición se realizará hasta que se cumpla la condición de parada que definamos y que es evaluada con la palabra reservada while.

Es importante observar 2 detalles fundamentales que lo diferencían de la sentencia While

  1. La condición de inicio se evalúa después de ejecutar el código del ciclo, por lo que el código siempre se ejecutará por lo menos 1 vez.
  2. Dentro del código del ciclo debemos establecer un mecanismo para que el ciclo se deje de ejecutar, sino se hace, el ciclo se repetirá de forma infinita. Esto se realiza con lo que se denomina «Condición de parada» y se establece con la palabra reservada While.

Sintaxis del ciclo do – while

do
{
// Instrucciones del ciclo.
} while (condicion de parada)

en donde,

do, palabra reservada que indica el inicio del ciclo

{}, Todas las instrucciones dentro de las llaves se ejecutarán como una instrucción como parte del ciclo while, como parte del código debemos generar la instrucción de paro de modo que podamos salir de forma limpia del ciclo.

while, palabra reservada que establece el ciclo.

(condición de parada), es una condición lógica que se evalúa por la instrucción while, en caso de ser verdadera, se ejecutarán las instrucciones dentro del ciclo while, en caso de ser falsa, se ignora este código.

El siguiente ejemplo ilustra el uso del ciclo do – while

// cpp_28_whiledo01.cpp
// Uso de while do
// Se ilustra un uso del ciclo while - do con  un menú de ejemplo, el ciclo se
// ejecuta mientras el usuario no presione el número 3, además se ilustra el
// uso de una condición de parada utilizando una variable en lugar de una
//comparación.
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
int main()
{
    int opcion = 0;
    bool terminar = false;
    cout << "Este programa realiza la conversión de temperaturas" << endl;
    do  // Inicio del ciclo do - while
    {
        cout << "Escribe el número según la conversión que deseas realizar:" << endl << endl;
        cout << "1. Convertir Grados centígrados a Fahenheit:" << endl;
        cout << "2. Convertir Grados Fahenheit a Centígrados:" << endl;
        cout << "3. Salir del programa" << endl;
        cin >> opcion;
        cout << "Seleccionaste la opción:" << opcion << endl;
        //Evaluamos la selección del usuario
        if (opcion == 3) {
            cout << "Elegiste salir, gracias por utilizar este programa";
            terminar = true; //El ciclo debe continuar si se pulsa 3
        } else {
            terminar = false; //Cualquier otro número permite que siga el programa
        }
    } while (!terminar); //Observa que en lugar de una comparación, se utiliza
                         //el valor de una variable para determinar si continuamos
    return 0;
}

En este punto ya debes ser capaz de leer con fluidez el código, al margen de los comentarios. Puedes observar que el ciclo do-while controla la ejecución del programa mientras se cumpla la condición para continuar.

De hecho esta es la parte relevante en este ejemplo. Observa que se ha definido la variable terminar para establecer la condición de parada. Este tipo de variables también se le puede denominar «bandera», lo que en en términos informáticos puede definirse como un valor que establece una condición o estado determinado dentro de un programa.

Como ya se ha indicado, el ciclo se ejecutará siempre y cuando la condición de parada sea verdadera. De acuerdo a nuestro programa tenemos una situación que puede resultar un tanto extraña, tenemos la condición terminar, la cual en caso de ser verdadera, lo lógico es esperar que el programa termine, y en caso de que terminar sea falso, el programa continúe, ¿Suena lógico, no es así? Por ello es que se inicializa la variable a Falso, para asegurarnos que que el programa continúe mientras el usuario no pulse el número 3. Si pulsa el 3, la variable se asigna a falso, lo que dentro de nuestra lógica es la instrucción de terminar, sin embargo ¿Cómo lo evalúa while?

Analiza:

terminar = false; //es decir el programa debe seguir ejecutándose.
while (terminar);

¿Qué ocurre? Que el ciclo terminaría en este punto. Lo cual es incorrecto. La razón radica en lo que se mencionó de while, este ciclo seguirá mientras la condición sea verdadera. En nuestro caso la interpretación es contraria, debe continuar mientras terminar sea falso. ¿Cómo solucionamos esta situación?

Podríamos optar por hacer que:

terminar = false;

cuando el usuario presiona 3, y hacer que sea verdadero en cualquier otro caso. lo cual aunque funcional mete un poco de «ruido» pues la evaluación de terminar se leería:

terminar = false;
while (terminar); //mientras terminar sea falso, termina el ciclo pues solo se ejecuta en condición verdadera.

Aunque funciona, no deja de ser un poco extraño.

De la forma en que está programado tenemos:

terminar = true; //si lo pasamos directo a While, wshile seguirá funcionando, en lugar de terminar, que es lo que queremos
} while (!terminar); //(!terminar) = falso (recuerda que ! es la negación del valor al que está asociado) de este modo terminamos efectivamente el ciclo.

Te sugiero que pruebes hacer una o dos variaciones adicionales al programa para que visualices a fondo lo que acabo de mencionar, de modo que puedas programar el mismo resultado una de estas variaciones sugiero la hagas sin el símbolo de negación en la condición while (!). Eso es lo bueno que tiene la programación, siempre puedes hacer lo mismo de diverso y mejor (o peor) modo, lo importante es que tú eres el responsable de que funcione (o no) tu código, nadie más.

do while, contadores y conversión de tipos

El siguiente es un programa que te permite sumar números hasta que el usuario escribe x utilizando un bucle while do, la estructura funciona como ya se ha mencionado, en este punto lo importante es que empieces a notar otros detalles que se presentan en el programa.

Es buena idea que realices todas las variaciones que consideres necesarias para identificar que hace cada línea de código, también es buena idea que comentes líneas de código para que analices el resultado.

Finalmente realizamos un programa muy compacto para mostrar una tabla de caracteres ASCII y su correspondiente código. Puedes apreciar el tamaño del código, que aunque pequeño, nos ofrece un resultado interesante. Con lo que puedes apreciar que no se requieren extensos programas para llegar a resultados útiles.

// eb29_whiledo02.cpp
// Uso de while do 2
// Se ilustra un uso del ciclo while - do Mostramos los códigos ASCII aprovechando
// la posibilidad de realizar conversiones implícitas de tipos
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
int main()
{
    int a = 0;
    cout<<"Tabla de códigos ASCII  utilizando do While" << endl  << endl;
    cout << "Código \t Caracter" << endl;
    do {
        // char(a) convierte el valor numérico de "a" a su correspondencia ASCII
        cout << a << " \t - " << char(a) << endl;
        a = a + 1;  //incrementamos nuestro contador
    } while (a<=255);
    return 0;
}

En este programa lo más interesante es el cambio de tipo de una variable a otra distinta (inicialmente la declaramos como entera y posteriormente la usamos como carácter) redefiniendo su tipo dentro de una sentencia char(a). Y el segundo punto remarcable es la definición de un contador, para llegar un registro de los ciclos, en la siguiente sección hablaré más en detalle de este tipo de contadores. Por el momento intenta comprender el funcionamiento del mismo.

A modo de ejercicio resulta conveniente que tomes los programas de esta sección y los reescribas para que trabajen utilizando el ciclo while. Como ya mencioné recuerda que siempre hay una forma distinta de hacer lo mismo.


eHack Logo

Fuente Imágenes

  • «Todas las demás imágenes de esta sección»: by Nala Systems

Código fuente

Licencia de Creative Commons
Bucle While - do en C++ by Roberto C. González is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
Bucle While – do en C++

Bucle While en C++

Bucle While – do en C++

Contadores y acumuladores

Leave a comment

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