Мәліметтерді циклдік өңдеу процестерін бағдарламалау. Циклдік есептеу процестерін бағдарламалау. for операторын қолданудың мысалы

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

Программадағы цикл денесі әрқашан алдында тұрады цикл тақырыбы, белгісі бар цикл операторыжәне қайталанулар санын (тікелей немесе жанама) анықтайтын өрнек. Цикл денесі цикл операторының операнды екенін ескеріңіз, сондықтан цикл тақырыбы мен денесі программаның бөлінбейтін құрылымдық бірлігін құрайды. Келесіде « цикл операторы", біз циклдің тақырыбын да, денесін де білдіреміз.

Барлық бағдарламалау жүйелерінде циклдарды ұйымдастыру үшін мамандандырылған цикл операторлары, оны пайдалану бағдарламалаушыны циклдарды «қолмен» бағдарламалау қажеттілігінен босатады. MathCAD мұндай операторлардың екі түрін қолдайды: алдын ала белгіленген цикл Үшін (сонымен қатар деп аталады есептегішпен цикл) Және алғы шарты бар цикл Әзірге . Бұл операторлардың құрылымының сипаттамасы 5-кестеде келтірілген.

5.4.1 Оператор Үшін

Бұл операторды қайталану саны алдын ала анықталған, яғни алдын ала белгілі болған жағдайларда қолдану керек.

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

Цикл параметріішкі бағдарлама айнымалысы мәртебесіне ие және оның барлық қасиеттеріне ие (5.1.4 бөлімінде сипатталған). Әдетте, цикл параметрі циклдің негізгі бөлігіне кіретін өрнектердің оң жағында қолданылады, бірақ оны өрнектердің сол жағында (яғни жергілікті анықтаманың сол жағында) пайдалануға ресми түрде тыйым салынбаған. «f» операторы). Есте сақтау керек, егер параметр циклдің негізгі бөлігінде өзгертілсе, оның өзгертілген мәні тек ағымдағы итерацияның соңына дейін жарамды болады, өйткені келесі итерация басталғанға дейін параметр әлі де келесі мәнді алады. цикл тақырыбында көрсетілген тізім.

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

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

Мәндер тізіміЦикл параметрі цикл тақырыбына « таңбасынан кейін жазылады. Î ", жиынтыққа мүшелікті көрсетеді (бұл таңбаны қолмен енгізудің қажеті жоқ - ол операторға кірген кезде автоматты түрде көрсетіледі Үшін ). MathCAD пайдалануға мүмкіндік береді үш пішіносы тізімдегі жазбалар: тікелей аудару– тізім элементтері үтірмен бөлінген анық көрсетілген, параметр тізімнен мәндерді пайда болу ретімен қабылдайды; дәрежелі айнымалы стильде –тізімнің элементтері сәйкес арифметикалық қатарды құрайды; массив– тізім элементтері жиым элементтерінің мәндерін индекстерінің реті бойынша дәйекті түрде алады (біріншіден, солдан оңға қарай бағандар, содан кейін жоғарыдан төменге қарай жолдар).

21-суретте көрсетілген үш бағдарлама оператордың әртүрлі қолданыстарын суреттейді Үшін .

Бағдарлама Факт(n) санның факториалын есептейді n . Бұл бағдарламадағы цикл операторы күрделі өрнектің бөлігі болып табылады, ол өз кезегінде шартты оператордың операнды болып табылады. Әйтпесе. Цикл параметрі к бүтін арифметикалық қатардан мәндер алады.

Бағдарлама Ch(V,N,p) кіріс векторын өңдейді В , оны мәнмен ауыстырыңыз б индекстері екінші кіріс векторының элементтерімен көрсетілген элементтер Н . Бұл мысалда цикл параметр мәндерінің тізімі мен векторлық элементтер жиынымен анықталады Н . Бұл екі бағдарлама да кіріс деректерін басқаруды орындайтынын және нақты бағдарлама аргументтері дұрыс көрсетілмеген жағдайда негізгі алгоритмнің орындалуын блоктайтынын ескеріңіз.

Бағдарлама L(M,z) мысалда келтірілген В ), егжей-тегжейлі түсініктемелермен қоса беріледі және түсіндіруді қажет етпейді. Бұл бағдарлама бірнеше цикл мәлімдемелерін пайдалану мүмкіндігін көрсетеді, олардың біреуі мәлімдемелер арасында қамтылған. денебасқа. Қолданылуы кірістірілген ілмектер- көпөлшемді массивтерді өңдеу үшін қолданылатын типтік әдістеме.

21-сурет – Циклды бағдарламалау мысалдары Үшін


22-суретте операторлардың қолданылуы көрсетілген Үзіліс Және Жалғастыру цикл денесінде. Әдетте бұл операторлардың өздері операндтар болып табылады шартты мәлімдемелер Егер немесе Әйтпесе .

