Интервалы (диапазоны). Оператор .. . Применение интервалов в условиях (if), циклах (for), выборе (when). Оператор in. Интервальные типы IntRange, CharRange, LongRange
Содержание
- 1. Интервалы (диапазоны). Синтаксис объявления. Оператор . .
- 2. Создание переменных, которые есть интервалами. Присваивание интервала ссылке
- 3. Интервальные типы CharRange, IntRange, LongRange. Объявление и использование переменной интервального типа
- 4. Оператор in. Сочетание оператора in с интервалами
- 5. Использование интервалов в операторе if. Примеры
- 6. Использование интервалов в операторе when
- 7. Использование интервалов в операторе цикла for
- Связанные темы
Поиск на других ресурсах:
1. Интервалы (диапазоны). Синтаксис объявления. Оператор ..
Интервалы или диапазоны позволяют задавать последовательность возможных значений между некоторым начальным и конечным значением. Интервалы определяются с помощью оператора .. и в общем случае имеют следующий вид
begin_value .. end_value
здесь
- begin_value – значение, определяющее начало диапазона;
- end_value – конечное значение диапазона.
⇑
2. Создание переменных, которые есть интервалами. Присваивание интервала ссылке
Чтобы создать только читаему переменную, которая является интервалом, нужно использовать следующий синтаксис
val varName = begin_value .. end_value
Чтобы создать переменную интервал, которая может многократно изменяться в программе (mutable переменная), нужно использовать следующую форму записи
var varName = begin_value .. end_value
Если переменная объявлена как интервал, то ее значение может быть переопределено другим интервалом того же интервального типа.
⇑
3. Интервальные типы CharRange, IntRange, LongRange. Объявление и использование переменной интервального типа
В языке Kotlin поддерживаются три интервальных типа CharRange, IntRange, LongRange, которые определяют диапазон значений соответственно для типов char, int, long.
Допускается объявлять переменную интервального типа а затем присваивать ей соответствующие интервалы.
Пример.
// Объявление переменных интервальных типов // 1. Диапазон значений типа int var seconds : IntRange seconds = 0..59 val miliseconds : IntRange = 0..100 // 2. Диапазон значений типа long var bigNumbers : LongRange = 0..1_000_000_000_000_000 // переопределение диапазона типа long bigNumbers = 0..1_000L // 3. Диапазон значений типа char var chars : CharRange // символьный тип chars = 'a'..'z' // переопределение диапазона типа char chars = 'A'..'Z' // так нельзя - ошибка компиляции, несовпадение типов CharRange и IntRange //chars = 1..10
⇑
4. Оператор in. Сочетание оператора in с интервалами
Для того, чтобы определить, входит ли некоторое значение в интервал, используется оператор in. Синтаксис проверки вхождения значения в интервал следующий
valueName in begin_value .. end_value
здесь
- valueName – переменная или значение, которое проверяется на принадлежность интервалу в пределах от begin_value до end_value.
Результатом оператора in является значение true (если переменная входит в интервал) или false (переменная вне интервала).
⇑
5. Использование интервалов в операторе if. Примеры
5.1. Определение принадлежности дня недели
Задача. Задан номер дня недели (1..7). Определить, какой это день: рабочий или выходной.
Решение.
fun main(args:Array<String>) { // Интервалы, оператор .. // 1. Объявить переменные val day : Int // 2. Ввести день недели print("day = ") day = readLine().toString().toInt() // 3. Вычисление if (day in 1..5) println("Workday.") else if (day in 6..7) println("Day off.") else println("Incorrect input.") }
Тестовый пример
day = 3 Workday.
⇑
5.2. Определение возрастной категории человека
Задача. Разработать программу, которая запрашивает имя пользователя и его возраст и определяет к какой возрастной категории он относится:
- от 1 до 10 лет – ребенок;
- от 11 до 15 лет – подросток;
- от 16 до 20 лет – юноша;
- от 21 до 30 лет – молодой человек;
- после 31 года – взрослый человек.
Решение.
fun main(args:Array<String>) { // Интервалы, оператор .. // 1. Объявить переменные val name : String val age : Int // 2. Ввести данные print("name = ") name = readLine().toString() print("age = ") age = readLine().toString().toInt() // 3. Проверка, корректен ли ввод if (age<=0) println("Incorrect input") // 4. Вычисления if (age in 1..10) println("Child.") // Ребенок else if (age in 11..15) println("Teenager") // Подросток else if (age in 16..20) println("Younker (young woman)") // Юноша else if (age in 21..30) println("Young person") // Молодой человек else println("Adult") // Взрослый человек }
Тестовый пример
name = Ihor age = 49 Adult
⇑
6. Использование интервалов в операторе when
6.1. Определение времени года по номеру месяца
Задача. Используя оператор when и интервалы разработать программу, которая по номеру месяца (1..12) определяет название времени года, к которому он принадлежит.
Решение.
fun main(args:Array<String>) { // Интервалы, операторы in, .. // 1. Объявить переменные val month : Int // 2. Ввести данные print("month = ") month = readLine().toString().toInt() // 3. Вычисление when (month) { in 1..2, 12 -> println("Winter") in 3..5 -> println("Spring") in 6..8 -> println("Summer") in 9..11 -> println("Autumn") else -> println("Incorrect input.") } }
Тестовый пример
month = 8 Summer
⇑
6.2. Определение знака зодиака
Задача. Задан номер дня и номер месяца, которые определяют дату рождения человека. Разработать программу определяющую к какому знаку зодиака принадлежит дата рождения человека:
- 20.01 — 18.02 – Водолей
- 19.02 — 20.03 – Рыба
- 21.03 — 19.04 – Овен
- 20.04 — 20.05 – Телец
- 21.05 — 21.06 – Близнецы
- 22.06 — 22.07 – Рак
- 23.07 — 22.08 – Лев
- 23.08 — 22.09 – Дева
- 23.09 — 22.10 – Весы
- 23.10 — 22.11 – Скорпион
- 23.11 — 21.12 – Стрелец
- 22.12 — 19.01 – Козерог
В программе считать, что год невисокосный.
Решение.
fun main(args:Array<String>) { // Интервалы, оператори in, .. // 1. Объявить переменные val day : Int val month : Int // 2. Ввести данные print("day = ") day = readLine().toString().toInt() print("month = ") month = readLine().toString().toInt() // 3. Вычисление when { (month==1)&&(day in 1..19) || (month==12)&&(day in 22..31) -> println("Козерог") (month==1)&&(day in 20..31) || (month==2)&&(day in 1..18) -> println("Водолей") (month==2)&&(day in 19..28) || (month==3)&&(day in 1..20) -> println("Рыба") (month==3)&&(day in 21..31) || (month==4)&&(day in 1..19) -> println("Овен") (month==4)&&(day in 20..30) || (month==5)&&(day in 1..20) -> println("Телец") (month==5)&&(day in 21..31) || (month==6)&&(day in 1..21) -> println("Близнецы") (month==6)&&(day in 22..30) || (month==7)&&(day in 1..22) -> println("Рак") (month==7)&&(day in 23..31) || (month==8)&&(day in 1..22) -> println("Лев") (month==8)&&(day in 23..31) || (month==9)&&(day in 1..22) -> println("Дева") (month==9)&&(day in 23..30) || (month==10)&&(day in 1..22) -> println("Весы") (month==10)&&(day in 23..31) || (month==11)&&(day in 1..22) -> println("Скорпион") (month==11)&&(day in 23..30) || (month==12)&&(day in 1..21) -> println("Стрелец") else -> println("Incorrect input.") } }
Тестовый пример
day = 14 month = 1 Козерог
⇑
7. Использование интервалов в операторе цикла for
7.1. Конвертировать фунты в килограммы
Задача. Напечатать таблицу перевода фунтов в килограммы для значений фунтов от 1 до 10 (1 фунт = 453 грамма).
Решение.
fun main(args:Array<String>) { // Интервалы, операторы in, .. // Напечатать таблицу соответствия 1 фунт = 0.453 кг // 1. Объявить переменные var lb : Int var kg : Double // 2. Вывод таблицы for (lb in 1..10) { kg = lb * 0.453 println("lb.: " + lb + " => " + kg + " kg.") } }
Результат выполнения программы
lb.: 1 => 0.453 kg. lb.: 2 => 0.906 kg. lb.: 3 => 1.359 kg. lb.: 4 => 1.812 kg. lb.: 5 => 2.265 kg. lb.: 6 => 2.718 kg. lb.: 7 => 3.1710000000000003 kg. lb.: 8 => 3.624 kg. lb.: 9 => 4.077 kg. lb.: 10 => 4.53 kg.
⇑
7.2. Вычисление среднего арифметического чисел
Задача. Дано натуральное число n и вещественные числа a1, a2, …, an. Определить среднее арифметическое этих чисел. В программе массивы не использовать.
Решение.
fun main(args:Array<String>) { // Интервалы, операторы in, .. // Определить среднее арифметическое последовательности чисел // 1. Объявить переменные var avg : Double = 0.0 val n : Int var a : Double // 2. Ввести n print("n = ") n = readLine().toString().toInt() // 3. Цикл вычисления, используется интервал 1..n for (i : Int in 1..n) { // ввести число print("=> ") a = readLine().toString().toDouble() // прибавить к общей сумме avg += a } // 4. Вывести среднее арифметическое avg /= n println("average = " + avg) }
Тестовый пример
n = 5 => 1.2 => 1.4 => 1.6 => 1.7 => 1.1 average = 1.4
⇑
Связанные темы
- Оператор условного перехода if-else. Виды операторов условного перехода
- Вложенные операторы условного перехода. Оператор условия if как составляющая других операторов
- Оператор when
⇑