Kotlin. Цикли. Основні поняття. Цикли while, do-while

Цикли. Основні поняття. Цикли while, do-while. Приклади розв’язку задач


Зміст


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

1. Поняття циклу

Часто у програмах на мові Kotlin потрібно виконувати багатократне повторення одного або декількох операторів. Такий процес повторення називається циклічним процесом або циклом. Під час виконання циклу, фрагмент коду, що визначає ітерацію циклу, виконується багатократно. Кількість виконуваних ітерацій в циклі залежить від виконання (не виконання) деякої умови.

Як і будь-яка інша мова, мова Kotlin має зручні засоби організації циклічного процесу. До цих засобів відносяться три види операторів циклу:

  • оператор циклу while. Цей оператор використовується у випадку, якщо потрібно щоб умова виконання циклу слідувала перед ітерацією;
  • оператор циклу do-while. Забезпечує реалізацію циклічного процесу, в якому першим йде виконання ітерації циклу, а вже потім перевірка умови на можливість виконання наступної ітерації;
  • оператор for. Цей оператор є аналогом циклу for-each у мовах Java, C#. Він забезпечує обхід елементів колекції.

 

2. Цикл while. Загальна форма

Оператор циклу while ще називають оператором циклу з передумовою. Загальна форма оператору циклу while наступна:

while (condition)
{
  // Statements
  // ...
}

тут

  • condition – умовний вираз, що визначає необхідність виконання тіла циклу;
  • Statements – одна або декілька інструкцій (операторів), що виконуються в блоці фігурних дужок { }. Якщо потрібно виконати один оператор, то фігурні дужки можна опустити.

В операторі while спочатку відбувається перевірка умовного виразу condition. Якщо значення виразу condition рівне true, то виконуються оператори в фігурних дужках. В противному випадку виконання оператора циклу while припиняється і управління передається наступному за ним оператору.

 

3. Приклади розв’язку задач з використанням циклу while
3.1. Формування ряду чисел згідно з заданою умовою

Умова задачі. Надрукувати ті натуральні числа, квадрат яких не перевищує значення n.

Розв’язок.

fun main(args:Array<String>)
{
  // 1. Оголосити змінні
  var i:Int = 1
  var n:Int

  // 2. Ввід значення n
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Цикл обчислення значень чисел
  while (i*i < n)
  {
    print(i.toString()+" ")
    i = i+1
  }
}

Тестовий приклад

n = 150
1 2 3 4 5 6 7 8 9 10 11 12

 

3.2. Обчислення суми ряду чисел

Умова задачі.

Використовуючи цикл while обчислити суму чисел послідовності, яка задана формулою

2 + 5 + ... + 3*n-1

де значення n задається з клавіатури.

Наприклад, для n = 5 потрібно обчислити суму

s = 2 + 5 + 8 + 11 + 14

 

Розв’язок.

fun main(args:Array<String>)
{
  // Обчислення суми. Цикл while
  // 1. Оголосити змінні
  var i:Int
  var n:Int
  var s:Int

  // 2. Ввід значення n
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Цикл обчислення суми
  s = 0
  i = 1
  while (i <= n)
  {
    s += 3*i-1
    i = i+1
  }

  // 4. Вивід результату
  println("s = " + s)
}

Тестовий приклад

n = 8
s = 100

 

3.3. Визначення максимальної цифри у цілому числі

Умова задачі. Дано натуральне число n. Визначити максимальну цифру в цьому числі.

Розв’язок.

fun main(args:Array<String>)
{
  // Обчислення максимальної цифри числа
  // 1. Оголосити змінні
  var i:Int
  var n:Int
  var maxNumber:Int

  // 2. Ввід числа
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Цикл визначення цифри
  maxNumber = 0
  i = n
  while (i>0)
  {
    if (maxNumber<i%10)
      maxNumber = i%10
    i = i / 10
  }

  // 4. Вивід результату
  println("maxNumber = " + maxNumber)
}

Тестовий приклад

n = 452723
maxNumber = 7

 

4. Цикл do-while. Загальна форма