Оператор Үзіліс («тоқтату») үзедіциклдің орындалуы және басқаруды үзілген цикл операторынан кейінгі операторға береді. Назар аударыңыз, егер оператор Үзіліс үзілді кірістірілген цикл, сыртқы циклды орындау жалғасады.

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

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

Сурет 22 – Операторларды пайдалану мысалдары Үзіліс Және Жалғастыру

Функция қосындыN(V) скалярлық сандық деректерді қамтитын векторлық элементтерді ғана қосады және қалған элементтерді өткізіп жібереді. Функция Кері(V) элементтері бастапқы вектордың сәйкес элементтерінің кері мәндері болатын векторды құрайды. Сонымен қатар, егер келесі элементте «0» саны болса немесе сандық түрдегі скаляр болмаса, цикл үзіледі. оператор екенін ескеріңіз Үзіліс соңғы мысалда ол бағдарламаны үзбейді, бірақ басқаруды операторға береді Қайту , оператордан кейін бірден Үшін .

5.4.3 Оператор Әзірге

Оператордан айырмашылығы Үшін , мәлімдеме тақырыбы Әзірге (аудармада – « Сау болыңыз«) итерациялар санының айқын белгілерін қамтымайды - ол қамтиды логикалық өрнек, оның мәні автоматты түрде есептеледі басталар алдындаәрбір келесі итерацияның орындалуы[†]. Бұл өрнек шын болғанша, цикл қайталануын жалғастырады; келесі итерация аяқталғаннан кейін өрнек жалған болғаннан кейін циклдің келесі итерациясы орындалмайды, ал оператордан кейінгі бағдарлама операторы басқаруды алады Әзірге .

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

Операторды қолдану мысалдары Әзірге 23-суретте көрсетілген. Бір есепті шешудің үш нұсқасы берілген: бағдарламалардың әрқайсысы F0 , F1 Және F2 бастапқы вектордың бірінші элементінің индексін қайтарадыВ көрсетілген мәннен асып түседіz .

Бірінші бағдарлама (мысал А ) есептегішке біреуін қосады к цикл денесінде Әзірге келесіге дейін к бастапқы вектордың ші элементі көрсетілген мәннен аспайды z . Осыдан кейін цикл аяқталады және бағдарлама айнымалының соңғы өзгертілген мәнін қайтарады к , бұл мәселенің шешімі. Циклден айырмашылығы бар екенін ескеріңіз Үшін , есептегіш к мұнда оны бөлек операторлармен өңдеу қажет: цикл операторының алдында инициализациялау (яғни оған бастапқы мән беру) және оның мәнін цикл денесінде өзгерту.

Бұл опцияны көру оңай А ) бағдарламаның маңызды кемшілігі бар: ол мәселенің шешімі болмаған жағдайда, яғни параметр z вектордың ең үлкен элементінің мәнінен асып түседі В . Бұл мысалда мұндай жағдайда цикл шынымен болмайды - бірақ бұл біздің бағдарламамыздың еңбегі емес, векторлық индекстің шығысын басқаратын MathCAD жүйесі. В рұқсат етілген мәндерден тыс және қате туралы хабарды жасайды.

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

Мүмкін, бұл мәселенің ең тиімді шешімі - опция В ), ол операторды мүлде қолданбайды Әзірге . Бұл бағдарламада айнымалы к «стиль тазалығын» сақтау үшін ғана қолданылады - цикл параметрін өңдеуді болдырмау үшін мен оператордан тыс Үшін .

23-сурет – Циклды бағдарламалау мысалдары Әзірге

Жұмыс мақсаты:

Циклдік операторларды зерттеңіз, while, do - while, циклдік алгоритмдерді құрастыруды және бағдарламалауды үйреніңіз.

Қысқаша теориялық ақпарат

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

for циклінің операторы

for циклінің операторының негізгі формасы:

үшін (өрнек_1; өрнек_2; өрнек_3)

оператор;

Қайда өрнек_1– цикл параметрінің бастапқы мәні;

өрнек_2– циклді жалғастыру шарттарын тексеру;

өрнек_3– цикл параметрін өзгерту (түзету);

оператор– Си тіліндегі қарапайым немесе құрама оператор.

Оператордың жұмыс схемасы келесідей: тек бір рет алдымен өрнек_1 есептеледі, содан кейін өрнек_2 тексеріледі, егер ол «ақиқат» болса, онда бағдарламаның циклдік бөлімі орындалады, содан кейін параметр түзетіледі және т.б. өрнек_2 "жалған" мәнін қабылдағанша.

Мысалы:үшін (k=1; k<5; k++)

printf(“\n %d”, k);

Бұл операторды орындау нәтижесінде 1-ден 4-ке дейінгі сандар бағанға басып шығарылады.

