Нескінченний цикл — в програмуванні різновид циклу, записаний таким чином, що умова виходу з нього ніколи не виконується.
Про програму, що увійшла в нескінченний цикл, деколи говорять, що вона зациклилась. Використання цього дієслова вийшло далеко за межі програмування, і воно часто застосовується в зовсім іншому значенні.
Нескінченний цикл як абстрактна конструкція
Будь-який цикл, відповідно до Тюринг-повноти, можна виразити як нескінченний цикл, у тілі якого є перевірка умови виходу та команда виходу з циклу.
Будь-яка програма може бути написаною за допомогою:
- нескінченних циклів;
- команд виходу з циклу;
- операторів розгалуження (
if-then
); - послідовністю команд, виконуваних одна за іншою;
Примітка: зверніть увагу, що універсальний оператор GOTO (безумовний перехід) не потрібен, а достатньо спеціального оператора виходу з циклу, при цьому, у випадку n вкладених циклів буде потрібно n спеціальних операторів виходу з циклу (окрім невеликої кількості мов з розширеним синтаксисом операторів виходу) або один оператор GOTO і одна мітка.
Приклади
while true do begin { тіло циклу } end; //або repeat { тіло циклу } until false;
Для С-подібних мов
for (;;) { /* тіло циклу */ } // або while(true) { /* тіло циклу */ } // або while(1) { /* тіло циклу */ } // або do { /* тіло циклу */ } while(true) // або do { /* тіло циклу */ } while(1)
while True: # тіло циклу
:loop rem тіло циклу goto loop
while true do # тіло циклу done
Мова містить спеціальну конструкцію нескінченного циклу:
loop { # тіло циклу }
Ада також містить спеціальну конструкцію, що описує нескінченний цикл:
loop -- тіло циклу end loop;
Окрім того, варто відмітити, що Ада дозволяє здійснити вихід одразу з декількох вкладених циклів, а також має умовну форму оператора виходу, що дозволяє уникнути використання оператора розгалуження.
Out_Cycle: loop ... loop ... exit Out_Cycle when Logic_Exp; -- рівносильно if Logic_Exp then exit Out_Cycle; end if; ... end loop; ... end loop Out_Cycle; --звідси продовжиться виконання програми --після виконання інструкції exit Out_Cycle;
while true do -- тіло циклу end
Практика
В програмуванні нескінченні цикли є одним з джерел нестійкої роботи програми. Тим не менш їх широко використовують в практиці.
Їхнє використання відбувається завдяки тому, що майже кожна мова програмування надає конструкції, які дозволяють примусово перервати виконання циклу. Наприклад, Break
в Delphi, EXIT FOR
в BASIC тощо.
В житті часто роблять нескінченний цикл while
з умовою виконання True
(while True do ...
), й в подальшому за необхідність в тіло циклу додають умови, за яких зупиняють його виконання Break-подібними операторами.
В цикл проходу по деякому набору елементів з використанням абстрактного класу (ітератора) виглядає так:
Element* el; SomeIterator it(); for (el=it.get(); el!=NULL; el=it.get()) { ... }
В деяких діалектах Pascal цей же цикл (із зберіганням можливості використовувати оператор continue
, тобто, без el:=it.Get;
в кінці циклу) виглядає так:
it := SomeIterator.Create; repeat el := it.Get; if el=nil then break; ... until false;
Програми, з яких немає виходу (наприклад операційні системи, прошивки мікроконтролерів), також зазвичай є нескінченними циклами. Для попередження неконтрольованого нескінченого циклу використовують сторожовий таймер.
В деяких випадках, наприклад, в скриптах керування персонажами комп'ютерних ігор, вихід з програми фактично означає її зупинку. Тому розробник не вказувати умову виходу, інтерпретатор ігрової програми працює в нескінченному циклі. Такий принцип прийнятий, наприклад, в Game Maker, в деяких іграх для програмістів.
Приклади
- Приклади нескінченних циклів різними мовами
Див. також
Примітки
- Endless loop in C/C++
- Ada Programming: Control: Endless Loop
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Neskinchennij cikl v programuvanni riznovid ciklu zapisanij takim chinom sho umova vihodu z nogo nikoli ne vikonuyetsya Pro programu sho uvijshla v neskinchennij cikl dekoli govoryat sho vona zaciklilas Vikoristannya cogo diyeslova vijshlo daleko za mezhi programuvannya i vono chasto zastosovuyetsya v zovsim inshomu znachenni Neskinchennij cikl yak abstraktna konstrukciyaBud yakij cikl vidpovidno do Tyuring povnoti mozhna viraziti yak neskinchennij cikl u tili yakogo ye perevirka umovi vihodu ta komanda vihodu z ciklu Bud yaka programa mozhe buti napisanoyu za dopomogoyu neskinchennih cikliv komand vihodu z ciklu operatoriv rozgaluzhennya if then poslidovnistyu komand vikonuvanih odna za inshoyu Primitka zvernit uvagu sho universalnij operator GOTO bezumovnij perehid ne potriben a dostatno specialnogo operatora vihodu z ciklu pri comu u vipadku n vkladenih cikliv bude potribno n specialnih operatoriv vihodu z ciklu okrim nevelikoyi kilkosti mov z rozshirenim sintaksisom operatoriv vihodu abo odin operator GOTO i odna mitka PrikladiPascal while true do begin tilo ciklu end abo repeat tilo ciklu until false Dlya S podibnih mov for tilo ciklu abo while true tilo ciklu abo while 1 tilo ciklu abo do tilo ciklu while true abo do tilo ciklu while 1 Python while True tilo ciklu Paketnij fajl MS DOS loop rem tilo ciklu goto loop Bash while true do tilo ciklu done Ruby Mova mistit specialnu konstrukciyu neskinchennogo ciklu loop tilo ciklu Ada Ada takozh mistit specialnu konstrukciyu sho opisuye neskinchennij cikl loop tilo ciklu end loop Okrim togo varto vidmititi sho Ada dozvolyaye zdijsniti vihid odrazu z dekilkoh vkladenih cikliv a takozh maye umovnu formu operatora vihodu sho dozvolyaye uniknuti vikoristannya operatora rozgaluzhennya Out Cycle loop loop exit Out Cycle when Logic Exp rivnosilno if Logic Exp then exit Out Cycle end if end loop end loop Out Cycle zvidsi prodovzhitsya vikonannya programi pislya vikonannya instrukciyi exit Out Cycle Lua while true do tilo ciklu endPraktikaV programuvanni neskinchenni cikli ye odnim z dzherel nestijkoyi roboti programi Tim ne mensh yih shiroko vikoristovuyut v praktici Yihnye vikoristannya vidbuvayetsya zavdyaki tomu sho majzhe kozhna mova programuvannya nadaye konstrukciyi yaki dozvolyayut primusovo perervati vikonannya ciklu Napriklad Break v Delphi EXIT FOR v BASIC tosho V zhitti chasto roblyat neskinchennij cikl while z umovoyu vikonannya True while True do j v podalshomu za neobhidnist v tilo ciklu dodayut umovi za yakih zupinyayut jogo vikonannya Break podibnimi operatorami V C cikl prohodu po deyakomu naboru elementiv z vikoristannyam abstraktnogo klasu iteratora viglyadaye tak Element el SomeIterator it for el it get el NULL el it get V deyakih dialektah Pascal cej zhe cikl iz zberigannyam mozhlivosti vikoristovuvati operator continue tobto bez el it Get v kinci ciklu viglyadaye tak it SomeIterator Create repeat el it Get if el nil then break until false Programi z yakih nemaye vihodu napriklad operacijni sistemi proshivki mikrokontroleriv takozh zazvichaj ye neskinchennimi ciklami Dlya poperedzhennya nekontrolovanogo neskinchenogo ciklu vikoristovuyut storozhovij tajmer V deyakih vipadkah napriklad v skriptah keruvannya personazhami komp yuternih igor vihid z programi faktichno oznachaye yiyi zupinku Tomu rozrobnik ne vkazuvati umovu vihodu interpretator igrovoyi programi pracyuye v neskinchennomu cikli Takij princip prijnyatij napriklad v Game Maker v deyakih igrah dlya programistiv PrikladiPrikladi neskinchennih cikliv riznimi movamiDiv takozhCikl do while CiklPrimitkiEndless loop in C C Ada Programming Control Endless Loop