Los bucles sirven para ejecutar una misma lógica de forma repetida.
Los dos tipos más comunes son el while loop (bucle indefinido) y el for loop (bucle definido o contado).
También existe el bucle for each, que aparecerá en un concepto posterior.
El for loop consta de una cabecera y un bloque de código que contiene el cuerpo del bucle encerrado entre llaves.
La cabecera consta de 3 componentes separados por puntos y coma ;: la instrucción de inicialización, la condición y otra expresión.
Cualquiera de ellos puede estar vacío.
for (init_statement; condition; expression) {
some_statement;
}
boolean y que controle cuándo debe detenerse el bucle.
El código que hay dentro del bucle se ejecutará mientras esta condición se evalúe como true.
En cuanto esta expresión se evalúe como false, no se ejecutará ninguna iteración más del bucle.El while loop ejecuta su cuerpo mientras su comprobación de la condition sea true.
El fragmento de código siguiente muestra cómo transformar un for en un while loop.
init_statement;
while(condition) {
some_statement;
expression;
}
Cuando se trabaja con bucles, a menudo hay que sumar o restar 1 a una variable contador que lleva la cuenta de las iteraciones.
Esto es tan habitual que las acciones de incremento y decremento tienen operadores propios: ++ y --.
Existen en una forma prefija y una forma postfija. La forma prefija modifica la variable antes de que se use en la instrucción, y la postfija, después. Lo más probable es que la mayoría de las veces quieras la versión prefija.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
El componente de inicialización normalmente prepara una variable contador, la condición comprueba si el bucle debe continuar o detenerse, y el componente de incremento normalmente incrementa el contador al final de cada repetición.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Este bucle sumará los números del 1 al 9 (incluido el 9).
Dentro del cuerpo de un bucle, puedes usar la palabra clave break para detener por completo la ejecución del bucle:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
En cambio, la palabra clave continue solo detiene la ejecución de la iteración actual y continúa con la siguiente:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Normalmente es más fácil entender la lógica del bucle cuando se minimiza o se evita por completo el uso de break y continue.
Ambas palabras clave se saltan ciertas secciones del código y a menudo hacen que sea más difícil seguirlo.
En este ejercicio vas a trabajar con cuentas de ahorros. Cada año, el saldo de tu cuenta de ahorros se actualiza según su tipo de interés. El tipo de interés que te da tu banco depende de la cantidad de dinero que haya en tu cuenta (su saldo):
0 dólares (el saldo se vuelve más negativo).0 dólares y menor que 1000 dólares.1000 dólares y menor que 5000 dólares.5000 dólares.Tienes cuatro tareas, y cada una de ellas trabajará con el saldo y su tipo de interés.
Implementa la función interest_rate para calcular el tipo de interés a partir del saldo especificado:
interest_rate(200.75);
// => 0.5
Implementa la función yearly_interest para calcular el interés a partir del saldo especificado:
yearly_interest(200.75):
// => 1.003750
Implementa la función annual_balance_update para calcular la actualización anual del saldo, teniendo en cuenta el tipo de interés:
annual_balance_update(200.75);
// => 201.75375
Implementa la función years_until_desired_balance para calcular el número mínimo de años necesarios para alcanzar el saldo deseado, teniendo en cuenta que cada año se suma el interés al saldo.
Esto significa que el saldo después de un año es: saldo inicial + interés del saldo inicial.
El saldo después del segundo año es el saldo después de un año + el interés del saldo después de un año.
Y así sucesivamente, hasta que el saldo del año actual sea mayor o igual que el saldo objetivo.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Ten en cuenta que el valor devuelto es un int.
Regístrate en Exercism para aprender y dominar C++ con 19 conceptos100 ejercicios y mentoría humana real, todo gratis.