No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de C++ Básico

Curso de C++ Básico

Diana Martínez

Diana Martínez

Ciclos While y Do While en C++: Ejemplos Prácticos

15/18
Recursos

¿Qué son los ciclos while y do while en C++?

En el fascinante mundo de la programación con C++, los ciclos juegan un papel integral en la ejecución eficiente de tareas repetitivas. Dos de los ciclos más poderosos e interesantes son el while y do while. A diferencia del ciclo for, estos ciclos están diseñados para ejecutarse de manera indefinida, dependiendo de una circunstancia externa o condicional que determine cuándo interrumpir la ejecución. Esto los hace ideales para situaciones donde no se conoce de antemano cuántas iteraciones se necesitarán.

¿Cómo usar el ciclo while en un programa C++?

El ciclo while es perfecto para situaciones donde la cantidad de repeticiones no está estrictamente determinada. Imagina que desarrollas un programa en la terminal que debe interactuar con el usuario. Este programa debe repetir un menú de opciones hasta que el usuario decida salir. Aquí es donde entra en juego el ciclo while.

char respuesta = 'n'; // Respuesta inicial no permite el carácter vacío
while (respuesta != 'y') {
    std::cout << "¿Deseas terminar? (y/n): ";
    std::cin >> respuesta; // Captura la respuesta del usuario
    if (respuesta == 'y') {
        std::cout << "Bye bye!" << std::endl;
        break; // Termina el programa si el usuario responde 'y'
    }
}

En este ejemplo, el ciclo while continúa ejecutándose hasta que el usuario introduce 'y', indicando su deseo de terminar el programa. Esto ayuda a gestionar interacciones dinámicas sin establecer un límite numérico predefinido para las iteraciones.

¿Cuándo utilizar un ciclo do while?

A pesar de su similitud, do while ofrece una diferencia crucial: garantiza que el bloque de código se ejecutará al menos una vez antes de verificar la condición. Esto es útil cuando se necesita realizar al menos una operación previa a la evaluación de condiciones.

char respuesta;
do {
    std::cout << "¿Deseas terminar? (y/n): ";
    std::cin >> respuesta;
    if (respuesta == 'y') {
        std::cout << "Bye bye!" << std::endl;
    }
} while (respuesta != 'y');

En este caso, do while se asegura de que el mensaje se muestre al usuario por lo menos una vez, independientemente de la respuesta inicial. Solo después de esta primera interacción, el ciclo verifica si debe continuar ejecutándose.

Ventajas del ciclo while respecto al ciclo for en problemas indefinidos

Implementar un ciclo for para problemas donde la cantidad de iteraciones no es clara puede llevar a ineficiencias. Algunos puntos a considerar:

  • Flexibilidad: while y do while no requieren predefinir un número de iteraciones, lo que los hace flexibles ante interacciones prolongadas o imprevistas.
  • Simplicidad: Estos ciclos permiten centrarse en la lógica condicional sin preocuparse por el manejo de contadores.
  • Eficiencia: En situaciones donde las interacciones pueden variar significativamente, while y do while ofrecen un método más directo y eficaz para manejar entradas y salidas de usuarios.

Los ciclos while y do while son herramientas indispensables para construir programas robustos y adaptables. Dominarlos, junto con las técnicas aprendidas sobre ciclos for, condicionantes y otros elementos de C++, te permitirá crear aplicaciones más sofisticadas y eficientes. Así que sigue aprendiendo y explorando, ¡el mundo del código está lleno de posibilidades!

Aportes 19

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Un dato interesante es que se puede tener un while(true) usando for, como se ve aca:

#include<iostream>

using namespace std;

int main() {
    for(;;) {
        cout << "Deseas terminar?\n";
        char respuesta;
        cin >> respuesta;
        if (respuesta == 'y') {
            cout << "Bye bye\n";
            break;
        }
    }
}

Tambien en lugar de usar endl, al final de la cadena pueden anadir \n ejemplo: “Mi texto\n”

Diria que usar el while(true) y romper la ejecucion con un break es una mala practica. Lo recomendable seria hacer la comprobación de la respuesta en la condicion, por ejemplo.

