Цикл for. Способи реалізації. Застосування циклу for до діапазонів, масивів, списків, словників, множин
Зміст
- 1. Цикл for. Способи реалізації. Загальна форма
- 2. Приклади розв’язку задач з використанням циклу for
- Споріднені теми
Пошук на інших ресурсах:
1. Цикл for. Способи реалізації. Загальна форма
У мові Kotlin цикл for подібний до циклу foreach мов програмування Java, C#. Він дозволяє здійснювати обхід значень елементів деякої колекції, масиву, діапазону або іншого набору значень.
Обхід значень об’єкту, що містить набір елементів, може здійснюватись в прямому та зворотному напрямках. Також при обході значень можна задавати крок.
Якщо обхід елементів деякого набору здійснюється в прямому напрямку, то загальна форма циклу for наступна
for (varIter in IterObj step stepValue) { // Statements // ... }
тут
- IterObj – об’єкт, що містить або визначає набір значень, які потрібно послідовно обійти від першого до останнього. Таким об’єктом може бути список, масив, діапазон тощо;
- varIter – змінна-ітератор, яка по-черзі приймає значення з набору IterObj. В тілі циклу for виконуються інструкції Statements для кожного нового значення varIter;
- Statements – одна або декілька інструкцій, що виконуються на кожній ітерації;
- stepValue – крок обходу значень діапазону. Значення stepValue має бути цілим додатнім числом.
Якщо крок обходу рівний 1, то фрагмент step=stepValue можна опустити
for (varIter in IterObj) { // Statements // ... }
Якщо потрібно отримати перебір значень в заданих межах в зворотному порядку, то для цього використовується форма оператора for з ключовим словом downTo
for (varIter in BeginValue downTo EndValue step stepValue) { // Statements // ... }
тут
- varIter – змінна лічильник ітерацій;
- BeginValue, EndValue – перші та останні значення, які розглядаються в зворотному порядку;
- stepValue – крок зміни лічильника varIter. Значення stepValue повинно бути цілим позитивним числом.
Якщо stepValue рівне 1, то цей фрагмент можна опустити. У цьому випадку цикл for матиме вигляд
for (varIter in BeginValue downTo EndValue) { // Statements // ... }
⇑
2. Приклади розв’язку задач з використанням циклу for
2.1. Обхід діапазону
Найпростіша задача – обхід діапазону чисел у прямому та зворотному порядку.
fun main(args:Array<String>) { // Обхід діапазону // 1. Заданий діапазон цілих чисел val ir : IntRange = 0..10 // 2. Вивести квадрати чисел з діапазону for (t in ir) print((t*t).toString()+" ") // 3. Вивести квадрати парних чисел діапазону println() for (t in ir step 2) print((t*t).toString()+" ") // 4. Вивести квадрати парних чисел діапазону в зворотному порядку println() for (t in ir.last downTo ir.first step 2) print((t*t).toString()+" ") }
Результат виконання програми
0 1 4 9 16 25 36 49 64 81 100 0 4 16 36 64 100 100 64 36 16 4 0
⇑
2.2. Обхід списку List
У прикладі нижче демонструється обробка списку рядків та списку чисел.
fun main(args:Array<String>) { // Обхід списку // 1. Заданий список рядків val ls : List<String> = listOf("abc", "abcd", "jklmn", "joprst", "pupkin", "ddeee") // 2. Вивести список for (s in ls) print(s + " ") // 3. В заданому списку обчислити позицію першого рядка з найбільшою довжиною. var maxLen : Int var posMaxLen : Int var i : Int i = 0 posMaxLen = 0 maxLen = ls[posMaxLen].length for (s in ls) { if (maxLen < s.length) { posMaxLen = i maxLen = s.length } i++ } println() print("posMaxLen = " + posMaxLen + ", " + "maxLen = " + maxLen) // 3. Вивести список рядків у зворотному порядку println() for (s in ls.reversed()) print(s + " ") // 4. У заданому списку цілих чисел обчислити суму елементів, які // розміщуються на непарних позиціях 1, 3, 5, .... // Вважати, що нумерація позицій починається з 0. // 4.1. Заданий список val lstInt : List<Int> = listOf(2, 4, 3, 8, 2, 1, 5, 7, 9, 3) var pos : Int var summ : Int // 4.2. Цикл обходу списку pos = 0 summ = 0 for (i in lstInt) { if (pos % 2 == 1) summ += i pos++ } // 4.3. Вивести результат println() println("lstInt = " + lstInt) println("summ = " + summ) }
Результат виконання програми
abc abcd jklmn joprst pupkin ddeee posMaxLen = 3, maxLen = 6 ddeee pupkin joprst jklmn abcd abc lstInt = [2, 4, 3, 8, 2, 1, 5, 7, 9, 3] summ = 23
⇑
2.3. Обхід елементів словника Map
Демонструється обхід елементів словника в прямому та зворотному порядку. Приклад демонструє можливості циклу for а не можливості роботи зі словниками.
fun main(args:Array<String>) { // Обхід елементів словника // 1. Заданий словник, в якому визначені пари: номер дня тижня -> назва дня тижня // 1.1. Оголосити змінну типу словник <Int, String> var days : Map<Int, String> = mapOf() // 1.2. Додати до словника значення days = days + mapOf(Pair(1, "Monday")) days = days + mapOf(Pair(2, "Tuesday")) days += mapOf(Pair(3, "Wednesday")) days += mapOf(Pair(4, "Thursday")) days += mapOf(Pair(5, "Friday")) days += mapOf(Pair(6, "Saturday")) days += mapOf(Pair(7, "Sunday")) // 2. Обхід словника та виведення значень for (d in days) print(d.toString() + " ") println() // 3. Виведення значень словника у зворотному порядку for (d in days.keys.reversed()) print(d.toString() + "=" + days[d] + " ") println() }
Результат виконання програми
1=Monday 2=Tuesday 3=Wednesday 4=Thursday 5=Friday 6=Saturday 7=Sunday 7=Sunday 6=Saturday 5=Friday 4=Thursday 3=Wednesday 2=Tuesday 1=Monday
⇑
2.4. Обхід множини Set
Даний приклад демонструє використання циклу for для обходу множини. Усі можливості множин тут не розкриваються.
fun main(args:Array<String>) { // Обхід елементів множини // 1. Задана множина val Colors = setOf("Red", "Blue", "Green", "Yellow") // 2. Вивести елементи множини for (c in Colors) print(c + " ") println() // 3. Вивести елементи множини у зворотному порядку for (c in Colors.reversed()) print(c + " ") println() }
Результат виконання програми
Red Blue Green Yellow Yellow Green Blue Red
⇑
2.5. Обхід масиву Array. Обчислення суми елементів у масиві згідно з умовою
У прикладі демонструється використання циклу for для розв’язку наступних задач:
- обхід елементів масиву та їх вивід у прямому порядку;
- обхід елементів масиву та їх вивід у зворотному порядку;
- обчислення суми елементів масиву;
- обчислення суми парних елементів цілочисельного масиву;
- обчислення суми елементів масиву, які лежать на парних позиціях.
fun main(args:Array<String>) { // Обхід масиву чисел. // 1. Заданий масив чисел var A : Array<Int> = arrayOf(10, 20, 33, 17, 35, 11, 22) var i:Int var n:Int // 2. Обхід масиву в прямому порядку for (i in A) { print(i.toString() + " ") } println() // 3. Обхід масиву в зворотному порядку for (i in A.reversedArray()) { print(i.toString() + " ") } println() // 4. Обчислити суму елементів масиву var summ = 0 for (i in A) { summ += i } println("summ = " + summ) // 4. Обчислити суму парних елементів масиву summ = 0 for (i in A) if (i%2 == 0) summ += i println("summPair = " + summ) // 5. Обчислити суму елементів, які лежать на парних позиціях (0, 2, 4, ...) var pos = 0 summ = 0 for (i in A) { if (pos%2==0) summ += i pos++ } println("summPairPos = " + summ) }
Результат виконання програми
10 20 33 17 35 11 22 22 11 35 17 33 20 10 summ = 148 summPair = 52 summPairPos = 100
⇑
Споріднені теми
- Цикли. Основні поняття. Цикли while, do-while. Приклади розв’язку задач
- Інтервали (діапазони). Оператор .. . Інтервальні типи IntRange, CharRange, LongRange
⇑