DMarlon Studio

Lección 9 · 9 de 20

for y for de rango · C++

Cuente con el for clásico de C++, recorra colecciones con el for de rango y anide bucles para construir una tabla.

C++ · for y for de rango en DMarlon Studio: el código del ejemplo y su salida en la terminal

El `for` clásico reúne tres partes entre paréntesis: el inicio (int i = 1), la condición (i <= 5) y el paso (i++). Es el bucle para contar, aquí la tabla del 7. La variable i solo existe dentro del bucle.

El paso puede ser cualquiera: n += 2 recorre los números pares hasta 100, que se van acumulando en sum. Si el cuerpo es una sola instrucción, no hacen falta llaves.

El `for` de rango, for (double t : temps), recorre todos los elementos de una colección sin índices: en cada vuelta, t toma un valor. temps es un array de tamaño fijo, heredado de C; en la próxima lección conocerá std::vector, mucho más flexible.

Una std::string también es una colección, de caracteres: el bucle mira cada char de programming y cuenta sus vocales.

Los bucles anidados van uno dentro de otro: por cada fila, el bucle interior recorre las cuatro columnas, y el '\t' las alinea en forma de tabla.

Código · main.cpp

#include <iostream>#include <string>int main() {    // for (start; condition; step): the classic counting loop.    for (int i = 1; i <= 5; i++) {        std::cout << "7 x " << i << " = " << 7 * i << '\n';    }    // Adding up inside a loop, in steps of 2.    int sum = 0;    for (int n = 2; n <= 100; n += 2) sum += n;    std::cout << "2 + 4 + ... + 100 = " << sum << '\n';    // Range-based for: goes through every element of a collection.    double temps[] = {18.5, 21.0, 24.5, 19.0};    double total = 0;    for (double t : temps) total += t;    std::cout << "Average temperature: " << total / 4 << '\n';    // A string is a collection of characters.    int vowels = 0;    for (char c : std::string("programming"))        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') vowels++;    std::cout << "Vowels in \"programming\": " << vowels << '\n';    // Nested loops: a small multiplication grid.    for (int row = 1; row <= 3; row++) {        for (int col = 1; col <= 4; col++) std::cout << row * col << '\t';        std::cout << '\n';    }    return 0;}

Salida · c++ -std=c++17 main.cpp -o main && ./main

7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
2 + 4 + ... + 100 = 2550
Average temperature: 20.75
Vowels in "programming": 3
1	2	3	4	
2	4	6	8	
3	6	9	12

Para recordar

  • for (inicio; condición; paso) sirve para contar.
  • El paso puede ser i++, i--, i += 2...
  • for (tipo x : colección) recorre cada elemento.
  • Una cadena se recorre carácter a carácter.
  • Un bucle dentro de otro recorre filas y columnas.

Ejercicio

Escriba la tabla de multiplicar completa del 1 al 9 con dos for anidados y, con un for de rango sobre un array {12, 7, 30, 5}, busque el mayor de esos números.