char respuesta
while(respuesta != 'y'){
	cout << "Deseas terminar?" << endl;
	cin >> respuesta;
	if(respuesta == 'y'){
		cout << "bye bye";
	}
}	

Aunque a modo de explicación esta bien

Me hubiera gustado un reto sinceramente

Creo que es mejor así el do-while:

do {
<<codigo>>
} while (respuesta != ‘y’);

Para quienes deseen poner en practica los conocimientos del ciclo while y do-while, en este link podrán encontrar diferentes retos a realizas:
https://platzi.com/comunidad/retos-de-programacion-en-cualquier-lenguaje-sexto-nivel-ciclo-while-2/

Hice este código que se ejecuta por la eternidad hasta que el usuario quiera salir, no importa si usa mayúsculas o minúsculas.

    char respuesta;
    for(;;){
        cout << "¿Deseas terminar?[Y/N]: ";
        cin >> respuesta;
        if (respuesta == 'Y' || respuesta == 'y'){
            cout << "Bye bye \n";
            break;
        }else if(respuesta == 'N' || respuesta == 'n'){
            cout << "Continuamos \n";
        }else{
            cout << "Respuesta inválida \n";
        }
    }

Mi codigo usando while
Un while siempre se va a ejecutar hasta que sea verdadero

#include <iostream>
using namespace std;

int main() {
    //this is a comment haha
   while(true){
       char respuesta;

       cout << "Deseas terminar?" << endl;
       cin >> respuesta;

       if(respuesta == 'y'){
           cout << "bye bye";
           break;
       }
   }
    return 0;
}

Es mas un comentario que un aporte. Que genial usar dentro del While un true como booleano nunca se me había ocurrido. Conocía el while pero siempre usando una condición que comparaba valores numéricas.
Buena Clase! Saludos!

Hola amigos, aquí muestro mi versión optimizada:
#include <iostream>
using namespace std;
int main() {
char respuesta=‘n’;
while (respuesta != ‘y’ && respuesta != ‘Y’) {
cout << "Desea continuar ? ";
cin >> respuesta;
}
}

Ciclos while y do-while

Los ciclos while y do-while se diferencias del ciclo for en que solo se evalua una condición la cual puede ser iterada indefinidamente.

Ejemplo de while para mantener ciclo:

#include <iostream>
using namespace std;

int main(){
    
    while (true)
    {
        char respuesta;
        cout << "Desea terminar?" << endl;
        cin >> respuesta;

        if (respuesta == 'y'){
            cout << "bye bye";
            break;
        }
    }
    
}

En este caso creamos un bucle infinito, el cual se termina solo si la variable respuesta vale ‘y’.

El ciclo do-while se diferencia del ciclo while de que este ejecuta minimo una vez el bloque de codigo y despues evalua la condición.

Ejemplo del ejercicio anterior pero con do while:

#include <iostream>
using namespace std;

int main()
{
    do
    {
        char respuesta;
        cout << "Desea terminar?" << endl;
        cin >> respuesta;

        if (respuesta == 'y')
        {
            cout << "bye bye";
            break;
        }
    } while (true);
}

Notas de la clase:https://towering-lancer-935.notion.site/Ciclos-while-y-do-while-caa992c2e3a2485997798e7aa8e47f89
Codigo de la clase:

#include <iostream>
using namespace std;

