Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Цикл түрлері. Шартсыз циклдер






Кейде программаларда олардан шығ у шарты программа логикасында кө зделмеген циклдар пайдаланылады. Мұ ндай циклдарды шартсыз немесе аяқ талмайтын циклдер деп атайды. Олардың типсіздігіне байланысты шексіз циклдерді қ ұ руғ а арналғ ан арнайы синтасистік қ ұ ралдары программалау тілдерінде кө зделмеген, сондық тан ондай циклдарды кә дімгі (немесе шартты) циклдарды қ ұ руғ а арналғ ан қ ұ рылымдар арқ ылы қ ұ рады. Шексіз қ айталануды қ амтамасыз ету ү шін ондай циклде шартты тексеру жоқ (егер синтаксис рұ қ сат етсе, мысалы, Ада тілінің LOOP…END LOOP циклындағ ыдай) немесе тұ рақ ты мә нбен алмастырылады (Паскальда while true do …).

Алдынғ ы шартты цикл – ол басында кө рсетілген шарт ақ иқ ат болып тұ рғ анша орындала беретін цикл. Бұ л шарт цикл тұ лғ асын орындау алдында тексеріледі, сондық тан цикл тұ лғ асы бір де бір рет орындалмауы да мү мкін (егер шарт ең басынан жалғ ан болса). Программалаудың процедуралық тілдерінің кө бісінде ол while операторы арқ ылы жү зеге асырылады, сондық тан оның екінші аталуы while-цикл.

Кейінгі шартты цикл – ол шарты цикл тұ лғ асы орындалғ аннан кейін тексерілетін цикл. Сондық тан, цикл тұ лғ асы ә рдайым кемінде бір рет болса да орындалады. Паскаль тілінде бұ л циклды repeat..until; операторы, С тілінде — do…while операторы жү зеге асырады.

 

а – алдың ғ ы шартты цикл, б – кейінгі шартты цикл

Сурет 4.3 – Циклдік алгоритмдерінің блок-схемалар мысалдары

Ортасынан шығ у циклы – шартты циклдің ең ортақ формасы. Синтаксис тұ рғ ысында мұ ндай цикл ү ш қ ұ рылыс арқ ылы ұ йымдастырылады: цикл басы, цикл соң ы жә не циклдан шығ у бұ йрық тары. Цикл басының қ ұ рылысы программадағ ы цикл тұ лғ асы басталатын нү ктені таң балайды, цикл соң ының қ ұ рылысы – цикл тұ лғ асы аяқ талатын нү ктені. Тү лғ аның ішінде циклдан шығ у бұ йрығ ы болуы тиіс. Ол бұ йрық оррындалғ ан кезде цикл аяқ талады да басқ ару цикл соң ының қ ұ рылысынан кейінгі операторғ а беріледі. Ә рине, цикл бір реттен кө п орындалуы ү шін шығ у бұ йрығ ы шартсыз емес, ал циклдан шығ у шарты орындалғ ан кезде ғ ана шақ ырылуы тиіс.

Жоғ арыда қ арастырылғ ан циклдерге қ арағ анда циклдің мұ ндай тү рінің принципиалды айырмашылығ ы цикл басынан кейін шығ у бұ йрығ ына дейін орналасқ ан цикл тұ лғ асының бө лігі ә рдайым орындалады (циклдан шығ у шарты бірінші итерацияның ө зінде ақ ихат болғ ан жағ дайда да), ал шығ у бұ йрығ ынан кейін орналасқ ан цикл тұ лғ асының бө лігі соң ғ ы итерацияда орындалмайды.

Ортасынан шығ у циклы арқ ылы алдың ғ ы шартты циклді (шығ у бұ йрығ ын цикл тұ лғ асының басында орналастырып) жә не кейінгі шартты циклді (шығ у бұ йрығ ын цикл тұ лғ асының соң ында орналастырып) оң ай модельдеуге болады.

Программалау тілдердің бір қ атары ортасынан шығ у циклын ұ йымдастыру ү шін арнайы қ ұ рылыстарды қ амтиды. Мысалы, Ада тілінде ол ү шін LOOP…END LOOP қ ұ рылысы жә не EXIT немесе EXIT WHEN шығ у бұ йрық тары бар:

LOOP

... Цикл тұ лғ асының бө лігі

EXIT WHEN < шығ у шарты>;

... Цикл тұ лғ асының бө лігі

IF < шығ у шарты> THEN

EXIT;

END;

... Цикл тұ лғ асының бө лігі END LOOP:

Мұ ндағ ы цикл ішінде екі типтегі шығ у бұ йрық тарының саны кезкелген болуы мү мкін. Шығ у бұ йрық тардың ө здері принципиалды тұ рғ ыда ажыратылмайды, ә детте тек шығ у шарты тексерілетін кезде EXIT WHEN қ олданылады, ал жай EXIT-ті циклдан шығ у кү рделі шартты оператор нұ сқ аларының біреуінде іске асырылады.

