Ciclo For en C++
El ciclo for es muy importante en programación debido a que es un ciclo que repite un conjunto de instrucciones mientras una condición es verdadera, pero, a diferencia de los ciclos if-else y while, normalmente en el ciclo for tiene aplicación cuando conocemos el número de veces que se repetirá el ciclo.
Cuando requieras programar integrales, cálculos estadísticos, recorrer matrices, listas, estructuras de datos, la lectura de archivos, incluso el recorrido de directorios, etc, normalmente utilizarás el ciclo for. El ciclo for también es frecuentemente referido como “bucle” for.
Nota: Si no lo haz hecho, te sugerimos revisar el capítulo anterior en donde se revisan los operadores incrementales, su uso es común en el ciclo for.
For
El bucle for se puede leer como “para la condición dada repite”, 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 for.
Sintaxis del ciclo for,
for (Expresión-de-inicio; Condición; incremento) { Instrucciones del ciclo. }
en donde,
for, 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 for.
Expresión-de-inicio, es la inicialización de una variable, la cual sirve como punto de inicio a partir del cual se va a ejecutar el bucle.
Condición: Establece la condición en la que debe detenerse la ejecución del ciclo. El bucle se ejecutará mientras la condición sea verdadera.
Incremento: establece el incremento que se hará en la variable inicializada en Expresión de inicio cada ciclo que se ejecute. Los incrementos pueden ser unitarios (incrementos en 1) o en otro incremento. Así mismo el contador puede decrementarse en lugar de incrementarse.
Ejemplos
El siguiente ejemplo ilustra un uso básico del ciclo for
// epp_37_for01.cpp // Este programa forma parte del tutorial de introducción al lenguaje C++ // http://a.ehack.info/leguaje-c-introduccion/ // Se ilustran 3 sos básicos del ciclo for // 2018, 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 i; //declaramos i for (i=0; i <= 10; i++) //Imprimimos una lista del 1 al 10 { cout << i << endl; } //se ilustra la declaración de variables al momento de inciializarla en el bucle for (int j=65; j<= 122; j++) //Imprimimos el alfabeto utilizando conversión de tipos { cout << char(j) << ", "; } //Sumamos únicamente los números pares del 1 al 100 int sumapares = 0; //Prueba el resultado quitando la inicizalización for (int k=0; k <= 100; k+=2) //el contador k tiene incrementos de 2 { sumapares += k; //realizamos la suma de los elementos pares } //Revisa: ¿Qué ocurriría si esta sentencia estuviera dentro del bucle for? cout << sumapares; //Primero analiza que pasa con el siguiente código, después pon la siguiente // sentencia dentro de la sentencia for después de >>> sumapares += k; // *** Añadir *** // cout << k << " - " << sumapares << endl; return 0; }
Como puedes apreciar, se incluyen 3 programas que ilustran el uso del ciclo for, puedes apreciar que es una estructura que cuenta ciclos, en el ambiente de la programación este término también lo podrás encontrar con el término iteración. El cual es otra forma de decir que es una estructura que toma los valores y los evalúa mientras se cumpla la condición establecida.
El siguiente programa retoma el ejemplo del bucle que suma los números pares de un rango. El ejemplo inicial determina los números pares a partir del incremento de la variable de control. Sin embargo no es una solución completamente “elegante” observa la siguiente variante que realiza la misma tarea.
// cpp_38_for02.cpp // Este programa forma parte del tutorial de introducción al lenguaje C++ // http://a.ehack.info/leguaje-c-introduccion/ // Se ilustran más usos del ciclo for en C++ // 2018, Por http://about.me/carlosgbr // Versión 1 // Compilado en https://www.onlinegdb.com/online_c++_compiler #include <iostream> using namespace std; int main() { //Sumamos únicamente los números pares del 1 al 100 int sumapares = 0; //Prueba el resultado quitando la inicizalización for (int k=0; k <= 100; k+=2) //el contador k tiene incrementos de 2 { sumapares += k; //realizamos la suma de los elementos pares } cout << "Suma total de números pares:" << sumapares << endl; //********************** //Sumamos únicamente los números impares del 1 al 100, utilizamos una //técnica más "popular" para determinar los números impares. int sumaimpares = 0; for (int k=0; k <= 100; k++) //k como un contador clásico k++ { // con el módulo de k%2, podemos determinar si un número es par o impar if ((k%2) != 0) { sumaimpares += k; //realizamos la suma de los elementos impares } } cout << "Suma total de números impares:" << sumaimpares << endl; //********************** //Sumamos TODOS los números del 1 al 100, a modo de comprobación //Utilizamos un contador de decremento para recorrer la lista., lo cual //requiere que modifiquemos el valor inicial y la condición del bucle for. int suma = 0; for (int k=100; k > 0; k--) //k como un contador de decremento k-- { suma += k; //realizamos la suma de los números } cout << "Suma total de números:" << suma << endl; return 0; }
Puedes observar que el código para sumar los números impares es un poco más complejo que el que utilizamos para sumar los pares. Este mismo código también lo podemos utilizar para sumar los números pares, bastará con cambiar la condición de evaluación en la estructura if, conviene también que notes los paréntesis.
((k%2) != 0) te permite identificar los números impares ((k%2) == 0), te permitiría identificar los números pares.
De este modo reafirmamos la noción de que puedes llegar a la respuesta correcta por más de caminos, aunque no es momento de entrar en detalles más avanzados, conviene que empieces a visualizar algunos temas más “avanzados”. Sí, puedes llegar al mismo resultado con diferente código, la principal diferencia será la eficiencia del código.
El código
for (int k=1 ; k <= 100; k+=2) { sumaimpares += k; }dará el mismo resultado que el siguiente código.
for (int k=0; k <= 100; k++) { if ((k%2) != 0) { sumaimpares += k; } }
Por deducción directa (el segundo código tiene más instrucciones) podemos intuir que el segundo ejemplo consumirá más recursos del sistema en donde se ejecute que el primero. Por supuesto hay una respuesta técnica, pero por el momento con que tomes conciencia de esto, es suficiente.
En la última sección del programa, en donde realizamos la suma de los 100 números, en lugar de usar un contador incremental, utilizamos uno decremental, lo cual requiere que modifiquemos el valor inicial, así como la condición (nuevamente, 2 formas de hacer lo mismo)
Bucles for anidados
Así como las sentencias if/else y while se pueden anidar, lo mismo ocurre con las sentencias for. Esta posibilidad toma especial relevancia al momento de recorrer estructuras de datos y matrices.
En este momento solo mostraremos un recorrido doble de bucles for. Cuando tengamos otros elementos del lenguaje podremos retomar el recorrido de matrices.
// cpp_39_for03.cpp // Este programa forma parte del tutorial de introducción al lenguaje C++ // http://a.ehack.info/leguaje-c-introduccion/ // Se ilustran ciclos for anidados // 2018, 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 i, j; for (i = 0; i <= 10; i++) { for (j = 0; j <= i; j++) { cout << "*"; } cout << "\n"; } return 0; }Antes de revisar el código veamos la salida del programa,
Como puedes apreciar, el bucle principal (variable i) ejecuta un ciclo y en cada ciclo añade un salto de línea. Dentro de cada ciclo i, se ejecuta un ciclo for (j) el cual escribe los asteriscos, para determinar el número de asteriscos a escribir toma como base el valor actual de i, creando la figura que se muestra en la imagen. Es importante que trates de comprender claramente lo que ocurre en este bucle anidado, cuando revisemos las matrices será relevante.
Referencias
Fuente Imágenes
- “Todas las demás imágenes de esta sección”: by Nala Systems
Código Fuente
- El código fuente de toda la serie lo puedes descargar en nuestro repositorio en github busca los programas con el nombre del encabezado de cada programa.
- Código de esta sección
Bucle for en C++ by Roberto C. González is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.