Внесена в банк сума дорівнює S, процентна ставка N річних, визначити за допомогою циклу while на скільки років потрібно зробити розміщення щоб отримати суму F.
|
За один рік сума зростає на N%:
current = current + current * N/100 = current * (1 + N / 100.0);
Ділення на 100.0 (а не на 100) важливе: N — ціле або double, і нам потрібне дробове ділення. Якщо написати N / 100 з цілим N, отримаєте 0 при N < 100.
Сума може «перескочити» цільове значення. Наприклад, при ставці 10% вона ніколи не дорівнюватиме рівно 2000 — роки дають 1948.72, а потім одразу 2143.59. Якщо писати !=, цикл ніколи не завершиться.
Якщо N <= 0 і F > S, сума не зростатиме — цикл while (current < F) крутитиметься вічно. Перевірка перед циклом це відсікає.
years++ стоїть усередині циклу. Якщо F <= S, цикл не виконається жодного разу — і years залишиться 0. Це коректно: вкладати нічого не треба.
Якщо потрібно, щоб користувач сам вводив S, N, F:
Console.Write("Початкова сума S: ");
double S = double.Parse(Console.ReadLine());
Console.Write("Річна ставка N (%): ");
double N = double.Parse(Console.ReadLine());
Console.Write("Цільова сума F: ");
double F = double.Parse(Console.ReadLine());
Але для надійності краще використати TryParse, щоб програма не падала на некоректному вводі.Чому TryParse надійніший за Parse.Різниця між ними — як вони поводяться з некоректним вводом. Parse кидає виняток і валить програму, TryParse повертає false і дає вам шанс обробити помилку.
int.TryParse(string s, out int result)
Пробує перетворити рядок. Якщо вдалося — повертає true і кладе результат у result. Якщо ні — повертає false, а result дорівнює 0. Жодних винятків
Console.Write("Початкова сума S: ");
if (!double.TryParse(Console.ReadLine(), out double S))
{
Console.WriteLine("Некоректне число.");
return;
}
Іногда виникає ситуація, коли потрібно вийти з циклу, не дочекавшись його завершення. В цьому випадку ми можемо скористатися оператором break.
Наприклад:
for (int i = 0; i < 9; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
Хоча в умові циклу сказано, що цикл виконуватиметься, поки лічильник i не досягне значення 9, насправді цикл спрацює 5 разів. Оскільки при досягненні лічильником i значення 5, спрацює оператор break, і цикл завершиться. 0 1 2 3 4
Тепер поставимо собі інше завдання. А що якщо ми хочемо, щоб при перевірці цикл не завершувався, а просто пропускав поточну ітерацію. Для цього ми можемо скористатися оператором continue:
for (int i = 0; i < 9; i++)
{
if (i == 5)
continue;
Console.WriteLine(i);
}
У цьому випадку цикл, коли дійде до числа 5, яке не задовольняє умову перевірки, просто пропустить це число і перейде до наступної ітерації: 0 1 2 3 4 6 7 8