Кез келген негізгі түрдегі айнымалыны цикл параметрі ретінде пайдалануға болады.

Мысалы:

үшін(ch=’a’; ch<=’z’; ch++) // Вывод на экран букв

printf(“ %c”,ch); // Латын әліпбиі

Ақырында шексіз циклге (одан шығу жоқ) қалмас үшін бағдарламадағы for циклдерінің құрылымын мұқият бақылау қажет.

Мысалы:

үшін(k=10; k>6;k++)

printf («шексіз цикл\n»);

Шығу циклікелесі жолдармен мерзімінен бұрын:

Қосымша шарт бойынша;

Келесі операторларды пайдалану:

үзіліс;- үзіліс орналасқан циклден шығу, басқару циклден кейінгі бірінші орындалатын операторға ауыстырылады;

exit(int Kod);- бағдарламадан шығу;

қайтару;- функциядан шығу;

Шартсыз өту операторын қолдану бару<метка>;

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

Басқаруды сырттан контурдың ішіне ауыстыруға тыйым салынады.

Жақшадағы for циклінің өрнектерінің кез келгені жоқ болуы мүмкін, бірақ «;» таңбасы төмендетуге болмайды.

Мысалы:

үшін(; i<3; i++)

puts («Сәлеметсіз бе!»);

Циклдік while және do – while операторлары

Циклдік оператордың негізгі түрі кезінде:

Әзірге (шарт)

оператор;

Қайда оператор

Цикл шарт шын мәніне бағаланғанша орындалады, яғни. жақшадағы өрнек нөлге тең емес нәтиже береді. Бұл алғы шарты бар цикл – алдымен шарт тексеріледі, содан кейін оператор орындалады. Сондықтан, егер шартты есептеудің бастапқы нәтижесі 0-ге тең болса, while циклі бір рет болса да орындалмайды.

Оператордың негізгі формасы істеу - кезінде:

оператор;

while(шарт);

Қайда операторқарапайым, күрделі немесе бос сөйлем болып табылады.

Оператор істеукезінде– постшартты цикл операторы, яғни. алдымен мәлімдеме орындалады, содан кейін шарттың ақиқаттығы тексеріледі. do–while циклінде шарт цикл соңында тексерілетіндіктен, цикл кем дегенде бір рет орындалады.

while және do–while сияқты циклдерде циклден ерте шығудың және циклдің ағымдағы қадамын ерте аяқтаудың бірдей әдістеріне for операторындағы сияқты рұқсат етіледі, бірақ соңғы жағдайда for циклінен айырмашылығы басқару беріледі. жағдайын тексеру үшін. while және do-while циклдарының ішінде шексіз циклды болдырмау үшін шартқа енгізілген айнымалы мәндерді өзгертуді қамтамасыз ету керек.

Мысалы:

үшін (i=1;i<=300;i++) // Печать целых чисел, кратных 5

егер (i%5!=0) жалғастыру;

printf(“%5d”,i);

Шексіз циклдердің мысалдары:

оператор;

2) while(number_not_0) // Әрқашан шын!

оператор;

оператор;

while(сан_емес_0); // Әрқашан шын!

Цикл операторларының арасында шығу шарты болуы керек.

Кірістірілген циклдар

Кірістірілген ілмектер жағдайында бір цикл екіншісінің ішінде болады, мысалы:

