Циклы. Основные понятия. Циклы while, do-while. Примеры решения задач
Содержание
- 1. Понятие цикла
- 2. Цикл while. Общая форма
- 3. Примеры решения задач с использованием цикла while
- 4. Цикл do-while. Общая форма
- 5. Примеры решения задач с использованием цикла 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
⇑
Связанные темы
- Цикл for. Применение цикла for к диапазонам, массивам, спискам, словарям, множествам
- Интервалы (диапазоны). Оператор .. . Интервальные типы IntRange, CharRange, LongRange
⇑