Цикли потрібні, щоб багаторазово виконувати одну й ту саму логіку.
Два найпоширеніші типи - це while loop (невизначене повторення) та for loop (визначене, або пораховане повторення).
Є також цикл for each, з яким ми познайомимося в одному з наступних концептів.
for loop складається із заголовка та блоку коду, який містить тіло циклу, оточене фігурними дужками.
Заголовок складається з 3 компонентів, розділених крапками з комою ;: інструкція ініціалізації, умова та ще один вираз.
Кожен із них може бути порожнім.
for (init_statement; condition; expression) {
some_statement;
}
boolean і визначає, коли цикл має зупинитися.
Код усередині циклу виконуватиметься, доки ця умова обчислюється в true.
Щойно цей вираз обчислиться в false, цикл більше не виконає жодної ітерації.while loop виконує своє тіло, доки перевірка його умови дорівнює true.
Наведений нижче фрагмент коду показує, як перетворити for на while loop.
init_statement;
while(condition) {
some_statement;
expression;
}
Працюючи з циклами, часто потрібно додати 1 або відняти 1 від змінної-лічильника, яка відстежує ітерації.
Це настільки поширена дія, що для інкременту та декременту є спеціальні оператори: ++ і --.
Вони бувають у префіксній та постфіксній формі. Префіксна форма змінює змінну до її використання в інструкції, а постфіксна - після. У більшості випадків нам, найімовірніше, знадобиться саме префіксна форма.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
for: прикладКомпонент ініціалізації зазвичай задає змінну-лічильник, умова перевіряє, чи слід продовжувати цикл чи зупиняти його, а завершальний компонент зазвичай збільшує лічильник у кінці кожного повторення.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Цей цикл додає числа від 1 до 9 (включно з 9).
break і continue
Усередині тіла циклу можна використати ключове слово break, щоб повністю зупинити виконання циклу:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
На відміну від нього, ключове слово continue зупиняє лише виконання поточної ітерації та переходить до наступної:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Зазвичай логіку циклу легше зрозуміти, коли використання break і continue зведено до мінімуму або й зовсім прибрано.
Обидва ключові слова пропускають певні ділянки коду, і через це часто важче простежити за його перебігом.
У цій вправі ми працюватимемо з ощадними рахунками. Щороку баланс ощадного рахунку оновлюється залежно від його процентної ставки. Процентна ставка, яку надає банк, залежить від суми грошей на рахунку (його балансу):
0 доларів (баланс стає ще відʼємнішим).0 доларів і меншого за 1000 доларів.1000 доларів і меншого за 5000 доларів.5000 доларів.На нас чекають чотири завдання, кожне з яких стосуватиметься балансу та його процентної ставки.
Реалізуйте функцію interest_rate, щоб обчислити процентну ставку для вказаного балансу:
interest_rate(200.75);
// => 0.5
Реалізуйте функцію yearly_interest, щоб обчислити проценти для вказаного балансу:
yearly_interest(200.75):
// => 1.003750
Реалізуйте функцію annual_balance_update, щоб обчислити річне оновлення балансу з урахуванням процентної ставки:
annual_balance_update(200.75);
// => 201.75375
Реалізуйте функцію years_until_desired_balance, щоб обчислити мінімальну кількість років, потрібних для досягнення бажаного балансу, з урахуванням того, що щороку до балансу додаються проценти.
Це означає, що баланс після першого року дорівнює початковому балансу плюс проценти за початковий баланс.
Баланс після другого року дорівнює балансу після першого року плюс проценти за баланс після першого року.
І так далі, доки баланс за поточний рік не стане більшим або рівним цільовому балансу.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Зауважте, що повернене значення має тип int.
Зареєструйтеся на Exercism, щоб вивчати й опановувати C++, а також 19 концепцій100 вправ та справжнє наставництво від людей, і все це безкоштовно.