үшін(i=nn;i

үшін(j=mn;j

оператор;

Қайда операторқарапайым, күрделі немесе бос сөйлем болып табылады. Ішкі цикл сыртқы циклдің шартын қанағаттандыратын i параметрінің әрбір мәні үшін орындалады.

Мысалы:

үшін(i=1;i<10;i++) // Печать таблицы умножения

үшін(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf («\n»);

for операторын қолданудың мысалы

Есептеңіз. Бағдарлама аралық және соңғы нәтижелерді басып шығаруы керек.

Бағдарлама мәтіні келесідей болуы мүмкін

#қосу

#қосу

қояды («N енгізіңіз»);

scanf(“%d”,&N);

үшін (s=0, k=1; k<=N; k++) // В заголовке цикла можно выпол-

( // тапсырманы қабылдау және қосарландыру

printf(" \n k=%d s=%f ", k, s);

printf("\n ЖАУАП: s=%f, Кез келген пернені басыңыз...",s);

Жеке тапсырмаларға арналған опциялар

Функция мәндерінің кестесін анықтау программасын жазыңыз сағерікті диапазонда [ а,б] аргумент өзгереді Xерікті қадамдармен h. Құндылықтар a, b, hпернетақтадан енгізілді. Кестеде келесі бағандар болуы керек: реттік нөмірі, аргумент мәні x, функция мәні, функцияның ұлғаюы немесе кемуі туралы хабарлама, екі көрші функция мәндерінің айырмашылығы.

Функцияның ең үлкен және ең кіші мәндерін анықтаңыз.

1. a=-p; b=p; h=0,4.

2. a=0,7; b=1,8; h=0,1.

3. a=-0,5; b=2,5; h=0,2.

4. a=-0,9; b=2,7; h=0,3.

5. a=-2; b=0,8; h=0,2.

6. a=-1,9; b=2,7; h=0,3.

7. a=-0,4p; b=0,4p; h=0,5.

8. a=-0,3p; b=1,3p; h= p/10.

9. a=-p/2; b= p/2; h=p/10.

10. a=-3; b=3; h=0,5.

«Циклдік есептеу процестерін бағдарламалау»

Жұмыс мақсаты:циклдік есептеу процестерінің алгоритмдерін құрастыру және күрделі құрылымды циклдік бағдарламаларды ұйымдастыру әдістерін меңгеру.

Теориялық бөлім

4.1.1. Циклдік алгоритмдер.

Цикл – бірнеше рет орындалатын әрекеттер тізбегі.

Дөңгелек-робин алгоритмі бір немесе бірнеше циклды қамтитын алгоритм болып табылады.

Циклдің 3 түрі бар:

Алғы шарты бар цикл;

Постшартпен цикл;

Есептегішпен цикл (санау циклі).

Егер циклдің орындалуы қандай да бір логикалық шартпен байланысты болса, онда алғы шарты немесе кейінгі шарты бар циклдер қолданылады.

Есептегіш циклдар - цикл денесінің орындалуы алдын ала белгіленген бірнеше рет қайталануы керек класс.

Циклдік алгоритмдердің блок-схемалары келесідей:

1. Есептегішпен цикл.

2. Алғы шарты бар цикл. 3. Постшартпен цикл.

4.1.2 С++ программалау тіліндегі циклдік операторлар.

C++ тілінде циклдің әрбір түрі үшін сәйкес оператор бар:

while сияқты цикл (алғы шартпен);

Do...while сияқты цикл (постшартпен);

For сияқты цикл (санау).

1. while сияқты цикл операторы

Кіру формасы:

while (шарт) мәлімдемесі;

мұндағы: (шарт) – логикалық өрнек;

оператор – циклде орындалатын оператор немесе цикл денесі.

Егер циклдің денесі құрама оператор болса, онда ол оператор жақшаларына (...) алынуы керек:

әзірше (шарт)

операторлар тобы

Мұндай циклдің жұмыс істеу схемасы: шарт ақиқат болғанда, цикл денесі орындалады және шарт қайтадан тексеріледі, т.б. Шарт жалған болғанда, цикл шығады.

2. Do…while сияқты цикл операторы

Кіру формасы:

оператор;

while(шарт);

Мұндай циклдің жұмыс істеу схемасы: алдымен оператор орындалады, содан кейін шарт тексеріледі, егер шарт ақиқат болса, оператор орындалады және шарт қайтадан тексеріледі, т.б. Шарт жалған болғанда, цикл шығады.

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



операторлар тобы

while(шарт);

3. for сияқты цикл операторы

Кіру формасы:

оператор;

A - цикл параметрі үшін бастапқы мәндерді және қажет болған жағдайда басқа параметрлер үшін бастапқы мәндерді көрсететін бастапқы өрнек. Мысалы:

i=0, x=0,5, p=1, s=0

В – циклды жалғастыру шартын тексеретін шартты өрнек. Мысалы:

С - цикл параметрінің өсімін көрсететін өсу өрнегі және қажет болса басқа параметрлер, содан кейін олар тізімде жазылады. Мысалы: x+=0,1, i++

4.1.3 Циклдік есептеу процесі үшін C++ тілінде алгоритм мен бағдарламаны құрастыру мысалы.

Өрнектің мәнін есептеңіз:

б– бастапқы мән, оның мәні пернетақтадан енгізіледі және өзгермейді;

а– 1 қадамымен диапазондағы өзгерістер;

ж– нәтиже, оның мәндері экранда көрсетіледі.

Спецификацияға сүйене отырып, a айнымалысы бүтін сан, сондықтан оны санау циклінде санауыш ретінде пайдалануға болады.

Есепті санау циклінің көмегімен шешу алгоритмінің блок-схемасы келесідей:

#қосу

#қосу

#қосу

printf("В енгізіңіз:");

scanf(“%f”,&b);

printf(“a y\n”);

үшін (a=0;a<=10;a++)

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

Алғы шарты бар цикл арқылы осы есепті шешу алгоритмінің блок-схемасы келесідей:

Осы алгоритмге сәйкес келетін C++ бағдарламасының мәтіні келесідей:

#қосу

#қосу

#қосу

printf("В енгізіңіз:");

scanf(“%f”,&b);

printf(“a y\n”);

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“ y жоқ\n”);

Пост шарты бар цикл арқылы осы есепті шешу алгоритмінің блок-схемасы келесідей:

Осы алгоритмге сәйкес келетін C++ бағдарламасының мәтіні келесідей:

#қосу

#қосу

#қосу

printf("В енгізіңіз:");

scanf(“%f”,&b);

printf(“a y\n”);

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“ y жоқ\n”);

кезінде (а<=10);

Практикалық бөлім

4.2.1 Жұмысты орындауға қойылатын талаптар:

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

Нәтижелердің шығуын айнымалы параметрдің мәндері анық бөлектелетін және әрбір нақты мән үшін нәтиженің мәндері (3-кестенің 2-бағанынан үш айнымалы) пішінде көрсетілетіндей етіп ресімдеңіз. үстелдің.

Жұмыс тәртібі.

1. Тапсырманы талдауды орындау, мәселенің тұжырымын тұжырымдау.

2. Алгоритмдердің блок-схемаларын құру.

3. С++ тілінде программа құру. Пернетақтадан бастапқы деректерді енгізуді және нәтижелерді экранға шығаруды қамтамасыз етіңіз.

4. Әртүрлі бастапқы деректерде бағдарламаның функционалдығын тексеріңіз.

5. Алынған нәтижелерді талдаңыз.

Жеке тапсырмаларға арналған опциялар.

Жеке тапсырмалардың нұсқалары мұғалім журналындағы топтық тізімдегі студенттер санына сәйкес 4-кестеден таңдалады.

Кесте 4. Жеке тапсырмаларға арналған опциялар

Жоқ. Өзгермелі айнымалы Цикл түрлері
10 ≤ a ≤ 10,Δ a=1
-4 ≤ d ≤ 4, Δ d = 0,5
-6 ≤ x ≤ 3, Δ x = 0,5
0 ≤ b ≤ 3 0, Δ b = 1,5 1. Алғы шарты бар, 2. Есептелетін
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. Алғы шартпен, 2. Кейінгі шартпен
5 ≤ e ≤ 35,Δ e = 2 1. Есептелетін, 2. Постшартпен
-5 ≤ м ≤ 15,Δ m = 1 1. Алғы шарты бар, 2. Есептелетін
1 ≤ c ≤ 70,Δ c = 3 1. Алғы шартпен, 2. Кейінгі шартпен
1,5 ≤ c ≤ 15,Δ c = 0,5 1. Есептелетін, 2. Постшартпен
-8 ≤ b ≤ 28,Δ b = 2 1. Алғы шарты бар, 2. Есептелетін
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. Алғы шартпен, 2. Кейінгі шартпен
-7 ≤ k ≤ 2,Δ k = 0,3 1. Есептелетін, 2. Постшартпен
-1 ≤ м ≤ 21,Δ m = 1 1. Алғы шарты бар, 2. Есептелетін
-2 ≤ e ≤ 34,Δ e = 2 1. Алғы шартпен, 2. Кейінгі шартпен
-11 ≤ c ≤ 23,Δ c = 2 1. Есептелетін, 2. Постшартпен
-13 ≤ p ≤ 50,Δ p = 3 1. Алғы шарты бар, 2. Есептелетін
3,3 ≤ b ≤ 9,3,Δ b = 0,3 1. Алғы шартпен, 2. Кейінгі шартпен
3,5 ≤ y ≤ 12,3,Δ y = 0,4 1. Есептелетін, 2. Постшартпен
-7,5 ≤ a ≤ 5,7,Δ a = 0,6 1. Алғы шарты бар, 2. Есептелетін
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. Алғы шартпен, 2. Кейінгі шартпен
0 ≤ h ≤ 10,Δ h=0,5 1. Есептелетін, 2. Постшартпен
-15 ≤ b ≤ 15, Δ b =2 1. Алғы шарты бар, 2. Есептелетін
-7 ≤ l ≤ 3, Δ l = 0,5 1. Алғы шартпен, 2. Кейінгі шартпен
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Есептелетін, 2. Постшартпен
1 ≤ k ≤ 9, Δ k = 0,4 1. Алғы шарты бар, 2. Есептелетін
0 ≤ b ≤ 6,9,Δ b = 0,3 1. Алғы шартпен, 2. Кейінгі шартпен
-3 ≤ v ≤ 9,Δ v = 0,6 1. Есептелетін, 2. Постшартпен
-2 ≤ p ≤ 2,6,Δ p = 0,2 1. Алғы шарты бар, 2. Есептелетін

4.3 Тест сұрақтары мен практикалық тапсырмалар:

1. while операторы қалай жұмыс істейді?

2. do ... while операторы қалай жұмыс істейді?

3. for операторы қалай жұмыс істейді?

4. Программадағы циклды құрайтын операторлардың астын сыз.

5. while мен do ... while операторларының айырмашылығы неде?

6. Бағдарламадағы бір цикл операторын басқасымен ауыстырыңыз.

Бағдарламалауда біз жиі қайталанатын процестерді қамтитын мәселелерге тап боламыз. Сондықтан біз «деген ұғымды білуіміз және қолдана білуіміз керек. циклдік есептеу процестері».

Жаңадан бастаған бағдарламашыға оларды жалпылама мысал арқылы түсіну оңай болады. Сонымен қатар, барлық бағдарламалау тілдерінде циклдарды жүзеге асыру жолдары бар екенін түсіну маңызды.

Бағдарламалаудағы цикл дегеніміз не?

Цикл - бағдарламалауда бірдей әрекеттердің немесе есептеулердің қайталануы, бірақ айнымалылардың әртүрлі мәндерімен бірдей тәуелділіктерге сәйкес.

Біз цикл ұғымын тек бағдарламалауда ғана кездестіреміз. Біздің өміріміздің көптеген салаларында циклдар бар.

Мысалы, табиғаттағы су айналымы – біздің өміріміздегі табиғи айналым.

Енді есептеу циклдарында қолданылатын жалпы ережелер мен түсініктерді қарастырайық.

Циклдік процестің кезеңдері

Жалпы, цикл 4 кезеңде жүзеге асырылуы керек:
  • 1 кезең – циклды дайындау (инициализация).
    Параметр мен цикл айнымалысы үшін бастапқы мәнді орнату.
    Цикл параметрі– бұл цикл қадамдарының санын есептейтін мән (циклдің қайталану саны).
    Цикл айнымалысыциклдің әрбір кезеңінде өз мәнін өзгертетін шама.
    Инициализация– бұл параметр мен цикл айнымалысы үшін бастапқы мәндерді орнату.
  • 2 кезең – цикл денесі.
    Бұл циклдегі әрекеттің қайталануы немесе айнымалылардың әртүрлі мәндері бар бірдей математикалық тәуелділіктерге негізделген есептеулер.
  • 3-кезең – циклді өзгерту (өзгерту).
  • 4 кезең – циклды басқару.
    Бұл циклды жалғастыру немесе бастау үшін шартты тексеру.
Паскаль тілінде кез келген іске асыра алатын 3 цикл операторы бар алгоритмдік – циклдік құрылым :
  1. Параметрі бар цикл операторы
  2. Алғы шарты бар цикл операторы
  3. Пост шарты бар цикл операторы
Оларды келесі мақалада егжей-тегжейлі қарастырамыз.

1. Программаларда циклдік есептеу процестерін құру әдістері.

2. Компьютерге енгізілгенНнақты сандар. Осы жиынның арифметикалық ортасын көрсететін программа жазыңыз.

Кіріспе

Циклдік бағдарламалар кез келген бағдарламалық жасақтамада қолданылады. Бұл жағдайда циклдар айқын немесе жасырын болуы мүмкін. Атап айтқанда, жасырын цикл үзу өңдегіштерінде бар, олар денесі үзіліс арқылы іске қосылатын шексіз циклде тиімді жұмыс істейді. Ішкі бағдарламалар – Windows қолданбаларының терезе функциялары да циклдік болып табылады. Төменде корпусында функционалдық модульдер бар циклі бар бағдарламаларды қарастырамыз.

Циклдік процессаргументтің әртүрлі мәндері үшін бірдей формулалар арқылы бірнеше рет есептелетін есептеу процесі.

Бағдарламалар, циклдік процесті жүзеге асыру циклдік бағдарламалар деп аталады.

Циклды ұйымдастыруды келесі кезеңдерге бөлуге болады:

циклды дайындау (инициализациялау) (AND);

циклдік есептеулерді орындау (цикл денесі) (Т);

параметрлерді өзгерту (M);

цикл аяқталу жағдайын тексеру (U).

T және M сияқты осы қадамдардың реті әртүрлі болуы мүмкін. Циклдың аяқталу жағдайын тексеру орнына байланысты төменгі және жоғарғы ұштары бар циклдар арасында айырмашылық жасалады. Төменгі аяқталатын цикл үшін цикл денесі кем дегенде бір рет орындалады, өйткені алдымен есептеулер орындалады, содан кейін циклден шығу шарты тексеріледі.


Төменгі цикл жағдайында, егер шығу шарты бірден орындалса, циклдің денесі бір рет орындалмауы мүмкін.

Егер цикл денесінің қайталану саны белгілі немесе алдын ала анықталған болса, цикл детерминирленген деп аталады. Егер цикл денесінің қайталану саны алдын ала белгісіз болса, бірақ есептеулерге қатысатын параметрлердің (кейбір айнымалылар) мәндеріне байланысты болса, цикл итеративті деп аталады.

Цикл денесі- Бұл бағдарламаның бірнеше рет қайталанатын бөлімі.

Цикл параметріцикл қайталанған сайын жаңа мәндер қабылдайтын айнымалы (циклдер қарапайым немесе күрделі болуы мүмкін).

n рет циклдің жалпы көрінісі

Жалпы алғанда, цикл n рет келесідей жазылады:

nc қайталау саны

Қызметтік сөз nts (цикл басы) және kts (циклдың соңы) бірінің астына қатаң жазылады және тік сызықпен жалғанады. Бұл жолдың оң жағында қайталанатын командалар тізбегі (цикл денесі) жазылған.

Қайталану саны ерікті бүтін сан.

Алгоритмді орындау кезінде цикл денесіндегі командалар тізбегі көрсетілген рет қайталанады. Алгоритмдік тілдің ережелері қайталанулардың кез келген бүтін санын көрсетуге мүмкіндік береді. Ол нөл немесе тіпті теріс болуы мүмкін. Бұл жағдайлар қате деп саналмайды, цикл денесі бір рет болса да орындалмайды, ал компьютер cc-тен кейін жазылған командаларды орындауға бірден кіріседі.

Әзірге циклдің жалпы көрінісі

Жалпы алғанда, цикл қазіргі уақытта келесідей жазылған:

әлі шарт жоқ

| цикл денесі (пәрмендер тізбегі)

Циклды орындаған кезде компьютер келесі әрекеттерді қайталайды:

а) while функционалды сөзінен кейін жазылған шартты тексереді;

б) шарт орындалмаса, онда циклдің орындалуы аяқталып, компьютер cc-тен кейін жазылған командаларды орындауға кіріседі. Егер шарт орындалса, онда компьютер циклдің денесін орындайды, шартты қайтадан тексереді және т.б.

