Kotlin. Інтервали

Інтервали (діапазони). Оператор .. . Застосування інтервалів в умовах (if), циклах (for), виборі (when). Оператор in. Інтервальні типи IntRange, CharRange, LongRange


Зміст


Пошук на інших ресурсах:

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

 


Споріднені теми