For петља — разлика између измена

Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м datum
Autobot (разговор | доприноси)
м Разне исправке
Ред 1:
[[Датотека:For-loop-diagram.png|thumb|right|диjаграмдијаграм протока for петље]]
{{Helpbox <!-- NOTE: Please don't remove. Discuss naviagation concept at [[Talk:Do_while_loop#Helpbox_experiment] -->
|name = Конструкције петљи
Ред 29:
 
У увођењу се наводе (вероватно и додељују) све потрбне променљиве. Тип променљивих би требало да буде исти ако користите више променљивих у делу увођења. Услов проверава услов, и прекида петљу ако услов даје логички одговор нетачно. Накнадна мисао се извршава само једном сваки пут када се петља завршава и понавља.
 
Ево примера традиционалне for петље у [[Јава (програмски језик)|Јави]].
<source Lang="java">
Линија 82 ⟶ 83:
 
=== Рани излаз и наставак ===
Неки језици такође могу да пруже и друге пратеће изјаве, којeкоје када су присутне могу да мењају понављање for петље. Заједничке међу њима су [[break изјава|break]] и [[Контрола тока|continue]] изјаве које се налазе у C програмском језику и његовим изданцима. Изјава break прекида петљу одмах након задатог услова. Изјава continue ће одмах кренути на следећу итерацију без даљег напретка кроз тело петље за текућу итерацијy. Остали језици могу имати сличне изјаве или да на други начин обезбеде средства за мењање for петље ; на пример у FORTRAN-у 95:
 
<source lang=FORTRAN>
Линија 91 ⟶ 92:
IF (катастрофа) EXIT !Напушта петљу.
изјаве !Све док је добро, док није катастрофа.
 
END DO !Треба да се усклади са "DO".
</source>
 
=== Обим променљиве у петљи и семантика ===
Различити језици наводе различита правила за оно што ће вредност променљиве у петљи имати након завршетка петље. Ово дозвољава [[Компилатор|преводиоцу]] да генерише код који не оставља никакву вредност променљивој из петље, или можда чак и оставља, али је то непромењена вредност петље и никада се не чува у меморији. Стварно понашање може чак да варира у складу са поставкама оптимизације компајлера, као са Honywell Fortran66 компајлерoмкомпајлером.
 
У неким језицима (али не у [[C (програмски језик)|С]] и [[C++]]) петља променљиве је [[Непроменљив објекат|непроменљива]] у оквиру тела петље, сваки покушај да се промени њена вредност сматра се семантичком грешком. Такве модификације су понекад последица грешке програмера, што може бити веома тешко идентификовати. Међутим сама грешка ће вероватно бити откривена од стране људи који проверавају код. Ситуације у којима адресе променљивих у петљи пролазе као аргументи [[Потпрограми|потпрограма]] су веома тешко проверљиве, јер понашање рутине је у целини непознато у компајлеру. Неки примери у Фортрановом стилу:
Линија 109 ⟶ 111:
</source>
 
Заједнички приступ је да израчуна тачку понављања на почетку петље (са посебним освртом на изливање као у <code>for i := 0 : 65535 do ... ;</code> у шеснаестoбитнoмшеснаестобитном интиџеру аритметике) и са сваким новим издањем смањи ово, рачунајући while такође додавањем вредности <code>I</code>: дупло бројање резултата. Такође прилагођавање вредности I: дупло бројати резултате. Међутим, прилагођавања вредности <code>I</code> у оквиру петље неће променити број понављања извршења.
 
Још једна могућност је да је код генерисан и може се користити помоћну променљиве као променљива петље, вероватно сачуваном у регистару, чија вредност може или не може бити копирана у <code>I</code> на сваком понављању. Опет, модификације <code>I</code> неће утицати на контролу петље, али сада је на раскрсници могуће: у оквиру петље, референце вредности <code>I</code> могу бити (евентуално измењене) садашње вредности <code>I</code> или помоћне променљиве <code>I</code> па су збуњујући резултати загарантовани. На пример, у оквиру петље референцу на елемент <code>I</code> низа вероватно ће запослити помоћну променљиве (поготово ако је одржана у регистару), али ако је параметар на неку рутину (на пример, штампање изјава открива своју вредност), вероватно би позивало на одговарајуће променљиве <code>I</code>. Најбоље је да се избегну такве могућности.
Линија 282 ⟶ 284:
 
Сви делови осим '''do''' и '''od''' су опциони. "'''For''' ''i''" део, ако је присутан, мора бити први. Преостали део ("'''from''' ''f''", "'''by''' ''b''", "'''to''' ''t''", "'''while''' ''w''") може да се појави у било ком редоследу.
 
ИтератвнoИтератвно преко посуде врши се користећи овај облик петље:
'''for''' ''e'' '''in''' ''c'' '''while''' ''w'' '''do'''
''# тело петље''
Линија 288 ⟶ 291:
 
"'''In''' ''c''" део прецизира контејнер, који може бити листа, скуп, збир, производ, функција, низ, или објекат спровођење итератор.
 
For петља може се раскинути са '''od''', '''end''', или '''end do'''.
 
Линија 298 ⟶ 302:
 
=== 1982: PostScript ===
For петља, написана као <code>[почетна] [прираст] [лимит] {...}for</code> започиње са унутрашњом променљивом, и извршава тело док унутрашња променљива није вишaвиша од лимита (или не мањaмања, ако је негативан прираштај ) и, на крају сваке итерације, повећава унутрашњу променљиву. Пре сваког понављања, вредност унутрашње променљиве је пребачена у стек.<ref>{{citeCite book|title=PostScript Language Reference|publisher=Addison-Wesley Publishing Company|page=596|isbn=978-0-201-37922-8|pages=|pages=596}}</ref>
<source lang=AppleScript>
1 1 6 {ИЗЈАВЕ} for
Линија 410 ⟶ 414:
END
</source>
Имајте на уму да је у оригиналном језику Oberon for петља изостављена у корист генералног конструкта Oberon петље. For петљa је поново уведенaуведена у Oberon 2.
 
=== 1991: Python ===
Линија 447 ⟶ 451:
 
For петље могу такође да иду кроз табелу коришћењем <source lang=lua>ipairs()</source> да бројчано понови кроз низове и <source lang=lua>pairs()</source> да насумице прелазили преко речника.
 
Генерисана for петља прави [[Затварање (Програмирање)|затварања]]:
 
Линија 503 ⟶ 508:
<source lang=Java>
for (int i = 0; i < 5; i++) {
//обавља функцијeфункције у оквиру петље;
//може користити изјаву 'break;' да брзо изађе из петље
//може користити изјаву 'continue;' да прескочи тренутни корак
Линија 512 ⟶ 517:
 
=== 1995:JavaScript ===
JavaScript подржава С стил "троизразних" петљи. <code>Вreak</code> и <code>continue</code> изјаве су подржанeподржане у петљи.
<source lang=JavaScript>
for (var i = 0; i < 5; i++) {
Линија 519 ⟶ 524:
</source>
 
Алтернативно, могуће је поновити преко свих кључевaкључева једног низа.
<source lang=JavaScript>
for (var key in array) { // такође ради са assoc. arrays
Линија 576 ⟶ 581:
 
== Имплементација у Интерпретираним програмским језицима ==
У [[Интерпретирани програмски језик|интерпретираним програмским језицима]], for петље могу бити реализоване на више начина. Често су for петље директно преведенeпреведене на [[асемблер]] као упоређујућа упутства и упутства [[GoTo|условних скокова]]. Међутим, то није увек тако. У неким тумачима програмских језика, for петље су само преведенeпреведене на while петљe. <ref>{{cite web|url=https://piazza.com/class#fall2012/cs61b/1575|title=Computer Science 61B: Data Structures and Algorithms in Java 6 - For Loops}}</ref> На пример, узмите следећи Mint/Horchata код:
 
<source lang=text>
Линија 612 ⟶ 617:
 
== Литература ==
* {{Cite book|title=PostScript Language Reference|publisher=Addison-Wesley Publishing Company|isbn=978-0-201-37922-8|pages=|pages=596}}
 
[[Категорија:Контрола тока]]