үшін циклдің жалпы көрінісі

i үшін i1-ден i2-ге дейін nc

| цикл денесі (пәрмендер тізбегі)

Мұнда i – бүтін түр мәнінің атауы, i1, i2 – ерікті бүтін сандар немесе бүтін мәндері бар өрнектер. Циклдің денесі i = i1, i = i1 + 1, i1 + 2, …i = i2 үшін дәйекті түрде орындалады.

Алгоритмдік тілдің ережелері i1, i2 кез келген бүтін сандарды көрсетуге мүмкіндік береді. атап айтқанда, i2 i1-ден аз болуы мүмкін. бұл жағдай қате деп есептелмейді - жай ғана цикл денесі бір рет болса да орындалмайды және компьютер cc-тен кейін жазылған командаларды орындауға бірден кіріседі.

n рет цикл және while циклі

n рет және осы уақытқа дейінгі циклдар алгоритмдік тілде бірдей дерлік пішімделеді. Бұл таңқаларлық емес, өйткені бұл командалардың екеуі де циклды анықтайды - командалардың қайталанатын тізбегі. nts және kts қызметтік сөздері циклдің орындалып жатқанын көрсетеді, ал цикл тақырыбы оны орындаудың нақты механизмін көрсетеді.

Дегенмен, бұл екі циклдің бір маңызды айырмашылығы бар. Компьютер циклды n рет орындай бастағанда, ол цикл денесін қанша рет қайталау керектігін біледі. Циклды орындаған кезде бұл әлі болмайды: компьютер циклдің күйін әр жолы тексереді және орындаудың қашан аяқталатынын алдын ала анықтай алмайды. Әзірге циклдің қайталану санын цикл аяқталғаннан кейін ғана білуге ​​болады.

