Bienvenidos sean a este post, hoy veremos otro tipo de bucle.
En el post anterior hablamos sobre el bucle universal por excelencia y al final vimos como podiamos hacer una pequeña variante para convertirlo en un «bucle infinito». Tambien mencionamos que este tipo de bucle era otro. Esto es asi porque while a diferencia de for no trabaja con un contador sino que solamente acepta una condicion para finalizar el bucle. Primero veamos como es su sintaxis:
while(condicion) {
... instrucciones ...
}
Siempre sera el while seguido de la condicion entre parentesis, este bucle se repetira mientras la condicion sea verdadera, y en el bloque iran todas las instrucciones que repetiremos. Tomemos el ejemplo del post anterior y modifiquemoslo para usarlo con while. Para ello, deben crear un archivo con el nombre de mientras.cpp y le agregaremos el siguiente codigo:
#include <iostream>
int main()
{
char rta;
while(rta!='n' && rta!='N')
{
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
switch(rta) {
case 's':
case 'S':
std::cout << "Gracias por continuar" << std::endl;
break;
case 'n':
case 'N':
std::cout << "Nos vemos a la proxima." << std::endl;
break;
default:
std::cout << "Solo puedes ingresar S o N" << std::endl;
}
}
}
Primero declaramos la variable que usaremos para la condicion. Luego el bucle se repetira mientras rta sea distinto de n y N, recuerden que el operador AND necesita que ambos sean true para devolver un true, por lo tanto siempre que no pasemos a ninguna de las dos variantes de la letra n se repetira el ciclo. En el bloque ingresaremos el valor de rta y mediante el switch evaluaremos el valor de rta. De nuevo, si tenemos la letra s, nos mostrara ese mensaje. Para el caso de la n, nos mostrara otro mensaje y el default lo usaremos para cuando no coincidan con ninguno de los tipos anteriores, compilemos y veamos como es la salida:
Como pueden ver, hicimos lo mismo que en el post anterior pero con un codigo mucho mas simple y reducido. Esto es asi porque esta funcion esta pensado para eso y no debemos adaptarla. Vamos a ver otra forma de trabajar con este bucle y para ello modificaremos el codigo anterior de la siguiente manera:
#include <iostream>
int main()
{
int i = 0, j = 0;
while(i < 3)
{
++j;
std::cout << "valor " << j << ": " << (100 * j) << std::endl;
i++;
}
}
En esta ocasion definimos primero dos variables con un valor de 0. El while lo ejecutaremos mientras la variable sea menor a 3. En el bloque primero incrementaremos a j y luego mostraremos el resultado de multiplicar el valor de la misma por 100. El texto es simplemente para mostrarlo un poco mejor, y por ultimo incrementamos el valor de i para que se cumpla la condicion cuando el valor de i sea mayor o igual a 3. Si lo compilan y ejecutan veran una salida como esta:
$ ./mientras
valor 1: 100
valor 2: 200
valor 3: 300
$
El programa funciono correctamente pero con un for se hubiera realizado mejor y esta mas libre de errores. porque si bien este es un codigo simple tiene varios factores que pueden derivar en un error. Como la declaracion de las variables a usar o bien las encargadas de incrementarlas. Por esa razon, cuando hablamos de if y switch mencionamos que uno reemplaza al otro sino que se complementan entre si. Cuando hablamos de switch mencionamos que se usa principalmente para manejar un menu, el while se utiliza para los ciclos de un programa o un videojuego dado que repetira todo el programa mientras no se cumpla una condicion. Por ultimo, vamos a ver una variante de while denominada do…while, veamos como es su sintaxis:
do
{
... instrucciones ...
}
while(condicion);
Siempre ira primero el do seguido del bloque donde estaran las instrucciones y lo finalizaremos con el while y la condicion. Es exactamente lo mismo que el while pero en este orden. En realidad esta forma esta pensada para ejecutar el codigo antes de verificar la condicion. En la actualidad esto no se nota mucho pero en ordenadores viejos si se notaba la diferencia. Tomemos el codigo anterior y modifiquemos el while por el do…while:
#include <iostream>
int main()
{
int i = 0, j = 0;
do
{
++j;
std::cout << "valor " << j << ": " << (100 * j) << std::endl;
i++;
}
while(i < 3);
}
Este codigo es igual al anterior pero con la nueva sintaxis. Si lo prueban funcionara de la misma manera y obtendran la misma salida. Tenganlo en cuenta porque pueden encontrar codigos donde el while tenga esta sintaxis o para mantener una compatibilidad con compiladores muy viejos.
En resumen, hoy hemos visto a while, tambien conocido como el bucle infinito, su sintaxis, como se utiliza, un ejemplo practico, y su sintaxis variante. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donatión
It’s for site maintenance, thanks!
$1.50