Цикл do-while ще називається циклом з постумовою. Загальна форма оператора циклу do-while має такий вигляд:

do
{
  // Statements
  // ...
} while (condition)

тут

  • Statements – один або декілька операторів, які виконуються в циклі;
  • condition – умовний вираз, що визначає необхідність виконання наступної ітерації циклу.

Цикл do-while працює наступним чином. Спочатку виконується тіло циклу, що взяте у фігурні дужки { }. Тіло циклу може містити один або декілька операторів. Потім перевіряється значення умовного виразу condition. Якщо значення умовного виразу рівне true, то відбувається виконання наступної ітерації циклу. В противному випадку відбувається завершення виконання оператора do-while.

 

5. Приклади розв’язку задач з використанням циклу do-while
5.1. Обчислення суми послідовності чисел

Умова задачі. Дана непуста послідовність чисел, яка завершується нулем. Обчислити суму всіх чисел послідовності.

Розв’язок.

Для розв’язку подібних задач, де спочатку потрібно отримати значення для перевірки, цикл do-while підходить найкраще.

fun main(args:Array<String>)
{
  // Обчислити суму чисел послідовності

  // 1. Оголосити змінні
  var number = 0
  var summ = 0

  // 2. Цикл вводу чисел та обчислення суми
  do
  {
    // Додати до суми число
    summ += number

    // Отримати число
    print("number = ")
    number = readLine().toString().toInt()
  } while (number!=0)

  // 3. Вивід результату
  println("summ = " + summ)
}

Тестовий приклад

number = 8
number = 4
number = 5
number = 6
number = 0
summ = 23

 

5.2. Поєднання циклу do-while та оператора if-else-if. Обчислення максимальних значень в послідовності чисел

Умова задачі. Дано ціле число n (n≥3) та послідовність дійсних чисел a1, a2, …, an, яка вводиться з клавіатури. Обчислити два максимальних числа послідовності.

Розв’язок.

fun main(args:Array<String>)
{
  // Обчислення двох максимальних чисел послідовності a1, a2, ..., an
  // 1. Оголосити змінні
  var max1:Double = 0.0
  var max2:Double = 0.0
  var n:Int
  var number:Double
  var i:Int
  var fFirst:Boolean

  // 2. Ввід числа n
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Цикл вводу чисел та обчислення максимальних значень
  i = 0
  do {
    print("number = ")
    number = readLine().toString().toDouble()

    if (i==0) {
      max1 = number
      max2 = number
    }
    else
    if (i==1)
    {
      if (max1<number)
        max1=number
      else
        max2=number
    }
    else
    {
      if (max1<number) {
        max2 = max1
        max1 = number
      }
      else
      if (max2<number)
        max2 = number
    }
    i++
  } while (i<n)

  // 4. Вивід результату
  println("max1 = " + max1)
  println("max2 = " + max2)
}

Результат виконання програми

n = 6
number = 2
number = 4
number = 2
number = 3
number = 5
number = 2
max1 = 5.0
max2 = 4.0

 

5.3. Ряд Фібоначчі

Умова задачі. Сформувати ряд Фібоначчі, який містить n чисел (n≥3). Кількість чисел ряду задається з клавіатури. Наприклад, для n = 7 ряд матиме такий вигляд:

0, 1, 1, 2, 3, 5, 8

Розв’язок.

fun main(args:Array<String>)
{
  // Формування ряду Фібоначчі
  // 1. Оголосити змінні
  var x1:Int
  var x2:Int
  var x3:Int
  val n:Int
  var i:Int

  // 2. Ввід числа n
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Перевірка n на коректність
  if (n<3) {
    println("Incorrect input.")
    return
  }

  // 3. Встановлення початкових значень 0, 1 та їх вивід
  x1=0
  x2=1
  print(x1.toString()+" ")
  print(x2.toString()+" ")

  // 4. Цикл формування ряду та його виведення
  i=2
  do {
    x3=x1+x2
    print(x3.toString() + " ")
    x1=x2
    x2=x3
    i++
  } while (i<n)
}

Тестовий приклад

n = 15
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

 


Зміст