🗒 Задача¶
Напиши программу-калькулятор для банковского приложения (такой функционал бывает на промо экранах). Используя формулу сложных процентов (ее можно загуглить), нужно посчитать размер вклада через 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.
Давай добавим перенос или вынесем в переменную условие
Оригинальный подход, круто, что удалось таким образом решить задачу.
Теперь предлагаю чуть оптимизировать. В Котлин есть экстеншен функция для возведения в степень - посмотри как она работает и давай используем вместо цикла.