Бұл қандай жағдайларда қандай циклды қолдану керектігін түсіндіреді. Егер қайталану саны цикл басталған кезде белгілі болса, циклды n рет пайдалану ыңғайлы. Егер қайталау санын алдын ала анықтау мүмкін болмаса, цикл қажет.

Мысалы, автоматты басқару бағдарламасы суретте көрсетілген құрылымға ие. 1. Циклге енгізілген модульдер(сондай-ақ үзілістерді өңдеу модульдері), әрқайсысы бір кіріс және бір шығысы бар, әдетте модульдерде ағымдағы циклде мән тағайындалған статикалық айнымалылар бар және бұл айнымалыларды талдау келесі циклде орындалатын сипаттамалық ерекшелігі бар. . Осылайша, аталған айнымалылар токтың соңындағы немесе келесі бағдарлама циклінің басындағы модульдің күйін сипаттайды. Бұдан әрі циклдік бағдарламалардың осындай модульдерін ғана қарастырамыз және оларды қысқаша MCP деп белгілейміз.


1-сурет. Шексіз циклі бар басқару бағдарламасының типтік құрылымы.

MCP әртүрлі құрылымға ие, олардың күрделілігі арнайы критерийлер бойынша бағалануы керек. В.В.Липаев бағдарламалық модульдердің күрделілігінің ыңғайлы және объективті критерийін ұсынды, атап айтқанда: модульдің басқару графигіндегі жолдардың саны мен жалпы ұзындығы. Тек шартты және іріктеу мәлімдемелері есепке алынады. Дегенмен, бұл критерий статикалық жады бар MCP үшін жеткіліксіз, өйткені MCP талдау кезінде алдыңғы циклде орнатылған барлық статикалық айнымалылардың мәндерін есте сақтау қажет. Сонымен қатар, C және Pascal сияқты жиі қолданылатын бағдарламалау тілдерінде бұрыннан белгілі құрылымдық бағдарламалауды қоспағанда, алгоритмдер мен бағдарламаларды стандарттау бойынша ұсыныстар жоқ. Бұл мақала MCP-ге қатысты осы олқылықтарды толтыруды ұсынады.