Ұ қ сама қ ұ рылыстары кө зделмеген тілдерде ортадан шығ у циклін кезкелген шартты цикл жә не циклдан мерзімнен бұ рын шығ у операторы (С тіліндегі break сияқ ты) немесе шартсыз ө ту goto операторы арқ ылы модельдеуге болады.

Санауышы бар цикл – ол ішіндекейбір айнымалы ө з мә нін берілген бастапқ ы мә ннен соң ғ ы мә нге дейін белгілі бір қ адаммен ө згертетін жә не осы айнымалының ә р мә ні ү шін цикл тұ лғ асы бір рет орындалатын цикл. Программалаудың процедуралық тілдерінің кө бісінде мұ ндай цикл for операторы арқ ылы жү зеге асырылады. Ол операторда санауыш (цикл айнымалысы), ө тулердің талап етілетін саны (немесе санауыштың шекті мә ні) жә не, мү мкін, санауыш ө згеретін қ адамы. Мысалы, Оберон-2 тілінде мұ ндай циклдың тү рі:

FOR v: = b TO e BY s DO

... цикл тұ лғ асы

END

(мұ ндағ ы v - санауыш, b – санауыштың бастапқ ы мә ні, e - санауыштың шекті мә ні, s - қ адам).

Оның ішінде берілген айнымалы санауыш ретінде қ олданылғ ан айнымалының цикл аяқ талғ анынан кейінгі мә ні туралы сұ рақ бір мә нді емес. Мысалы, егер Паскаль тіліндегі программада келесі тү рдегі қ ұ рылыс кездессе:

i: = 100;

for i: = 0 to 9 do begin

... цикл тұ лғ асы

end; k: = i;

сұ рақ пайда болады: нә тижеде k айнымалысына қ андай мә н меншіктеледі: 9, 10, 100, мү мкін басқ а бір мә н? Ал егер цикл мерзімнен бұ рын аяқ талса? Жауаптар соң ғ ы итерациядан кейін санауыштың мә ні артады ма жә не транслятор сол мә нді қ осымша ө згертеді ма деген сұ рақ тарғ а тә уелді. Жә не бір сұ рақ: егер циклдың ішінде санауышқ а анық тү рде жаң а мә н меншіктелсе не болады? Тү рлі программалау тілдер бұ л мә селелерді ә ртү рлі шешеді. Кейбір тілдерде санауыштың тә ртібі айқ ын регламенттелген. Ал басқ аларында, мысалы Паскальда, тілдің стандарты санауыштың соң ғ ы мә нін де, цикл ішінде оны айқ ын ө згерткенде пайда болатын салдарын да анық тамайды, бырақ ол санауышты айқ ын тү рде ө згертпеуді жә не цикл аяқ талғ аннан кейін санауышты қ айта инициализациялаусыз пайдаланбауды ұ сынады. Бұ л мә селе Ада тілінде жақ сы шешілген: санауыш цикл тақ ырыбында сипатталғ ан болып саналады да одан тыс орын алмайды. Егер санауыштың есімі программада қ олданылғ ан болса да циклдың ішінде санауыш ретінде жеке айнымалы пайдаланылады. Санауышқ а мә ндерді айқ ын тү рде меншіктеу рұ қ сат етілмейді, оны тек цикл операторының ішкі механизмі ғ ана ө згерте алады. Нә тижеде келесі қ ұ рылыс:

i: = 100;

for i in (0..9) loop

... цикл тұ лғ асы

end loop; k: = i;

сырт кө рінісі жоғ арыда келтірілген Паскаль цикліне ұ қ сама бірмә нді тү рде тұ жырымдалады: k айнымалысына 100 деген мә н меншіктеледі, себебі берілген циклдан тыс қ олданылатын і айнымалының цикл ішінде қ ұ рылып жә не ө згеретін і санауышқ а ешқ андай қ атынасы жоқ. Санауышты осылайша жекешелендірген ең ың ғ йлы жә не қ ауіпсыз болып саналады: оны жеке сипаттау қ ажет емес жә не циклге қ арағ анда сыртқ ы айнымалыларды кездейсоқ тү рде бұ зып алуғ а байланысты кездейсоқ қ ателердің пайда болуының минималды ық тималдығ ы.

Санауышы бар циклды ә рдайым шартты цикл сияқ ты жазуғ а болады. Ол ү шін циклдың басында санауышқ а бастапқ ы мә н меншіктеледі, ал шығ у шарты санауыштың соң ғ ы мә нге жеткен кезі болып табылады, цикл тұ лғ асына санауышты берілген бір қ адамғ а ө згертетін оператор қ осылады. Бырақ санауышы бар циклдың арнайы операторлары тиімділеу трансляцияланады, себебі мұ ндай циклдың формализацияланғ ан тү рі циклдарды ұ йымдастырудың арнайы процессорлық бұ йрық тарын пайдалануғ а мү мкіндік береді.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал