www.wikidata.uk-ua.nina.az
Cikl riznovid kerivnoyi konstrukciyi u visokorivnevih movah programuvannya priznachenij dlya organizaciyi bagatorazovogo vikonannya naboru instrukcij komand Takozh ciklom mozhe nazivatisya bud yaka bagatokratno vikonuvana poslidovnist komand organizovana bud yakim chinom napriklad iz dopomogoyu umovnogo perehodu Zmist 1 Viznachennya 2 Riznovidi cikliv 2 1 Bezumovni cikli 2 2 Cikl z peredumovoyu 2 3 Cikl z pislyaumovoyu 2 4 Cikl z vihodom z seredini 2 5 Cikl z lichilnikom 2 6 Cikl po kolekciyi foreach 3 Dostrokovij vihid i propusk iteraciyi 3 1 Dostrokovij vihid z ciklu 3 2 Propusk iteraciyi 3 3 Neobhidnist 4 Vkladeni cikli 5 Cikli z dekilkoma gilkami iz vartami 5 1 Cikl Dejkstri 5 2 Cikl pavuk 6 Cikavi fakti 7 Div takozh 8 Metodi optimizaciyi cikliv 9 PrimitkiViznachennya RedaguvatiPoslidovnist instrukcij priznachena dlya bagatorazovogo vikonannya nazivayetsya tilom ciklu Odnorazove vikonannya tila ciklu nazivayetsya iteraciyeyu Viraz sho viznachaye chi bude vchergove vikonuvatisya iteraciya chi cikl zavershitsya nazivayetsya umovoyu vihodu abo umovoyu zavershennya ciklu abo umovoyu prodovzhennya v zalezhnosti vid togo yak interpretuyetsya jogo istinnist yak oznaka neobhidnosti zavershennya chi prodovzhennya ciklu Zminna v yakij zberigayetsya nomer potochnoyi iteraciyi nazivayetsya lichilnikom iteracij ciklu abo prosto lichilnikom ciklu Cikl ne obov yazkovo mistit lichilnik takozh lichilnik ne zabov yazanij buti odnim umova vihodu iz ciklu mozhe zalezhati vid dekilkoh zminyuvanih v cikli zminnih a mozhe viznachatisya zovnishnimi umovami napriklad nastannyam pevnogo chasu v ostannomu vipadku lichilnik vzagali ne znadobitsya Chastinami vikonannya bud yakogo ciklu ye pochatkova inicializaciya zminnih ciklu perevirka umovi vihodu vikonannya tila ciklu ta onovlennya zminnoyi ciklu na kozhnij iteraciyi Krim togo bilshist mov programuvannya nadayut zasobi dlya dostrokovogo keruvannya ciklom napriklad operatori zavershennya ciklu tobto vihodu z ciklu nezalezhno vid istinnosti umovi vihodu v movi S break i operatori propushennya iteraciyi v movi S continue Riznovidi cikliv RedaguvatiBezumovni cikli Redaguvati Inodi v programah vikoristovuyutsya cikli vihid z yakih ne peredbacheno logikoyu programi Taki cikli nazivayutsya bezumovnimi abo neskinchennimi Osoblivih sintaksichnih zasobiv dlya stvorennya takih cikliv cherez yihnyu netipovist movi programuvannya ne peredbachayut tomu taki cikli stvoryuyutsya za dopomogoyu konstrukcij priznachenih dlya stvorennya zvichajnih abo umovnih cikliv Dlya zabezpechennya neskinchennogo povtorennya perevirka umovi v takomu cikli vidsutnya yaksho dozvolyaye sintaksis yak napriklad u cikli LOOP END LOOP movi Ada abo zaminyuyetsya konstantnim znachennyam while true do v Paskal Cikl z peredumovoyu Redaguvati Cikl z peredumovoyu cikl sho vikonuyetsya doki istinna deyaka umova vkazana pered jogo pochatkom Cya umova pereviryayetsya do pochatku vikonannya tila ciklu tomu tilo mozhe buti ne vikonane zhodnogo razu yaksho umova z pochatku hibna U bilshosti procedurnih mov programuvannya zdijsnyuyetsya za dopomogoyu instrukciyi while zvidsi jogo druga nazva while cikl Na movi Paskal cikl z peredumovoyu maye takij viglyad while lt umova gt do begin lt tilo ciklu gt end Na movi Si while lt umova gt lt tilo ciklu gt Cikl z pislyaumovoyu Redaguvati Cikl z pislyaumovoyu cikl v yakomu umova pereviryayetsya pislya vikonannya tila ciklu Zvidsi viplivaye sho tilo ciklu zavzhdi vikonuyetsya hocha b odin raz U movi Paskal takij cikl zdijsnyuye instrukciya repeat until u Si do while Na movi Paskal cikl z pislyaumovoyu maye takij viglyad repeat lt tilo ciklu gt until lt umova gt Na movi Si do lt tilo ciklu gt while lt umova gt U traktuvanni umovi ciklu z pislyaumovoyu v riznih movah ye rozbizhnosti U Paskali i movah pohidnih vid nogo umova takogo ciklu traktuyetsya yak umova vihodu cikl zavershuyetsya koli umova istinna a v Si ta jogo nashadkah yak umova prodovzhennya cikl zavershuyetsya koli umova hibna Cikl z vihodom z seredini Redaguvati Cikl z vihodom z seredini najzagalnishij tip umovnogo ciklu Sintaksichno takij cikl oformlyayetsya za dopomogoyu troh instrukcij pochatok ciklu kinec ciklu ta instrukciyi komandi vihodu z ciklu Instrukciya pochatku poznachaye tochku programi z yakoyi pochinayetsya tilo ciklu instrukciya kincya tochku de tilo zakinchuyetsya Vseredini tila maye buti prisutnya komanda vihodu z ciklu pri vikonannyu yakoyi cikl zavershuyetsya i keruvannya peredayetsya na operator nastupnij pislya instrukciyi kincya ciklu Prirodno shob cikl vikonavsya bilsh nizh odin raz komanda vihodu maye viklikatisya ne bezumovno a tilki pri vikonanni umovi vihodu Principovoyu vidminnistyu takogo riznovidu ciklu vid rozglyanutih vishe ye te sho chastina tila ciklu roztashovana pislya pochatku ciklu i do komandi vihodu vikonuyetsya zavzhdi navit yaksho umova vihodu z ciklu istinna pri pershij iteraciyi a chastina tila ciklu nastupna za komandoyu vihodu ne vikonuyetsya pri ostannij iteraciyi Legko pobachiti sho za dopomogoyu ciklu z vihodom z seredini legko utvoriti yak cikl z peredumovoyu roztashuvavshi komandu vihodu na pochatku tila ciklu tak i cikl z pislyaumovoyu roztashuvavshi komandu vihodu v kinci tila ciklu Chastina mov programuvannya mistit osoblivi instrukciyi dlya utvorennya ciklu z vihodom z seredini Tak u movi Ada dlya cogo vikoristovuyetsya konstrukciya LOOP END LOOP i komanda vihodu EXIT abo EXIT WHEN LOOP Chastina tila ciklu EXIT WHEN lt umova vihodu gt Chastina tila ciklu IF lt umova vihodu gt THEN EXIT END Chastina tila ciklu END LOOP Tut vseredini ciklu mozhe buti bud yaka kilkist komand vihodu oboh tipiv Sami komandi vihodu principovo ne vidriznyayutsya zazvichaj EXIT WHEN zastosovuyut koli pereviryayetsya tilki umova vihodu a prosto EXIT koli vihid z ciklu zdijsnyuyetsya v odnomu z variantiv skladnogo umovnogo operatora U tih movah de podibnih konstrukcij ne peredbacheno cikl z vihodom z seredini mozhe buti pobudovanij za dopomogoyu bud yakogo umovnogo ciklu ta instrukciyi dostrokovogo vihodu z ciklu takogo yak break v Si exit v Turbo Paskali t p abo instrukciyi bezumovnogo perehodu goto Cikl z lichilnikom Redaguvati Dokladnishe For cikl Cikl z lichilnikom cikl v yakomu deyaka zminna zminyuye svoye znachennya vid zadanogo pochatkovogo znachennya do kincevogo znachennya z deyakim krokom i dlya kozhnogo znachennya ciyeyi zminnoyi tilo ciklu vikonuyetsya odin raz V bilshosti procedurnih mov programuvannya realizuyetsya operatorom for v yakomu vkazuyetsya lichilnik tak zvana zminna ciklu potribna kilkist prohodiv abo granichne znachennya lichilnika i mozhlivo krok z yakim zminyuyetsya lichilnik Napriklad v movi Oberon 2 takij cikl maye viglyad FOR v b TO e BY s DO tilo ciklu END tut v lichilnik b pochatkove znachennya lichilnika e mezhove znachennya lichilnika s krok Neodnoznachne pitannya pro znachennya zminnoyi po zavershenni ciklu v yakomu cya zminna vikoristovuvalas yak lichilnik Napriklad yaksho v programi na movi Paskal zustrinetsya konstrukciya viglyadu i 100 for i 0 to 9 do begin tilo ciklu end k i vinikaye pitannya yake znachennya bude v pidsumku prisvoyene zminnij k 9 10 100 mozhe yakes inshe A yaksho cikl zavershitsya dostrokovo Vidpovidi zalezhat vid togo chi zbilshuyetsya znachennya lichilnika pislya iteraciyi i chi ne zminyuye translyator ce znachennya dodatkovo She odne zapitannya sho bude yaksho vseredini ciklu lichilniku bude yavno prisvoyene nove znachennya Rizni movi programuvannya mayut rizni pidhodi do cogo pitannya V deyakih povedinku lichilnika chitko reglamentovano V inshih napriklad Paskali standart movi ne viznachaye ani kincevogo znachennya lichilnika ani naslidkiv jogo yavnoyi zmini v cikli ale ne raditsya zminyuvati znachennya lichilnika yavno i vikoristovuvati jogo pislya zavershennya ciklu bez povtornoyi inicializaciyi Programa na Paskali sho ignoruye cyu poradu matime neviznachenu povedinku tobto mozhe davati rizni rezultati pri vikonanni na riznih sistemah chi pri vikoristanni riznih translyatoriv abo navit riznih rezhimiv optimizaciyi odnogo j togo zh translyatora Radikalno virishene pitannya v movi Ada lichilnik vvazhayetsya opisanim v zagolovku ciklu ta poza ciklom prosto ne isnuye Navit yaksho im ya lichilnika vzhe vikoristovuyetsya v programi vseredini ciklu yak lichilnik vikoristovuyetsya okrema zminna Lichilniku zaboroneno yavno prisvoyuvati bud yaki znachennya vin mozhe zminyuvatis lish vnutrishnim mehanizmom operatora ciklu V rezultati konstrukciya i 100 for i in 0 9 loop tilo ciklu end loop k i zovnishno analogichna vishenavedenomu ciklu na Paskali traktuyetsya odnoznachno zminnij k bude prisvoyeno znachennya 100 oskilki zminna i vikoristovuvana poza mezhami danogo ciklu ne maye zhodnogo stosunku do lichilnika ciklu i yakij zminyuyetsya vseredini ciklu Podibne vidokremlennya lichilnika zruchne i bezpechne ne potriben okremij opis dlya nogo ta minimizuyetsya jmovirnist vipadkovih pomilok pov yazanih iz vipadkovim rujnuvannyam zovnishnih stosovno ciklu zminnih Yaksho programistu potribno vklyuchiti v gotovij kod cikl z lichilnikom to jogo ne turbuye chi isnuye zminna z im yam yake vin obrav dlya lichilnika i jomu ne potribno dodavati opis svogo lichilnika Vin prosto pishe kod zi zminnoyu lichilnikom im ya yakoyi jomu zruchne i mozhe buti vpevnenim sho niyakoyi koliziyi imen ne vidbudetsya Cikl z lichilnikom zavzhdi mozhna napisati yak umovnij cikl pered pochatkom yakogo lichilniku prisvoyuyetsya pochatkove znachennya a umovoyu vihodu z ciklu ye dosyagnennya lichilnikom kincevogo znachennya v tilo ciklu pri comu dodayetsya operator zmini lichilnika na potribnij krok Odnak specialni operatori ciklu z lichilnikom mozhut efektivnishe translyuvatisya bo formalizovanij viglyad takogo ciklu dozvolyaye vikoristovuvati specialni procesorni komandi organizaciyi cikliv V deyakih movah napriklad Si ta inshih pohidnih vid neyi cikl for nezvazhayuchi na sintaksichnu formu ciklu z lichilnikom v dijsnosti ye ciklom z peredumovoyu Tobto v Si konstrukciya ciklu for i 0 i lt 10 i tilo ciklu faktichno yavlyaye soboyu inshij variant zapisu konstrukciyi 1 i 0 while i lt 10 tilo ciklu i Tobto v konstrukciyi for spochatku pishetsya dovilne rechennya inicializaciyi ciklu potim umova prodovzhennya i nasamkinec vikonuvana pislya kozhnogo tila ciklu deyaka operaciya ce ne obov yazkovo maye buti zmina lichilnika ce mozhe buti modifikaciya vkazivnika abo bud yaka zovsim storonnya diya Dlya mov takogo tipu vishezaznachena problema rozv yazuyetsya duzhe prosto zminna lichilnik povoditsya cilkom peredbachuvano i po zaversheni ciklu zberigaye svoye ostannye znachennya Cikl po kolekciyi foreach Redaguvati She odnim variantom ye cikl yakij probigaye elementi z deyakoyi mnozhini bez yavnogo zadannya poryadku pereboru cih ob yektiv Taki cikli yavlyayut soboyu formalnij zapis instrukciyi vidu Vikonati diyu X dlya vsih elementiv mnozhini M Teoretichno takij cikl niyakim chinom ne viznachaye v yakomu poryadku bude zastosovuvatis diya do elementiv mnozhini hocha pevni movi programuvannya zvisno mozhut vstanovlyuvati konkretnij poryadok pereboru elementiv Dovilnist daye mozhlivist optimizaciyi vikonannya ciklu za rahunok organizaciyi dostupu v najvigidnishomu poryadku a ne v poryadku zaznachenomu programistom Za nayavnosti mozhlivosti paralelnogo vikonannya dekilkoh operacij mozhlivo navit rozpodilennya vikonannya ciklu po kolekciyi koli odna i ta sama operaciya odnochasno vikonuyetsya na riznih obchislyuvalnih modulyah dlya riznih ob yektiv pri tomu sho logichno programa zalishayetsya poslidovnoyu Cikli po kolekciyi realizovano v deyakih movah programuvannya C Eiffel Java JavaScript Perl Python PHP LISP Tcl C 11 ta in voni dayut zmogu cikl po vsih elementah danoyi kolekciyi ob yektiv U viznachenni takogo ciklu treba vkazati lishe kolekciyu ob yektiv i zminnu yakij v tili ciklu bude prisvoyene znachennya obroblyuvanogo v cej chas ob yekta chi posilannya na nogo V riznih movah programuvannya sintaksis operatora riznij C foreach type item in set vikoristannya item C standart 2011 roku const char str one two forty four for const char p str std cout lt lt p lt lt std endl Perl foreach set vikoristannya abo for set vikoristannya abo foreach item set vikoristannya item Eiffel across set as cursor loop vikoristannya cursor item end Java for type item set vikoristannya item JavaScript for txtProperty in objObject vikoristannya objObject txtProperty PHP foreach arr as item vikoristannya item Visual Basic NET For Each item As type In set vikoristannya item Next item Windows PowerShell foreach item in set vikoristannya item abo set ForEach Object vikoristannya Python for item in iterator instance vikoristannya itemDostrokovij vihid i propusk iteraciyi RedaguvatiBagato yaki z mov programuvannya sho mayut v svoyemu sintaksisi ciklichni konstrukciyi mayut takozh osoblivi komandi yaki dozvolyayut porushiti poryadok roboti cih konstrukcij komandu dostrokovogo vihodu z ciklu ta komandu propusku iteraciyi Dostrokovij vihid z ciklu Redaguvati Komanda dostrokovogo vihodu zastosovuyetsya koli neobhidno perervati vikonannya ciklu v yakomu umovi vihodu she ne dosyagnuto Take buvaye napriklad koli pid chas vikonannya ciklu zustrichayetsya pomilka pislya yakoyi podalshe vikonannya ciklu ne maye sensu Komanda dostrokovogo vihodu zazvichaj nazivayetsya EXIT abo break a yiyi diya analogichna diyi komandi bezumovnogo perehodu goto na komandu rozmishenu bezposeredno za ciklom vseredini yakogo cya komanda znahoditsya Tak u movi Si dva nizhchenavedenih cikli pracyuyut cilkom odnakovo Zastosuvannya operatora break while lt umova gt operatori if lt pomilka gt break operatori prodovzhennya programi Analogichnij urivok bez break while lt umova gt operatori if lt pomilka gt goto break label operatori break label prodovzhennya programi V oboh vipadkah yaksho v tili ciklu vikonuyetsya umova lt pomilka gt bude vikonanij perehid na operatori poznacheni yak prodovzhennya programi Takim chinom operator dostrokovogo vihodu z ciklu za suttyu prosto maskuye bezumovnij perehid odnak vikoristannyu break varto viddati perevagu pered vikoristannyam goto oskilki povedinka break chitko zadana movoyu potencijno mensh nebezpechna nemaye napriklad imovirnosti pomilitisya z roztashuvannyam abo nazvoyu mitki perehodu Okrim togo yavnij dostrokovij vihid z ciklu ne porushuye zasad strukturnogo programuvannya Zvichajnij operator dostrokovogo vihodu pererivaye robotu togo ciklu v yakomu vin bezposeredno znahoditsya V bagatoh movah programuvannya funkcionalnist cogo operatora rozshirena vin dozvolyaye vihoditi z dekilkoh vkladenih cikliv div nizhche U takih vipadkah cikl z yakogo treba vijti poznachayetsya mitkoyu a v operatori dostrokovogo vihodu vkazuyetsya cya mitka Propusk iteraciyi Redaguvati Danij operator zastosovuyetsya koli v potochnij iteraciyi ciklu neobhidno propustiti vsi komandi do kincya tilu ciklu Pri comu sam cikl ne pererivayetsya umovi prodovzhennya abo vihodu obchislyuyutsya zvichajnim chinom U movi Si ta yiyi movah nashadkah yak komanda propusku iteraciyi vikoristovuyetsya operator continue v konstrukciyi ciklu Diya cogo operatora analogichna bezumovnomu perehodu na ryadok vseredini tila ciklu nastupnij za ostannoyu jogo komandoyu Napriklad kod na Si yakij znahodit sumu vsih dodatnih elementiv masivu mozhe mati takij viglyad int arr ARRSIZE Sumuvannya okremo vsih i tilki dodatnih elementiv masivu arr iz zastosuvannyam continue int sum all 0 int sum pos 0 for int i 0 i lt ARRSIZE i sum all arr i if arr i lt 0 continue sum pos arr i Te same z goto int sum all 0 int sum pos 0 for int i 0 i lt ARRSIZE i sum all arr i if arr i lt 0 goto cont label sum pos arr i cont label Z drugogo urivku yasno vidno yak pracyuye continue vin prosto peredaye vikonannya za ostannyu komandu ciklu iz propuskom komandi sumuvannya yaksho chergovij element masivu ne zadovilnyaye umovi Takim chinom v sum pos nakopichuyetsya suma tilki dodatnih elementiv masivu Neobhidnist Redaguvati Z poglyadu strukturnogo programuvannya komandi dostrokovogo vihodu z ciklu i prodovzhennya iteraciyi ye nadlishkovimi oskilki yih diya mozhe buti legko zmodelovana chisto strukturnimi zasobami Bilsh togo na dumku ryada teoretikiv programuvannya zokrema Edsgera Dejkstri sam fakt vikoristannya v programi nestrukturnih zasobiv chi ce klasichnij bezumovnij perehid chi bud yaka z jogo specialnih form na kshtalt break abo continue ye svidchennyam nedostatno propracovanogo algoritmu rozv yazannya zadachi Odnak na praktici kod programi chasto ye zapisom nayavnogo ranish sformulvanogo algoritmu perepracovuvati yakij nedocilno za chisto tehnichnimi prichinami Sproba zaminiti v takomu kodi komandu dostrokovogo vihodu na strukturni konstrukciyi chasto viyavlyayetsya neefektivnoyu abo gromizdkoyu Napriklad vishepodanij urivok kodu mozhe buti zapisanij bez vikoristannya komandi break tak dostrokovij vihid z ciklu bez break bool flag false praporec dostrokovogo zavershennya while lt umova gt amp amp flag operatori if lt pomilka gt flag true else operatori prodovzhennya programi Legko perekonatis sho cej urivok pracyuvatime tak samo yak i poperednij riznicya lish v tomu sho v misci perevirki na pomilku zamist bezposerednogo vihodu z ciklu vstanovlyuyetsya praporec dostrokovogo vihodu yakij pereviryayetsya potomu v shtatnij umovi prodovzhennya ciklu Odnak dlya vidmovi vid komandi dostrokovogo vihodu dovelos dodati v programu opis praporcya i drugu gilku umovnogo operatora do togo zh vidbulosya rozmittya logiki programi rishennya pro dostrokovij vihid prijmayetsya v odnomu misci a vikonuyetsya v inshomu V rezultati programa ne stala ani prostishoyu ani korotshoyu ani zrozumilishoyu Desho inakshe stoyit sprava z komandoyu propusku iteraciyi Vona yak pravilo duzhe legko zaminyuyetsya na umovnij operator Napriklad podanij vishe urivok sumuvannya masivu mozhna zapisati tak int arr ARRSIZE Sumuvannya okremo vsih i tilki dodatnih elementiv masivu arr iz zaminoyu continue int sum all 0 int sum pos 0 for int i 0 i lt ARRSIZE i sum all arr i if arr i gt 0 Umova zaminena na protilezhnu sum pos arr i Yak bachimo dostatno bulo zaminiti umovu na protilezhnu ta pomistiti zaklyuchnu chastinu chastinu tila ciklu v umovnij operator Mozhna zauvazhiti sho programa stala korotshoyu za rahunok vidalennya komandi propusku iteraciyi i odnochasno bilsh logino iz kodu bezposeredno vidno sho sumuyutsya dodatni elementi Nezvazhayuchi na obmezhenu korisnist i mozhlivist zamini na inshi movni konstrukciyi komandi propusku iteraciyi i osoblivo dostrokovogo vihodu z ciklu v okremih vipadkah viyavlyayutsya vkraj korisnimi same cherez ce voni zberigayutsya v suchasnih movah programuvannya Vkladeni cikli RedaguvatiIsnuye mozhlivist utvoriti cikl vseredini tila drugogo ciklu Takij cikl zvetsya vkladenim ciklom Vkladenij cikl shodo ciklu v tilo yakogo vin vkladenij bude jmenuvatisya vnutrishnim ciklom i navpaki cikl v tili yakogo isnuye vkladenij cikl bude jmenuvatis zovnishnim shodo vkladenogo Vseredini vkladenogo ciklu mozhe buti nastupnij vkladenij cikl utvoryuyuchi nastupnij riven vkladenosti i tak dali Kilkist rivniv vkladenosti yak pravilo ne obmezhuyetsya Povna kilkist vikonannya tila vnutrishnogo ciklu ne perevishuye dobutku kilkosti iteracij vnutrishnogo i vsih zovnishnih cikliv Napriklad vzyav tri vkladenih odin v odnogo cikli kozhnij po 10 iteracij otrimayemo 10 vikonan tila zovnishnogo ciklu 100 dlya ciklu drugogo rivnya i 1000 v najbilsh vkladenomu cikli Odna z problem pov yazanih iz vkladenimi ciklami organizaciya dostrokovogo vihodu z nih V bagatoh movah programuvannyaye operator dostrokovogo zavershennya ciklu break u Si exit u Paskali last v Perl i t in ale vin yak pravilo zabezpechuye vihid lishe z ciklu togo rivnya zvidki viklikanij Viklik jogo u vkladenomu cikli prizvede do zavershennya lish cogo vkladenogo ciklu zovnishnij cikl prodovzhit vikonannya Problema mozhe zdatisya nadumanoyu ale vona dijsno inodi vinikaye pri programuvanni skladnoyi obrobki danih koli algoritm vimagaye negajnogo pererivannya za pevnih umov nayavnist yakih mozhna pereviriti tilki v gluboko vkladenomu cikli Rozv yazkiv problemi vihodu z vkladenih cikliv dekilka Najprostishij vikoristati operator bezumovnogo perehodu goto dlya vihodu v tochku programi nastupnu bezposeredno za vkladenim ciklom Cej variant kritikuyetsya prihilnikami strukturnogo programuvannya yak i vsi konstrukciyi sho vimagayut vikoristannya goto Deyaki movi programuvannya napriklad Modula 2 prosto ne mayut operatora bezumovnogo perehodu tomu v nih podibna situaciya nemozhliva Alternativa vikoristovuvati shtatni zasobi zavershennya cikliv u vipadku neobhidnosti vstanovlyuyuchi osoblivi praporci sho vimagayut negajnogo zavershennya obrobki Nedolik uskladnennya kodu znizhennya produktivnosti bez yakih nebud perevag okrim teoretichnoyi pravilnosti cherez vidmovu vid goto Roztashuvannya vkladenogo ciklu v proceduri Ideya polyagaye v tomu shob vsyu diyu v yakij mozhe viniknuti potreba dostrokovogo pererivannya oformiti u viglyadi okremoyi proceduri i dlya dostrokovogo vihodu viklikati operator vihodu z proceduri yaksho takij v nayavnosti v movi programuvannya V movi Si napriklad mozhna pobuduvati funkciyu z vkladenim ciklom a vihid z neyu organizuvati za dopomogoyu operatora return Nedolik vidilennya urivka kodu v okremu proceduru ne zavzhdi obgruntovane i ne vsi movi mayut shtatni zasobi dlya dostrokovogo zavershennya procedur Skoristatis mehanizmom generaciyi i obrobki vinyatkiv vinyatkovih situacij yakij zaraz nayavnij u bilshosti mov visokogo rivnya V comu vipadku v neshtatnij situaciyi kod u vkladenomu cikli stvoryuye vinyatkovu situaciyu a blok obrobki vinyatkiv v yakomu znahoditsya vkladenij cikl perehoplyuye ta obroblyaye jogo Nedolik realizaciya mehanizmu obrobki vinyatkiv u bilshosti vipadkiv taka sho shvidkist roboti programi zmenshuyetsya Pravda v suchasnih umovah ce ne osoblivo vazhlivo praktichno vtrata produktivnosti taka mala sho maye znachennya lish dlya zovsim nebagatoh zastosunkiv Nasamkinec isnuyut specalni movni zasobi dlya vihodu z vkladenih cikliv Tak v movi Ada programist mozhe poznachiti zovnishnij cikl poznachkoyu i v komandi dostrokovogo zavershennya ciklu vkazati cyu poznachku Vihid vidbudetsya ne z potochnogo ciklu a z usih vkladenih cikliv do poznachenogo vklyuchno loop y FOR y IN 1 MAXY DO BEGIN FOR x IN 1 MAXX DO BEGIN EXIT loop y WHEN object found x y END ENDCikli z dekilkoma gilkami iz vartami RedaguvatiCikl Dejkstri Redaguvati V teoriyi programuvannya vidoma she odna forma ciklichnoyi konstrukciyi yaka principovo vidriznyayetsya vid klasichnih yaka otrimala nazvu cikl Dejkstri za im yam Edsgera Dejkstri yakij pershim yiyi opisav V klasichnomu dejksrivskomu opisi vona maye takij viglyad do P1 S1 Pn Sn od Tut do poznachka pochatku konstrukciyi ciklu od poznachka zavershennya konstrukciyi ciklu Pi i ta varta logichnij viraz yakij mozhe mati znachennya istina abo hiba Si i a komanda pid vartoyu Cikl skladayetsya z odniyeyi chi dekilkoh gilok kozhna z yakih yavlyaye soboyu paru z varti i komandi v dijsnosti komanda mozhe buti skladnoyu Pri vikonanni ciklu Dejkstri v kozhnij iteraciyi vidbuvayetsya obchislennya vart Yaksho hocha b odna z nih istinna vikonuyetsya vidpovidna komanda pislya chogo pochinayetsya nova iteraciya yaksho istinni dekilka vartovih umov vikonuyetsya lish odna komanda Yaksho vsi varti hibni cikl zavershuyetsya Nevazhko zauvazhiti sho cikl Deckstri z odniyeyu vartoyu i odniyeyu komandoyu yavlyaye soboyu zvichajnij cikl z peredumovoyu Hocha cikl Dejkstri buv vinajdenij she v 1970 h specialnih konstrukcij dlya jogo stvorennya v movah programuvannya ne isnuye Yedinim vinyatkom stav neshodavno stvorenij Oberon 07 persha realna mova programuvannya sho yavno pidtrimuye cikl z dekilkoma gilkami z vartami Vtim cikl Dejkstri mozhe buti bez osoblivih trudnoshcv zmodelovanij za dopomogoyu zvichajnih konstrukcij mov programuvannya Os odin z mozhlivih prikladiv jogo realizaciyi na movi Ada loop if P1 then S1 elsif Pn then Sn else exit end if end loop Tut P1 Pn vartovi umovi varti a S1 Sn vidpovidni komandi Cikl Dejkstri zruchnij pri realizaciyi specifichnih obchislen yaki povtoryuyutsya i yaki nezruchno opisuvati za dopomogoyu tradicijnishih ciklichnih konstrukcij Napriklad cim ciklom prirodno predstavlyayetsya skinchennij avtomat kozhna gilka vidpovidaye odnomu stanu avtomata varti vibudovuyutsya tak shob v potochnij iteraciyi obiralas gilka vidpovidna potochnomu stanu avtomata a kod varti zabezpechuye vikonannya obchislen v potochnomu stani i perehid v nastupne tobto taka zmina zminnih pislya yakoyi na nastupnij iteraciyi bude istinoyu varta potribnoyi gilki Cikl pavuk Redaguvati Legko bachiti sho cikl Dejkstri ne mistit yavnoyi umovi prodovzhennya abo vihodu z ciklu sho ne vsima teoretikami programuvannya rozglyadayetsya yak blago Tomu bulo zaproponovana uskladnena konstrukciya ciklu Dejkstri yaka otrimala nazvu cikl pavuk U tij zhe notaciyi vona maye takij viglyad do P1 S1 Pn Sn out Q1 T1 Qn Tn else E od Tut pislya poznachki out dodano gilki zavershennya utvoreni z umov vihodu Qi i komand zavershennya Ti Okrim togo dodano gilku alternativnogo zavershennya else z komandoyu E Cikl pavuk vikonuyutsya takim chinom Obchislyuyutsya vartovi Yaksho isnuye istinnij vartovij vikonuyetsya vidpovidna komanda Obchislyuyetsya umovi vihodu Yaksho isnuye istinna umova vihodu vikonuyetsya vidpovidna komanda zavershennya pislya chogo vikonannya ciklu zavershuyetsya Yaksho vsi umovi vihodu hibni pochinayetsya nastupna iteraciya ale tilki v tomu vipadku yaksho v potschnij iteraciyi buv istinnim hocha b odin z vartovih Yaksho v danij iteraciyi viyavilis hibnimi i vsi vartovi i vsi umovi vihodu vikonuyetsya komanda alternativnogo zavershennya E pislya chogo vikonannya ciklu pererivayetsya Struktura ciklu pavuka dozvolyaye granichno strogo opisati umovi vikonannya ciklu Zgidno z teoretichnimi polozhennyami gilka altenativnogo zavershennya ne povinna vikoristovuvatisya yak odin iz variantiv korektnogo pripinennya roboti ciklu vsi taki varianti mayut buti oformleni v viglyadi vidpovidnih gilok zavershennya z yavnoyu umovoyu vona sluguye lish dlya togo shob vidslidkuvati situaciyu koli za yakihos prichin cikl pochav vikonuvatis neshtatno Tobto komanda alternativnogo zavershennya mozhe lishe analizuvati prichini pomilki ta podavati rezultati rozboru Hoch yavnoyi pidtrimki na rivni sintaksisu movi dlya cogo ciklu ne isnuye v zhodnij movi programuvannya cikl pavuk yak i cikl Dejkstri mozhe buti zmodelovanim za dopomogoyu tradicijnih strukturnih konstrukcij Cikavi fakti RedaguvatiNiklaus Virt svogo chasu nazivav cikl z lichilnikom marginalnim stverdzhuyuchi sho taka konstrukciya ye nadlishkovoyu i maye buti viklyuchena z sintaksisu mov programuvannya yak nesistemna Zgidno z jogo predstavlennyam u movi programuvannya Oberon ciklu z lichilnikom ne bulo Odnak u movi Oberon 2 stvorenij Virtom i Mossenbokom yak rozvitok Oberona cikl z lichilnikom FOR z yavivsya v interesah praktichnoyi zruchnosti vikoristannya 2 Div takozh RedaguvatiNeskinchennij cikl RekursiyaMetodi optimizaciyi cikliv RedaguvatiLoop tiling Rozmotuvannya ciklu Loop unswitchingPrimitki Redaguvati Strogo kazhuchi totozhnist ne povna bo inakshe bude pracyuvati operator continue Oberon voploshenie mechty Niklausa Virta nbsp Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi 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 cherven 2011 Otrimano z https uk wikipedia org w index php title Cikl programuvannya amp oldid 40533465