Бесконачна петља — разлика између измена

Садржај обрисан Садржај додат
м Renamed template
.
Ред 1:
{{Neprovereni seminarski}}
{{Helpbox <!-- NOTE: Please don't remove. Discuss naviagation concept at [[Talk:Do_while_loop#Helpbox_experiment] -->
|name = Конструкције петљи
Линија 9 ⟶ 8:
|list6 = [[Контрола тока]]
}}
'''Бесконачна петља''' (или '''петља без граница''') је низ упутстава у [[Рачунарски програм|рачунарском програму]] који улазе у бесконачну петљу, било због [[Управљање током|петље]] која нема завршно стање, иматеi.e. некогзавршетак којипетље је завистан од стања које се не може срестиостварити, или оногкритеријум којизавршетка петље изазива њен поновни почетак петље. У старијим [[Оперативни систем|оперативним системима]] са [[Кооперативно мултитасковање|кооперативним мултитасковањем]], бесконачне петље обично утичуузрокују нада цео систем да престане да реагује. Са садашњим преовлађујућим превентивним мултитаскинг моделом, бесконачне петље узрокују да програм трошиконзумира све могућедоступно време процесора, али обичнога секорисник обично може зауставити од стране корисникаПетље [[Активно чекањe|активног чекања]] петље се такође понекад зову и  називају "бесконачнебесконачним петљепетљама". Један могући узрок  [[Држ (рачунарство)|"заустављањазамрзавања"]] рачунара је бесконачна петља ; остали укључују [[млаћење]] (енгл.[[Trashing(computer science)|thrashing]]), [[застој]] и [[грешка сегментације]].
 
== Планирано против непланираног петљања ==
Петљање понавља низ инструкција све док одређени услов није испуњен. Бесконачна петља настаје када се никада не испуни неки од услова, због присутне карактеристике петље .
 
=== Намерно петљање ===
Постоје неколико случаја када је то пожељно понашање. На пример, игрице засноване на конзолама обично немају услов излаза у главној петљи, јер не постоји оперативни систем из ког би се могло изаћи; петља ради све док се конзола не искључи.
 
Старински [[Бушена картица|читач картица]], [[опрема за записивање јединица]], би се буквално зауставио када би обрада картице била завршена , пошто није било потребе да хардвер настави са радом  , све док се не учита нова гомила програмских картица.
 
Насупрот томе, модерни интерактивни рачунари захтевају да рачунар стално надгледа корисничке уносе или активност уређаја , тако да на неком основном нивоу постоји бесконачан процес [[idle петље]] која мора да настави све док се уређај не искључи или ресетује. У [[Apollo Guidance Рачунар]]у, на пример, ова спољна петља се налазила у Exec програму, и ако рачунар не би имао никаквог посла, петља би се стартовала како би радила лажни посао који би искључио  светлосни показивач"рачунарске активности" .
 
Модерни рачунари такође обично не заустављају процесор или цикличне сатове матичне плоче када се "сруше". Уместо тога, враћају се грешци која приказује поруке оператору, и улази у бесконачну петљу чекајући корисника да или одговори на упит како би наставио, или да ресетује уређај.
 
=== Ненамерно петљање ===
Најчешће се термин користи за оне ситуације када то није циљани резултатаt;то је , када се деси "[[Баг (информатика)|баг]]". Овакве грешке су најчешће код програмера почетника, али могу се десити и код искуснијих програмера такође,јер су њихови узроци доста суптилни.
 
Један чест узрок, на пример,је тај када програмер покуша да понови нешто над збирком ставки као што је [[Povezana lista|повезана листа]], извршавајући код петље једном за сваку ставку. Неправилно формирање везе може створити референтну петљу у листи, где је један елемент листе повезан са оним који се догодио раније на листи. Овај део листе улази у круг, што доводи да програм петља заувек.
 
Док се већина бесконачних петљи могу наћи у близини инспекције кода, не постоји општи метод за одређивање да ли ће се дати програм икада зауставити или ће радити заувек ; ово је често код [[Халтинг проблем|проблема заустављања]].
 
== Прекид ==
Све док систем реагује, бесконачне петље често могу бити прекинуте слањем сигнала у процесу (као што је [[SIGINT]] у Unix), или [[прекид]] у процесору, што узрокује да тренутни процес буде прекинут. Ово се може урадити у [[Менаџер задатака|менаџеру задатака]], у терминалу са командом [[Control-C]] , или користећи  [[Kill(команда)|"kill"]] команду или [[позив система]]. Међутим, ово не ради увек, јер процес можда не реагује на сигнала или процесор може бити у непрекидном стању, као у [["Cyrix coma bug "]](проузрокован преклапањем непрекидним инструкцијама у [[Инструкциони цевовод|инструкционом "цевоводу"]]). У неким случајевима остали сигнали као што је  [[SIGKILL]] може радити, пошто не захтевају процес да се оглашава, док у другим случајевима петља не може бити угашена гашењем система.
 
== Језичка подршка ==
Бесконачне петље се могу спровести користећи различите конструкције контроле тока. Најчешће, у неструктурном програмирању ово је скок назад ( [[GoTo|"goto "]]), док је у структурном програмирању  неодређена петља  (while петља) постављена да се никад не заврши, или изостављајући стање или експлицитно постављајући на тачно , као <code>while (true) .</code><code>..</code>.
 
Неки језици имају посебне конструкције за бесконачне петље, типично изостављајући стање из бесконачне петље. Примери укључују Ada (<code>loop ... end loop</code>),<ref>[[wikibooks:Ada Programming/Control#Endless Loop|Ada Programming: Control: Endless Loop]]</ref> Fortran (<code>DO .</code><code>.. </code><code>END DO</code>), Go (<code>for { ... }</code>), и Ruby (<code>loop do ... end</code>).
 
== Примери намерних бесконачних петљи ==
Линија 44 ⟶ 43:
for (;;); // or while (1);
}
</source>Образац <code>for (;;)</code> за бесконачну петљу је традиционалан , који се појављује у стандарној референци '' [[С Програмски језик]]'', and и често се изговара "заувек".<ref>[http://stackoverflow.com/questions/20186809/endless-loop-in-c-c Endless loop in C/C++]</ref>
 
Ово је петља која ће штампати "Бесконачна Петља" без заустављања .
 
Једноставан пример у [[Бејсик|Бејсик-у]] :<source lang="gwbasic">
Линија 53 ⟶ 52:
</source>Једноставан пример у [[Асемблер x86|Аемблер x86]]:<source lang="asm">
loop:
; Code to loop here
jmp loop
</source>Остали примери у [[MS-DOS|DOS-у]]<source lang="asm">
Линија 116 ⟶ 115:
 
== Вишепартијска петља ==
Иако су бесконачне петље у једном програму обично лаке за предвидети, петља изазвана од стране више лица је много теже предвидети. Замислите сервер који увек одговара са грешком у виду поруке ако не разуме тражени захтев. Очигледно, не постоји могућност за бесконачном петљом на серверу, али ако су ту два сервера (A и Б), и A прими поруку о непознатом типу из Б, онда А одговара са грешком у виду поруке серверу Б, Б не разуме поруку у одговара серверу А са његовом поруком , А не разуме поруку од Б и шаље још једну грешку у виду поруке, и тако у бесконачност. Један чест пример ове ситуације је [[петља електронске поште]].
 
== Квази-бесконачне петље ==