int main(){
    do{
        char respuesta;
        cout<<"Deseas terminar?"<<endl;
        cin >> respuesta;
        if(respuesta == 'y'){
            cout <<"Bye bye"<<endl;
            break;
        }
    } while(true);
}```

Aquí está el código usado en clase:

#include <iostream>

using namespace std;

int main() {
    do {
        char response;
        cout << "Deseas terminar?" << endl;
        cin >> response;
        if (response == 'y') {
            cout << "bye bye";
            break;
        }
    } while (true);
}

😄

Resulta un tanto complicado sentir seguridad del contenido cuando la misma profesora duda de lo que menciona (el ejemplo de crear una variable char vacía es claro) y se nota incómoda. Recomendaría estructurar mejor las clases y agregar retos.

Otra opción para tener un while con un for pude ser así;

#include <iostream>

using namespace std; 

int main(){
// ingreso de datos 
    char data;
    cout << "Ingresa \"y \"para inicial el programa o \" n \" para saltar el programa: " << endl;
    cin >> data;
    int i = 0;
    for(char j = 'y'; j == data || data != 'n';){
        cout << "ingresa \" n \" para terminar" << endl;
        cin >> data;
    }
    cout << "bye saliste del programa" << endl;

    
}

Reto

Crear un programa que permita obtener el n-ésimo elemento de la serie de fibonacci

Por ejemplo, para n = 8 el programa debería devolver 13

En el caso de usar solamente while, primero se verifica la condicion para entrar al ciclo

#include<iostream>

using namespace std;

int main ()
{
    for(int i = 0; i < 10; i++)
    {
        cout << i << endl;
        while (i < 5) //primero se verifica la condicion para entrar al ciclo
        {
        i += 1;
        cout << "Aqui se ejecuta el proceso while" << endl;
        }
        
    }
}
"Resultados:"
0 // se imprime la variable
Aqui se ejecuta el proceso while //while verifica la condicion para entrar al ciclo, confirmando que es verdadera
Aqui se ejecuta el proceso while
Aqui se ejecuta el proceso while
Aqui se ejecuta el proceso while
Aqui se ejecuta el proceso while // en este punto "i" vale 5 por lo que while verifica que ya no se cumple la condicion y sale del ciclo 
6
7
8
9

Y con Do while primero se ejecuta el ciclo antes de verificar la condicion para entrar en el

#include<iostream>

using namespace std;

int main ()
{
    for(int i = 0; i < 10; i++)
    {
        cout << i << endl;
        do // primero se ejecuta el codigo y despues se verifica la condicion 
        {
        i += 1;
        cout << "Aqui se ejecuta el proceso Do" << endl;
        } 
        while(i < 5); // Aqui se verifica si se debe continuar con el ciclo            
    }

}
"Resultados:"
0 // se imprime la variable 
Aqui se ejecuta el proceso do //do ejecuta el ciclo
Aqui se ejecuta el proceso do
Aqui se ejecuta el proceso do
Aqui se ejecuta el proceso do
Aqui se ejecuta el proceso do // en este punto "i" vale 5 por lo que while confirma que se debe salir del ciclo
6
Aqui se ejecuta el proceso do //do no verifica la condicion para entrar en el ciclo, por lo que se ejecuta el codigo, en este punto "i" vale 7. While confirma de nuevo que se debe salir del ciclo
8
Aqui se ejecuta el proceso do // Al no verificar en primer lugar la condicion para entrar al ciclo, estara entrando y saliendo una y otra vez (en este caso)

Los ciclos (o bucles) while y do while:

#include<iostream>
using namespace std;

int main(){
    int limite = 0;
    int contador = 0;
    bool ciclo = true;
    cout<< endl;

    while (ciclo)
    {
        cout<< "¿Que siga el ciclo While? (1 = No, 0 = Si)";
        cin>> limite;

        contador +=1;
        cout<< contador <<endl;

        if(limite == 0){
            break;
        }
    }

    contador = 0;
    do
    {
        cout<< "¿Que siga el ciclo Do While? (1 = No, 0 = Si)";
        cin>> limite;

        contador +=1;
        cout<< contador <<endl;

        if(limite == 0){
            ciclo = false;
        }
    } while (ciclo);
}

Este en mi codigo

#include <iostream>
using namespace std;

int main() {
    //this is a comment haha
   for(int i = 0; i < 10000; i++){
       char respuesta;

       cout << "Deseas terminar?" << endl;
       cin >> respuesta;

       if(respuesta == 'y'){
           cout << "bye bye";
           break;
       }
   }
    return 0;
}

Les dejo el código:

#include <iostream>

using namespace std;

int main() {
  do {
    char response;
    cout << "Do you wanna leave the program? " << endl;
    cin >> response;

    if (response == 'y') {
      cout << "Bye" << endl;
      break;
    }
  } while (true);
}