Шаг 97.
Основы Kotlin.
Числа. Задания для самостоятельного решения
На этом шаге мы приведем несколько практических заданий с возможными решениями.
Здесь мы предлагаем вам выполнить несколько заданий, направленных на закрепление изученного материала.
Задание 1: сколько осталось пинт
Dragon's Breath разливается из бочки объемом 5 галлонов. Если предположить, что один заказ - это пинта (0,125 галлона), посчитайте остатки Dragon's Breath. Выведите значение остатка в пинтах после продажи 12 пинт.
Раскрыть/скрыть решение и комментарии.
Тут все достаточно просто:
1 бочка = 5 галлонов
1 пинта = 0,125 галлона
12 пинт = 12 * 0,125 галлона
Остаток в бочке = 5 - 12 * 0,125 в галлонах = (5 - 12 * 0,125) / 0,125 в пинтах
Мы поместили эти вычисления в функцию main(). Эту добавку можно увидеть в решении второй задачи.
fun main() {
println("1 Barrel = 5 Gallons. 1 Pint = 0,125 Gallons")
println("12 Pints = ${"%.3f".format(12 * 0.125)} Gallons")
println("Remaining in the barrel = " +
"${"%.3f".format(5 - 12 * 0.125)} Gallons = " +
"${"%.3f".format((5 - 12 * 0.125) / 0.125 )} Pints")

Рис.1. Решение задачи
Результат работы приведен на рисунке 2.

Рис.2. Результат работы приложения
Задание 2: обработка отрицательного баланса
Сейчас игрок может сделать заказ независимо от количества монет. Это не самая выгодная бизнес-модель для таверны Taernyl's Folly. Исправьте это.
Измените код performPurchase(), чтобы определить, возможно ли совершить покупку. Если это невозможно, деньги не должны переходить из рук в руки, а вместо сообщения
"Madrigal buys a Dragon's Breath (shandy) for 5.91" должно выводиться сообщение от трактирщика, что у покупателя недостаточно денег. Чтобы смоделировать несколько заказов,
вызовите несколько раз performPurchase() в функции placeOrder().
Раскрыть/скрыть решение и комментарии.
Приведем текст функции performPurchase().
. . . . .
fun performPurchase(price: Double) {
displayBalance()
val totalPurse = playerGold + (playerSilver / 100.0)
println("Total purse: $totalPurse")
println("Purchasing item for $price")
if ( totalPurse >= price ) {
val remainingBalance = totalPurse - price
println("Remaining balance: ${"%.2f".format(remainingBalance)}")
val remainingGold = remainingBalance.toInt()
val remainingSilver = (remainingBalance % 1 * 100).roundToInt()
playerGold = remainingGold
playerSilver = remainingSilver
}
else {
println("Madrigal speaks: not enough money")
}
displayBalance()
}
. . . . .
Файл с проектом можно взять
здесь.

Рис.3. Измененная функция performPurchase()
Здесь все достаточно просто: вычисляем общую сумму денег, и если ее хватает на напиток, то покупаем его. В противном случае сообщам о нехватке денег. Для получения такого результата, как
на рисунке 4, задайте значение playerGold, равное 4.

Рис.4. Результат работы приложения
Задание 3: драконьи монеты
В королевстве появилась новая монета. Дракоин - это скорость, безопасность и анонимность при расчетах в любой таверне. Предположим, что текущий курс равняется 1,43 золотой монеты за один дракоин. Реализуйте расчеты игрока не в золоте и серебре, а в дракоинах. Цены в таверне по-прежнему будут исчисляться в золоте. Игрок начинает игру с 5 дракоинами. После покупки одного Dragon's Breath по цене 5,91 золотых монет у игрока должно остаться 0,8671 дракоина.
Раскрыть/скрыть решение и комментарии.
Определим переменную playerDracoin, придав ей значение 5. Обнулим количество золотых и серебряных монет. Таким образом, у посетителя есть только дракоины. Переводим их
в золотые, результат помещаем в totalPurse. После покупки напитка переводим оставшуюся сумму remainingBalanceв дракоины:
var playerDracoin = 5 // 1 Dracoin = 1,43 Gold
. . . .
val totalPurse = playerGold + (playerSilver / 100.0) + (playerDracoin * 1.43)
. . . .
println("Remaining balance: ${"%.4".format(remainingBalance / 1.43)}")
Файл с проектом можно взять
здесь.

Рис.5. Внесенные изменения в функцию
Результат работы приложения приведен на рисунке 6.

Рис.6. Результат работы приложения
Со следующего шага мы начнем рассматривать стандартные функции.
Предыдущий шаг
Содержание
Следующий шаг