2. Циклдік бағдарлама модульдерінің фрагменттері

Екі терминалды фрагмент немесе жай ғана фрагмент, қарастырылып отырған MCP құрылымды деген болжам бойынша бір кіріс және бір шығыс (оның ішінде цикл операторлары) бар бағдарламаның бөлімі ретінде қарастырылады. Ең қарапайым фрагмент бір мәлімдемені қамтиды. Фрагменттердің тізбегі де фрагмент болып табылады. MCP, өз кезегінде, фрагмент болып табылады және фрагменттердің тізбегінен тұрады.

Шешім кестелерін жүзеге асыратын модульдердің құрылымын синтездеу үшін тәуелсіз фрагменттердің әдісі ұсынылған. Бұл жағдайда модуль фрагменттерінің тізбегінің кез келген жеріне кірістірілетін фрагмент тәуелсіз болып саналады. Мұндай фрагменттің орналасуының тәуелсіздігі ондағы талданатын мәліметтер фрагменттердің көрсетілген тізбегінде құрылмауымен, ал тәуелсіз фрагментте жасалған мәліметтердің бұл фрагмент тізбегінде талданбауымен түсіндіріледі. Сондықтан тәуелсіз фрагменттерді параллель (псевдопараллель) орындауға болады. Суретте. 2-суретте екі тәуелсіз фрагменттері бар модульді іске асырудың ықтимал нұсқалары көрсетілген. «a» және «b» нұсқаларында фрагменттер бағдарламаның мәнін бұрмаламай қайта реттеледі; «в» нұсқасында фрагменттер параллель орындалады.


