Ця стаття не містить . (лютий 2022) |
В інформатиці цикл for — це оператор, що дозволяє виконувати код багаторазово.
Цикл for складається з двох частин: заголовка, що визначає ітерацію, і тіла, яке виконується один раз за кожну ітерацію. Заголовок часто оголошує явний лічильник циклу або змінну циклу, що дозволяє тілу знати, яка ітерація виконується зараз. Цикли for зазвичай використовуються, коли перед входом у цикл відома кількість ітерацій, що мусить бути виконана. Цикли for можна розглядати як скорочення циклів while, які збільшують і перевіряють змінну циклу.
Назва «цикл for» походить від англійського слова for, яке використовується як ключове слово в багатьох мовах програмування для введення циклу for. Термін в англійській мові запроваджено в ALGOL 58 і був популяризований у впливовому пізнішому ALGOL 60; це прямий переклад ранішого німецького für, використаного в Superplan (1949—1951) , який також брав участь у створенны АЛГОЛУ 58 і АЛГОЛУ 60.
У FORTRAN і (PL/I) ключове слово DO використовується для того самого, і воно називається циклом do; це відрізняється від циклу do-while.
Різновиди циклів for
Оператор циклу for доступний у більшості імперативних мов програмування. Як правило, цикли for поділяються на кілька категорій.
Традиційні цикли for
Цикл for таких мов як ALGOL, Simula, BASIC, Pascal, Modula, Oberon, Ada, MATLAB, Ocaml, F# тощо, вимагає керуючої змінної з початковими та кінцевими значеннями і виглядає приблизно так:
for i = first to last do statement (* або просто *) for i = first..last do statement
Залежно від мови замість знака рівності може використовуватися явний знак присвоєння (а в деяких мовах слово int вимагається навіть у числовому випадку). Додаткове значення кроку (інкремент або декремент ≠ 1) також може бути включено, хоча точний синтаксис, який використовується для цього, дещо відрізняється в різних мовах. Деякі мови вимагають окремого оголошення керуючої змінної, деякі ні.
Інша форма була популяризована мовою програмування C. Для цього потрібні 3 частини: ініціалізація (варіант циклу), умова та перехід до наступної ітерації. Усі ці три частини є необов'язковими. Цей тип «циклів із крапкою з комою» прийшов з мови програмування B, і спочатку його винайшов Стівен Джонсон.
У частині ініціалізації оголошуються всі необхідні змінні (і зазвичай їм призначаються значення). Якщо оголошено кілька змінних, усі вони мають бути одного типу. Частина умови перевіряє певну умову і виходить з циклу, якщо вона хибна, навіть якщо цикл жодного разу не виконався. Перехід до наступної частини ітерації виконується рівно один раз щоразу, коли цикл закінчується. Потім цикл повторюється, якщо умова має значення істини.
Ось приклад традиційного циклу for в стилі C у Java.
// Друкує числа від 0 до 99 (не включаючи 100) з пробілом між ними. for (int i=0; i<100; i++) { System.out.print(i); System.out.print(' '); } System.out.println();
Ці цикли також іноді називають числовими циклами for на відміну від циклів foreach.
Цикли for на основі ітераторів
Цей тип циклу for є узагальненням типу числового діапазону для циклу for, оскільки він дозволяє перераховувати набори елементів, відмінні від числових послідовностей. Зазвичай він характеризується використанням неявного або явного ітератора, в якому змінна циклу приймає кожне зі значень у послідовності або іншому зборі даних. Типовий приклад у Python:
for item in some_iterable_object: do_something() do_something_else()
Де some_iterable_object — це або збірка даних, яка підтримує неявну ітерацію (наприклад, список імен співробітників), сам ітератор. Деякі мови мають це на додаток до іншого синтаксису циклу for; Зокрема, PHP має цей тип циклу під назвою foreach, а також цикл for із трьома виразами під назвою for.
Векторизовані цикли for
Деякі мови пропонують цикл for, який діє так, ніби обробляє всі ітерації паралельно, наприклад ключове слово for all у FORTRAN 95, яке має інтерпретацію, що всі вирази правої частини оцінюються перед виконанням будь-яких присвоєнь, на відміну від явної ітераційної форми. Наприклад, в операторі for у наступному фрагменті псевдокоду під час обчислення нового значення для A(i), крім першого (з i = 2), посилання на A(i — 1) отримає нове значення, яке мало було розміщено там на попередньому кроці. Однак у версії для всіх кожне обчислення відноситься лише до вихідного, незмінного A.
for i := 2 : N - 1 do A(i) := [A(i - 1) + A(i) + A(i + 1)] / 3; next i; for all i := 2 : N - 1 do A(i) := [A(i - 1) + A(i) + A(i + 1)] / 3;
Різниця може бути значною. Деякі мови (наприклад, FORTRAN 95, PL/I) також пропонують оператори присвоєння масиву, які дозволяють опускати багато циклів for. Таким чином, псевдокод, такий як A := 0; встановить усі елементи масиву A в нуль, незалежно від його розміру чи розмірності. Цикл прикладу можна відобразити як
A(2 : N - 1) := [A(1 : N - 2) + A(2 : N - 1) + A(3 : N)] / 3;
Але в інструкції компілятора може не бути чітко описано, чи буде це відтворено у стилі for-циклу чи циклу for all, чи щось інше.
Складені цикли for
Введений в ALGOL 68 , а далі в PL/I, цикл for дозволяє поєднувати ітерацію циклу з тестом, наприклад:
for i := 1 : N while A(i) > 0 do etc.
Тобто значення присвоюється змінній циклу і, та лише якщо вираз while є істинним, тіло циклу буде виконано. Якщо результат був хибним, виконання циклу for припиняється. Враховуючи, що значення змінної циклу визначено після завершення циклу, тоді наведений вище оператор знайде перший непозитивний елемент у масиві A (а якщо такого немає, його значення буде N + 1), або, з відповідними варіантами, перший непустий символ у рядку тощо.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno lyutij 2022 V informatici cikl for ce operator sho dozvolyaye vikonuvati kod bagatorazovo For loop flow diagram Cikl for skladayetsya z dvoh chastin zagolovka sho viznachaye iteraciyu i tila yake vikonuyetsya odin raz za kozhnu iteraciyu Zagolovok chasto ogoloshuye yavnij lichilnik ciklu abo zminnu ciklu sho dozvolyaye tilu znati yaka iteraciya vikonuyetsya zaraz Cikli for zazvichaj vikoristovuyutsya koli pered vhodom u cikl vidoma kilkist iteracij sho musit buti vikonana Cikli for mozhna rozglyadati yak skorochennya cikliv while yaki zbilshuyut i pereviryayut zminnu ciklu Nazva cikl for pohodit vid anglijskogo slova for yake vikoristovuyetsya yak klyuchove slovo v bagatoh movah programuvannya dlya vvedennya ciklu for Termin v anglijskij movi zaprovadzheno v ALGOL 58 i buv populyarizovanij u vplivovomu piznishomu ALGOL 60 ce pryamij pereklad ranishogo nimeckogo fur vikoristanogo v Superplan 1949 1951 yakij takozh brav uchast u stvorenny ALGOLU 58 i ALGOLU 60 U FORTRAN i PL I klyuchove slovo DO vikoristovuyetsya dlya togo samogo i vono nazivayetsya ciklom do ce vidriznyayetsya vid ciklu do while Riznovidi cikliv forOperator ciklu for dostupnij u bilshosti imperativnih mov programuvannya Yak pravilo cikli for podilyayutsya na kilka kategorij Tradicijni cikli for Cikl for takih mov yak ALGOL Simula BASIC Pascal Modula Oberon Ada MATLAB Ocaml F tosho vimagaye keruyuchoyi zminnoyi z pochatkovimi ta kincevimi znachennyami i viglyadaye priblizno tak for i first to last do statement abo prosto for i first last do statement Zalezhno vid movi zamist znaka rivnosti mozhe vikoristovuvatisya yavnij znak prisvoyennya a v deyakih movah slovo int vimagayetsya navit u chislovomu vipadku Dodatkove znachennya kroku inkrement abo dekrement 1 takozh mozhe buti vklyucheno hocha tochnij sintaksis yakij vikoristovuyetsya dlya cogo desho vidriznyayetsya v riznih movah Deyaki movi vimagayut okremogo ogoloshennya keruyuchoyi zminnoyi deyaki ni Insha forma bula populyarizovana movoyu programuvannya C Dlya cogo potribni 3 chastini inicializaciya variant ciklu umova ta perehid do nastupnoyi iteraciyi Usi ci tri chastini ye neobov yazkovimi Cej tip cikliv iz krapkoyu z komoyu prijshov z movi programuvannya B i spochatku jogo vinajshov Stiven Dzhonson U chastini inicializaciyi ogoloshuyutsya vsi neobhidni zminni i zazvichaj yim priznachayutsya znachennya Yaksho ogolosheno kilka zminnih usi voni mayut buti odnogo tipu Chastina umovi pereviryaye pevnu umovu i vihodit z ciklu yaksho vona hibna navit yaksho cikl zhodnogo razu ne vikonavsya Perehid do nastupnoyi chastini iteraciyi vikonuyetsya rivno odin raz shorazu koli cikl zakinchuyetsya Potim cikl povtoryuyetsya yaksho umova maye znachennya istini Os priklad tradicijnogo ciklu for v stili C u Java Drukuye chisla vid 0 do 99 ne vklyuchayuchi 100 z probilom mizh nimi for int i 0 i lt 100 i System out print i System out print System out println Ci cikli takozh inodi nazivayut chislovimi ciklami for na vidminu vid cikliv foreach Cikli for na osnovi iteratoriv Cej tip ciklu for ye uzagalnennyam tipu chislovogo diapazonu dlya ciklu for oskilki vin dozvolyaye pererahovuvati nabori elementiv vidminni vid chislovih poslidovnostej Zazvichaj vin harakterizuyetsya vikoristannyam neyavnogo abo yavnogo iteratora v yakomu zminna ciklu prijmaye kozhne zi znachen u poslidovnosti abo inshomu zbori danih Tipovij priklad u Python for item in some iterable object do something do something else De some iterable object ce abo zbirka danih yaka pidtrimuye neyavnu iteraciyu napriklad spisok imen spivrobitnikiv sam iterator Deyaki movi mayut ce na dodatok do inshogo sintaksisu ciklu for Zokrema PHP maye cej tip ciklu pid nazvoyu foreach a takozh cikl for iz troma virazami pid nazvoyu for Vektorizovani cikli for Deyaki movi proponuyut cikl for yakij diye tak nibi obroblyaye vsi iteraciyi paralelno napriklad klyuchove slovo for all u FORTRAN 95 yake maye interpretaciyu sho vsi virazi pravoyi chastini ocinyuyutsya pered vikonannyam bud yakih prisvoyen na vidminu vid yavnoyi iteracijnoyi formi Napriklad v operatori for u nastupnomu fragmenti psevdokodu pid chas obchislennya novogo znachennya dlya A i krim pershogo z i 2 posilannya na A i 1 otrimaye nove znachennya yake malo bulo rozmisheno tam na poperednomu kroci Odnak u versiyi dlya vsih kozhne obchislennya vidnositsya lishe do vihidnogo nezminnogo A for i 2 N 1 do A i A i 1 A i A i 1 3 next i for all i 2 N 1 do A i A i 1 A i A i 1 3 Riznicya mozhe buti znachnoyu Deyaki movi napriklad FORTRAN 95 PL I takozh proponuyut operatori prisvoyennya masivu yaki dozvolyayut opuskati bagato cikliv for Takim chinom psevdokod takij yak A 0 vstanovit usi elementi masivu A v nul nezalezhno vid jogo rozmiru chi rozmirnosti Cikl prikladu mozhna vidobraziti yakA 2 N 1 A 1 N 2 A 2 N 1 A 3 N 3 Ale v instrukciyi kompilyatora mozhe ne buti chitko opisano chi bude ce vidtvoreno u stili for ciklu chi ciklu for all chi shos inshe Skladeni cikli for Vvedenij v ALGOL 68 a dali v PL I cikl for dozvolyaye poyednuvati iteraciyu ciklu z testom napriklad for i 1 N while A i gt 0 do etc Tobto znachennya prisvoyuyetsya zminnij ciklu i ta lishe yaksho viraz while ye istinnim tilo ciklu bude vikonano Yaksho rezultat buv hibnim vikonannya ciklu for pripinyayetsya Vrahovuyuchi sho znachennya zminnoyi ciklu viznacheno pislya zavershennya ciklu todi navedenij vishe operator znajde pershij nepozitivnij element u masivi A a yaksho takogo nemaye jogo znachennya bude N 1 abo z vidpovidnimi variantami pershij nepustij simvol u ryadku tosho