Перейти к содержанию

🗒 Задача

Напиши программу-калькулятор для банковского приложения (такой функционал бывает на промо экранах). Используя формулу сложных процентов (ее можно загуглить), нужно посчитать размер вклада через 20 лет с такими условиями:

  • клиент ввел в приложении сумму 70_000 рублей (считать ее известной заранее и проинициализировать переменную);

  • процентная ставка 16,7% (проценты начисляются в конце года);

  • подсчитать размер вклада через 20 лет;

– Результат должен быть дробным числом с 3 знаками после разделителя; – Ответ должен получиться таким 1536438.428.

❌ Ошибки

  • не объявляют и инициализируют все 3 переменные из ТЗ – для гибкости и поддержания программы это надо соблюдать

  • для степени используют цикл

✏️ Комментарии

1. Результат не соответствует ТЗ** (нужно вывести размер вклада через 20 лет)
2. Вместо цикла** рекомендую изучить еще раз формулу и использовать функцию возведения в степень `pow()`
Формула верная, результат тоже. Давай теперь попробуем в одной строке прописать всю формулу в качестве оптимизации
Согласно ТЗ процентная ставка равна 16,7. Соответственно этими вводными данными и следует инициализировать программу. Нам нужно думать о поддержании и расширении программы, чтобы в любой момент можно было поменять только исходное значение. И не производить дополнительных манипуляций в уме.
Оригинальное, но не корректное округление.
1536438.4284
В данном случае сработало, потому что четвертая цифра после запятой 4, и при округлении отбрасывается. Но если бы была 5 и выше - 8 должна была бы стать 9.
Лучше использовать format:
println("%.3f".format(result))
решение рабочее, но двойная операция выглядит не очень.
попробуй посмотреть в сторону форматирования строки с помощью String.format()
для всех объявленных переменных нужны какие-то релевантные названия. иначе сложно ориентироваться в коде, особенно, если видишь его впервые. или спустя какое-то время
лишние отступы и остался комментированный код
в данном случае, чтобы не заниматься лишними вычислениями, лучше посмотреть в сторону String.format() для нужного вывода количества знаков после запятой
Предлагаю не пренебрегать инструментами Котлин и переделать `Math.pow()` на соответствующий экстеншен.
Да, код корректный. Но давай чуть улучшим.
Строки слишком длинные (>120 символов), глазу труднее в них ориентироваться. Часто в компаниях вводят правила форматирования, а также специальные утилиты, которые следят за соблюдением правил.

Вот например такая утилита Detekt для Kotlin запрещает по-умолчанию строки длиннее 120 символов: https://detekt.dev/docs/rules/formatting/#maximumlinelength.
Давай добавим перенос или вынесем в переменную условие
Оригинальный подход, круто, что удалось таким образом решить задачу.
Теперь предлагаю чуть оптимизировать. В Котлин есть экстеншен функция для возведения в степень - посмотри как она работает и давай используем вместо цикла.

🧾 Решение

import kotlin.math.pow

fun main() {
    val deposit = 70_000.0
    val rate = 16.7
    val longDeposit = 20
    val baseRate = 1.0
    val percentageBase = 100.0
    val sum = deposit * (baseRate + rate / percentageBase).pow(longDeposit)

    println("%.3f".format(sum))
}