2-сурет. Тәуелсіз фрагменттері бар модульді іске асыру опциялары:

а) және б) - дәйекті жүзеге асыру,

в) - параллельді жүзеге асыру: қос көлденең сызық бағдарламаның параллелизациясын көрсетеді, қалың көлденең сызық параллель процестердің аяқталғанын көрсетеді.

Тәуелді фрагмент - модульдегі басқа фрагмент(тер)дің орналасуына тәуелді болатын фрагмент. Біз жоғары және төмен тәуелді фрагменттерді ажыратамыз. Жоғарыдан тәуелді фрагмент әрқашан осы (тәуелді) фрагментте қолданылатын айнымалылар жасалған кейбір фрагменттің астында орналасуы керек. Төменгі жағынан тәуелді фрагмент әрқашан осы фрагментте жасалған айнымалы мәндерді пайдаланатын фрагменттің үстіне орналастырылуы керек. Бірі жоғарыдан екіншісіне, екіншісі төменнен біріншіге тәуелді екі тәуелді фрагмент өзара тәуелді фрагмент деп аталады. Оларды алмастыру мүмкін емес және параллельді жүзеге асыру мүмкін емес. Суретте. 3-суретте өзара тәуелді фрагменттері бар модуль үлгісі көрсетілген. Өзара тәуелді фрагменттердің арасында олардан тәуелді немесе тәуелсіз басқалары болуы мүмкін. 3-сурет. Тәуелді фрагменттері бар модуль.

Модульдегі орны тұрақты деп қатаң анықталған тәуелді фрагментті шақырамыз. Мысалы, пернетақтадан енгізілген таңбаны тану модулінде біріншісі нақты таңба енгізуінің төменнен тәуелді фрагменті болуы керек. Модульдің «бастау» және «аяқтау» операторлары тұрақты фрагменттер болып табылады.

Абсолютті тәуелсіз фрагменттер жоқ, егер кез келген модульде басы мен соңының аталған тұрақты фрагменттері болғандықтан ғана. Демек, тәуелсіз фрагмент, жалпы алғанда, екі өзара тәуелді фрагменттермен шектелген ықтимал орналасу аймағына ие. Яғни, тәуелсіз фрагменттің неғұрлым қатаң анықтамасы келесідей: екі тұрақты фрагментке қатысты тәуелсіз деп біз жоғарыда және төменнен көрсетілген бекітілген фрагменттермен шектелген фрагменттердің тізбегінің кез келген жерінде орналастыруға болатын фрагментті атаймыз.




Жоғарғы