Українська
Практика
Приклад 1. Високосний рік
Для року 1–9999 визначити високосність за григоріанським правилом: кратність 400 або кратність 4 без кратності 100.
kotlin
fun main() {
print("Рік: ")
val year = readlnOrNull()?.toIntOrNull()
if (year == null || year !in 1..9999) {
println("Некоректний рік")
return
}
val leap = year % 400 == 0 ||
(year % 4 == 0 && year % 100 != 0)
println(if (leap) "Високосний" else "Звичайний")
}Для 2000 – Високосний, для 1900 – Звичайний. Модель поширює григоріанське правило на весь заданий діапазон і не моделює історичні переходи календарів. Перевірте також 2024, 2026, 0, текст та кінець вводу.
Приклад 2. Навчальний банкомат
Сума 10–100000 грн має бути кратною 10. Доступні необмежені купюри 100, 50, 20, 10 грн. Для цього набору номіналів послідовний вибір найбільшої купюри дає мінімальну кількість; для довільного набору це не гарантується.
kotlin
fun main() {
print("Сума: ")
val amount = readlnOrNull()?.toIntOrNull()
if (amount == null || amount !in 10..100000 ||
amount % 10 != 0
) {
println("Некоректна сума")
return
}
var rest = amount
var total = 0
for (index in 0..<4) {
val value = when (index) {
0 -> 100
1 -> 50
2 -> 20
else -> 10
}
val count = rest / value
rest %= value
total += count
println("$value грн: $count")
}
println("Купюр: $total; залишок: $rest")
}Для 280 грн отримаємо 2 купюри по 100, 1 по 50, 1 по 20 і 1 по 10; разом 5, залишок 0. Окремо перевірте мінімальну суму, некратну 10 та верхню межу. Не використовуйте цей спрощений алгоритм як модель реального банкомата з обмеженою кількістю купюр.
Приклад 3. Середня температура потоку
Читати по одному рядку до stop або кінця потоку. Приймати не більше 1000 скінченних температур від −50 до 60 °C; неправильний рядок повідомити й пропустити.
kotlin
import java.util.Locale
fun main() {
var sum = 0.0
var count = 0
var rejected = 0
while (count < 1000) {
val text = readlnOrNull() ?: break
if (text == "stop") break
val value = text.toDoubleOrNull()
if (value == null || !value.isFinite() ||
value !in -50.0..60.0
) {
rejected++
println("Рядок відхилено")
continue
}
sum += value
count++
}
if (count == 0) {
println("Немає прийнятих даних")
} else {
val locale = Locale.forLanguageTag("uk-UA")
println(String.format(locale, "Середня: %.2f", sum / count))
}
println("Прийнято: $count; відхилено: $rejected")
}Для 10, bad, 20, stop середня дорівнює 15,00, прийнято 2, відхилено 1. Для порожнього потоку середня не друкується. Перевірка NaN потрібна окремо, бо результат розбору рядка сам по собі не доводить придатності числа до статистики.