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

 


Связанные темы