I cicli servono a eseguire ripetutamente una certa logica.
I due tipi più comuni sono il while loop (ciclo indefinito) e il for loop (ciclo definito, o contato).
Esiste anche il ciclo for each, che incontreremo più avanti, in un altro concetto.
Il for loop è composto da un'intestazione e da un blocco di codice che contiene il corpo del ciclo racchiuso tra parentesi graffe.
L'intestazione è composta da 3 componenti separate da punti e virgola ;: l'istruzione di inizializzazione, la condizione e un'altra espressione.
Ognuna di queste può essere vuota.
for (init_statement; condition; expression) {
some_statement;
}
boolean e controlla quando il ciclo deve fermarsi.
Il codice all'interno del ciclo verrà eseguito finché questa condizione vale true.
Non appena questa espressione vale false, il ciclo non eseguirà più altre iterazioni.Il while loop esegue il suo corpo finché il controllo della condition vale true.
Il frammento di codice qui sotto mostra come trasformare un for in un while loop.
init_statement;
while(condition) {
some_statement;
expression;
}
Quando si lavora con i cicli, spesso serve aggiungere o sottrarre 1 a una variabile contatore che tiene traccia delle iterazioni.
È così comune che le operazioni di incremento e decremento hanno operatori dedicati: ++ e --.
Esistono in una forma prefissa e in una postfissa. La forma prefissa modifica la variabile prima del suo utilizzo nell'istruzione, quella postfissa dopo. Nella maggior parte dei casi probabilmente ti serve la versione prefissa.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
La componente init di solito inizializza una variabile contatore, la condizione controlla se il ciclo deve continuare o fermarsi e la componente post di solito incrementa il contatore alla fine di ogni ripetizione.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Questo ciclo somma i numeri da 1 a 9 (9 incluso).
All'interno del corpo di un ciclo, puoi usare la parola chiave break per interrompere del tutto l'esecuzione del ciclo:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
Al contrario, la parola chiave continue interrompe solo l'esecuzione dell'iterazione corrente e passa a quella successiva:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Di solito è più facile capire la logica del ciclo quando l'uso di break e continue è ridotto al minimo o evitato del tutto.
Entrambe le parole chiave saltano alcune sezioni del codice e spesso rendono più difficile seguire il flusso.
In questo esercizio lavorerai con i conti di risparmio. Ogni anno, il saldo del tuo conto di risparmio viene aggiornato in base al suo tasso di interesse. Il tasso di interesse che la tua banca ti applica dipende dalla somma di denaro presente sul conto (il suo saldo):
0 dollari (il saldo diventa ancora più negativo).0 dollari e inferiore a 1000 dollari.1000 dollari e inferiore a 5000 dollari.5000 dollari.Hai quattro compiti, ognuno dei quali riguarda il saldo e il suo tasso di interesse.
Implementa la funzione interest_rate per calcolare il tasso di interesse in base al saldo indicato:
interest_rate(200.75);
// => 0.5
Implementa la funzione yearly_interest per calcolare l'interesse in base al saldo indicato:
yearly_interest(200.75):
// => 1.003750
Implementa la funzione annual_balance_update per calcolare l'aggiornamento annuale del saldo, tenendo conto del tasso di interesse:
annual_balance_update(200.75);
// => 201.75375
Implementa la funzione years_until_desired_balance per calcolare il numero minimo di anni necessari a raggiungere il saldo desiderato, tenendo conto che ogni anno l'interesse viene aggiunto al saldo.
Questo significa che il saldo dopo un anno è: saldo iniziale + interesse sul saldo iniziale.
Il saldo dopo il secondo anno è il saldo dopo un anno + l'interesse sul saldo dopo un anno.
E così via, finché il saldo dell'anno corrente non è maggiore o uguale al saldo obiettivo.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Nota che il valore restituito è un int.
Iscriviti a Exercism per imparare e padroneggiare C++ con 19 concetti100 esercizi e il mentoring di persone reali, tutto gratis.