Треки
/
C++
C++
/
Вправи
/
Відсотки - це цікаво
Відсотки - це цікаво

Відсотки - це цікаво

Навчальна вправа

Вступ

Цикли

Цикли потрібні, щоб багаторазово виконувати одну й ту саму логіку. Два найпоширеніші типи - це 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
Note

Зазвичай логіку циклу легше зрозуміти, коли використання break і continue зведено до мінімуму або й зовсім прибрано. Обидва ключові слова пропускають певні ділянки коду, і через це часто важче простежити за його перебігом.

Вказівки

У цій вправі ми працюватимемо з ощадними рахунками. Щороку баланс ощадного рахунку оновлюється залежно від його процентної ставки. Процентна ставка, яку надає банк, залежить від суми грошей на рахунку (його балансу):

  • 3.213% для балансу, меншого за 0 доларів (баланс стає ще відʼємнішим).
  • 0.5% для балансу, більшого або рівного 0 доларів і меншого за 1000 доларів.
  • 1.621% для балансу, більшого або рівного 1000 доларів і меншого за 5000 доларів.
  • 2.475% для балансу, більшого або рівного 5000 доларів.

На нас чекають чотири завдання, кожне з яких стосуватиметься балансу та його процентної ставки.

1. Обчисліть процентну ставку

Реалізуйте функцію interest_rate, щоб обчислити процентну ставку для вказаного балансу:

interest_rate(200.75);
// => 0.5

2. Обчисліть проценти

Реалізуйте функцію yearly_interest, щоб обчислити проценти для вказаного балансу:

yearly_interest(200.75):
// => 1.003750

3. Обчисліть річне оновлення балансу

Реалізуйте функцію annual_balance_update, щоб обчислити річне оновлення балансу з урахуванням процентної ставки:

annual_balance_update(200.75);
// => 201.75375

4. Обчисліть кількість років до досягнення бажаного балансу

Реалізуйте функцію years_until_desired_balance, щоб обчислити мінімальну кількість років, потрібних для досягнення бажаного балансу, з урахуванням того, що щороку до балансу додаються проценти. Це означає, що баланс після першого року дорівнює початковому балансу плюс проценти за початковий баланс. Баланс після другого року дорівнює балансу після першого року плюс проценти за баланс після першого року. І так далі, доки баланс за поточний рік не стане більшим або рівним цільовому балансу.

double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14

Зауважте, що повернене значення має тип int.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C++ Exercism

Час розпочати Відсотки - це цікаво?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C++, а також 19 концепцій100 вправ та справжнє наставництво від людей, і все це безкоштовно.