Мәліметтерді циклдік өңдеу процестерін бағдарламалау. Циклдік есептеу процестерін бағдарламалау. 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-сурет - Бағдарламалау циклдарының мысалдары Әзірге

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

For, 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(intCode);- бағдарламадан шығу;

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

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

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

Басқаруды циклдің сыртынан ішкі жағына ауыстыруға тыйым салынады.

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

Мысалы:

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

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

while және do-whi операторларының циклі

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

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

оператор;

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

Шарт «шын» деп бағаланғанша, цикл орындалады, яғни. жақшаға алынған өрнек бос емес нәтижені қайтарады. Бұл алғы шарты бар цикл – алдымен шарт тексеріледі, содан кейін оператор орындалады. Сондықтан, егер шартты бағалаудың бастапқы нәтижесі 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 операторын қолдану мысалы

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

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

#қосу

#қосу

puts («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++ программалау тіліндегі цикл операторлары.

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. Жеке тапсырмалардың нұсқалары

№ p/p өзгермелі айнымалы Цикл түрлері
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 (циклдің соңы) бірінің астына қатаң жазылады және тік жолақ арқылы байланысады. Осы жолдың оң жағында командалардың қайталанатын тізбегі (цикл денесі) жазылады.

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

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

Циклдің жалпы көрінісі

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

nc қоштасу шарты

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

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

а) қызметші сөзден кейін жазылған шартты тексереді;

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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




Жоғарғы