Bienvenidos sean a este post, hoy veremos al bucle universal por excelencia.
Al igual que sucede con if, este bucle esta difundido por todos los lenguajes habidos y por haber donde puede variar su sintaxis pero su funcion es siempre la misma. Esta funcion esta pensada para que repitamos un bloque de codigo una X cantidad de veces, esto no es tan asi pero de eso hablaremos al final. Veamos como es la sintaxis:
for(inicio_contador; condicion; operador) {
... instrucciones ...
}
El primer parametro sera para iniciar la variable que usaremos como conador, el segundo sera para la condicion que usaremos para terminar con el bucle y se involucra al contador, y el ultimo es el tipo de operacion que usaremos para modificar el valor del contador y permitir que se cumpla la condicion. Este ultimo puede ser cualquier tipo de operacion pero por lo general es una de incrementaccion y se utiliza al operador ++, del cual hablamos en este post. Pasemos a analizar un ejemplo, para ello deben crear un archivo con el nombre de para.cpp y le agregaremos el siguiente codigo:
#include <iostream>
int main()
{
int arreglo[3];
int valor;
for(int i=0; i < 3; i++)
{
std::cout << "Ingresa un valor: ";
std::cin >> valor;
arreglo[i] = valor;
}
for(int j=0; j < 3; j++)
std::cout << "Arreglo[" << j << "]: " << arreglo[j] << std::endl;
return 0;
}
Primero declaramos un array con tres posiciones, lo siguiente es una variable que usaremos para almacenar un valor ingresado. Despues de las dos declaraciones tenemos el primer bucle donde iniciamos la variable que usaremos como contador, luego tenemos una condicion donde haremos el bucle mientras i sea menor que 3, por ultimo usaremos al operador incrementador para llegar a la condicion anterior. En el bloque tenemos un mensaje para mostrar en pantalla, donde mediante el cin ingresaremos un numero y lo almacenaremos en valor. Lo siguiente es usar a la variable i como posicion del array y le asignaremos el valor ingresado. Despues tenemos otro bucle donde solo recuperaremos los valores almacenados en arreglo, la decoracion es simplemente para verlo mejor en pantalla, tambien usamos otra variable para contar pero no es obligatorio dado que todas estas variables son locales de los bucles. Compilemos y veamos como trabaja:
Podemos ver como nos solicita el ingreso del valor tres veces y una vez finalizado el ingreso nos muestra los valores almacenados. Esto es una operacion sencilla donde el bucle realiza una tarea repetitiva por nosotros. Volvamos al archivo y realicemos el siguiente cambio:
#include <iostream>
int main()
{
int valor;
for(int i=0, j=1; i < 6; i++, ++j)
{
std::cout << (100 * j) << std::endl;
}
return 0;
}
En este codigo aplicamos un par de curiosidades. Primero eliminamos el array y dejamos una variable para trabajar. En el bucle iniciamos dos contadores, ambos seran de tipo int, el primero sera para contar y finalizar nuestro bucle y el segundo sera para otros fines. Observen que para la condicion solo usamos la primer variable, pero en las operaciones incrementamos a ambas variables. Otro detalle es que uno lo usamos despues y el otro antes de cada variable. Esto es simplemente para que genere el valor antes del bucle, en el caso de j, y no tengamos inconveniente para la operacion en el bucle. En el bloque solamente mostramos el resultado de la operacion del valor de j multiplicado por 100. Si lo compilan y ejecutan obtendran la siguiente salida:
$ ./para
100
200
300
400
500
600
$
Esto nos permite facilitar las operaciones dentro del bucle sin necesidad de depender del encargado de controlar el bucle.
Al inicio mencionamos que este bucle es limitado para contar y terminar pero no es tan asi, porque los campos no son obligatorios y podemos reemplazarlo en el bloque del bucle. Vamos a tomar el caso que vimos en los condicionales, tanto if como switch, lo reutilizaremos pero con un bucle for muy especial. Volvamos al archivo y realicemos las siguientes modificaciones:
#include <iostream>
int main()
{
char rta;
for(;;)
{
std::cout << "Deseas Continuar (S/N)? ";
std::cin >> rta;
if (rta == 's' || rta == 'S') {
std::cout << "Gracias por continuar" << std::endl;
} else if (rta == 'n' || rta == 'N') {
std::cout << "Nos vemos a la proxima" << std::endl;
break;
} else {
std::cout << "Solo puedes usar S o N." << std::endl;
}
}
return 0;
}
Primero declaramos una variable para almacenar un caracter. Veamos el detalle del bucle, no pasamos ninguno de los parametros. Por lo tanto, no tenemos forma de terminar este bucle, con lo cual podemos considerarlo «infinito» pero solo por el hecho de que no tenemos forma de terminarlo, o si?. Primero mostramos un mensaje para ingresar un valor, tal como hizo siempre, y mediante cin lo almacenamos en la variable declarada. Despues tenemos unos condicionales donde primero evaluamos si la variable tiene las dos variantes de s, en caso de ser verdadero nos muestra un mensaje. En la siguiente condicion, evaluamos a las variantes de n pero en caso de cumplirse no solo mostraremos el mensaje sino que aplicamos un break. Este sera el encargado de sacarnos del bucle, y mientras no se cumpla no sale. El else es para indicar que solo podemos sacar esas letras. Compilemos y veamos como es la salida:
En el video podemos ver como mientras no ingresemos a n o N, el bucle sigue corriendo y nos sigue preguntando. Esto como mencionamos podemos considerarlo como un «bucle infinito» pero el verdadero lo veremos en el proximo post. Este en el 99.9% de las veces se utilizara como lo vimos al inicio y pincipalmente con la recuperacion de informacion en un array.
En resumen, hoy hemos visto a for, que es, para que sirve, como se compone, como se utiliza, unas cuantas variantes de este y un uso especial pero que no es habitual del mismo. 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
