Програмирање на циклични пресметковни процеси на обработка на податоци. Програмирање на циклични пресметковни процеси. Пример за користење на изјавата за

Во програмирањето, често има задачи кои бараат повторено извршување на иста група програмски изјави со различни вредности на нивните операнди. Таквите процеси се нарекуваат цикличнаили едноставно циклуси.Група циклично повторувани изјави формираат т.н тело на јамка, кој може да биде претставен или со едноставен или со сложен израз. Ќе го наречеме еднократното извршување на телото на јамката повторување.

На телото на јамката во програмата секогаш му претходи заглавие на јамка, која ја содржи ознаката оператор на јамкаи израз кој го дефинира (директно или индиректно) бројот на повторувања. Забележете дека телото на јамката е операнд на операторот на јамката; затоа, заглавието и телото на јамката сочинуваат неделива структурна единица на програмата. Во продолжение, користејќи го терминот „ оператор на јамка“, ќе мислиме и на заглавието и на телото на јамката.

За да се организираат циклуси во сите програмски системи, постојат специјализирани оператори на јамка, чија употреба го ослободува програмерот од потребата да програмира циклуси „рачно“. MathCAD поддржува два типа на такви оператори - циклус со предодреденост За (исто така наречен јамка со бројач) И јамка со предуслов Додека . Опис на структурата на овие оператори е даден во Табела 5.

5.4.1 Оператор За

Овој оператор треба да се користи во случаи кога бројот на повторувања е однапред одреден, односно однапред познат.

Заглавие на јамкана овој оператор (десниот операнд) содржи променлива наречена параметар(или бројач) циклус, И листа на вредностиовој параметар. Бројот на елементи на списокот го одредува и бројот на повторувања - за време на секоја итерација, параметарот на јамката ја добива следната вредност од списокот наведен во заглавието.

Параметар на јамкаима статус на интерна променлива на програмата и ги има сите нејзини својства (опишани во делот 5.1.4). Како по правило, параметарот јамка се користи на десната страна на изразите вклучени во телото на јамката, иако формално не е забрането да се користи на левата страна на изразите (т.е. лево од локалната дефиниција оператор „ѓ“). Треба да се запомни дека ако некој параметар е променет во телото на јамката, неговата променета вредност ќе важи само до крајот на тековната итерација, бидејќи пред почетокот на следната итерација параметарот сепак ќе ја добие следната вредност од листа наведена во заглавието на јамката.

Формално, дозволено е воопшто да не се користи параметарот на јамката во изразите на телото на јамката - во овој случај, списокот со вредности на параметрите не игра никаква улога - само должината на оваа листа е значајна, што ја одредува број на (можеби бесмислени) повторувања.

По завршувањето на последната итерација, ќе се изврши програмската изјава што ја следи изјавата за јамка. Во овој случај, променливата што се користи како параметар на завршената јамка ја задржува вредноста што ја имаше во последната всушност завршенаповторување[*]. Имајте предвид дека оваа вредност не секогаш се совпаѓа со последната вредност од листата наведена во заглавието на циклусот, бидејќи „рано“ излегување од циклусот е возможно кога операторот е активиран Пауза вклучени во телото на јамката.

Список на вредностиПараметарот на јамката е запишан во заглавието на јамката по симболот " Î ", што укажува на членство во множество (овој симбол не треба да се внесува рачно - тој автоматски ќе се прикаже при влез на операторот За ). MathCAD дозволува користење три формизаписи во оваа листа: директен трансфер- елементите на списокот се експлицитно наведени поделени со запирки, параметарот добива вредности од списокот по редоследот по кој се појавуваат; во стил на рангирана променлива -елементите на листата ја формираат соодветната аритметичка серија; низа- Елементите на списокот последователно ги добиваат вредностите на елементите на низата по редоследот на нивните индекси (прво, колони од лево кон десно, потоа редови од врвот до дното).

Трите програми прикажани на слика 21 илустрираат различни употреби на операторот За .

Програма Факт(n) пресметува фактор на број n . Операторот на јамка во оваа програма е дел од сложен израз, кој, пак, е операнд на условен оператор Во спротивно. Параметар на јамка к добива вредности од цела аритметичка серија.

Програма Ch(V,N,p) го обработува влезниот вектор В , заменувајќи го со вредноста стр оние елементи чии индекси се специфицирани со елементите на вториот влезен вектор Н . Во овој пример, листа на вредности на параметрите на јамката јас дефинирани со множество векторски елементи Н . Забележете дека и двете од овие програми вршат контрола на влезните податоци и го блокираат извршувањето на главниот алгоритам ако вистинските програмски аргументи се погрешно наведени.

Програма L(M,z) дадена во примерот В ), е придружена со детални коментари и не бара објаснување. Оваа програма ја илустрира можноста за користење на повеќе изјави за циклуси, од кои едната е вклучена меѓу изјавите телодруг. Употреба вгнездени јамки- типична техника што се користи за обработка на повеќедимензионални низи.

Слика 21 – Примери за програмирање циклус За


Слика 22 ја илустрира употребата на оператори Пауза И Продолжи во телото на јамката. Вообичаено, овие оператори се самите операнди условни изјави Ако или Во спротивно .

Оператор Пауза ("прекини") прекинуваизвршување на јамката и ја пренесува контролата на операторот по операторот на прекината јамка. Забележете дека доколку операторот Пауза прекината вгнездена јамка, извршувањето на надворешната јамка ќе продолжи.

Оператор Продолжи („продолжи“) постапува поинаку - тој ја прекинува само тековната итерација на јамкатаи ја пренесува контролата на заглавието на оваа јамка, по што се извршува циклусот продолжуваод следната итерација (освен ако, се разбира, прекинатата итерација не беше последната).

Оператор Пауза дозволено да се користи и надвортело на циклусот. Во овој случај, извршувањето на целата потпрограма е прекинато, а резултатот од евалуацијата на неговиот последен реално извршен израз се враќа.

Слика 22 – Примери за користење на оператори Пауза И Продолжи

Функција Збир N(V) ги сумира само оние векторски елементи кои содржат скаларни нумерички податоци и ги прескокнува останатите елементи. Функција Инверзна (V) формира вектор чии елементи се инверзни вредности на соодветните елементи на оригиналниот вектор. Освен тоа, ако следниот елемент го содржи бројот „0“ или не е скалар од нумерички тип, циклусот е прекинат. Имајте на ум дека операторот Пауза во последниот пример не ја прекинува програмата, туку ја пренесува контролата на операторот Врати се , веднаш по операторот За .

5.4.3 Оператор Додека

За разлика од операторот За , заглавие на изјавата Додека (во превод - " Чао") не содржи експлицитни индикации за бројот на повторувања - содржи логички израз, чија вредност автоматски се пресметува пред почетокотизвршување на секоја следна итерација[†]. Сè додека овој израз е вистинит, јамката ќе продолжи да се повторува; штом изразот стане неточен по завршувањето на следната итерација, следната повторување на јамката нема да се изврши, а програмската изјава што следи по изјавата ќе добие контрола Додека .

Очигледно, ако идентично неточен логички израз се стави во заглавието на јамката, оваа јамка нема да заврши ниту една од неговите повторувања, а ако овој израз е идентично вистинит, јамката ќе биде бесконечна (последнава ситуација се нарекува јамкапрограми). За да се избегнат такви ситуации, операндите на логичкиот израз мора да вклучуваат една или повеќе променливи кои ги менуваат нивните вредности во телото на јамкататака што јамката е конечна (други средства може да се користат за да се спречи циклусот - на пример, принудување на операторот да излезе од јамката Пауза ).

Примери за користење на операторот Додека се прикажани на слика 23. Дадени се три опции за решавање на истиот проблем: секоја од програмите F0 , Ф1 И F2 го враќа индексот на првиот елемент од изворниот векторВ надминување на одредената вредностz .

Првата програма (на пример А ) додава еден на бројачот к во телото на јамката Додека до следниот к тиот елемент од оригиналниот вектор нема да ја надмине одредената вредност z . По ова, циклусот завршува и програмата ја враќа последната изменета вредност на променливата к , што е решение за проблемот. Забележете дека, за разлика од циклусот За , шалтер к тука е неопходно да се обработи со посебни искази: иницијализирај (односно, додели му почетна вредност) пред операторот на јамката и променете ја неговата вредност во телото на јамката.

Лесно е да се види дека опцијата А ) на програмата има значителен недостаток: не ја спречува програмата да се врти во случај кога проблемот нема решение, односно кога параметарот z ја надминува вредноста на најголемиот елемент на векторот В . Во овој пример, вртењето во таква ситуација навистина нема да се случи - но тоа не е заслуга на нашата програма, туку на системот MathCAD, кој ќе го контролира излезот на векторскиот индекс В надвор од дозволените вредности и ќе генерира порака за грешка.

Ослободена од овој недостаток е опцијата б ) на програма во која телото на циклусот содржи дополнителна проверка за валидноста на следната вредност на индексот и насилно ја прекинува јамката со операторот Пауза во соодветната ситуација со издавање на СМС порака.

Можеби најефективното решение за овој проблем е опцијата В ), кој воопшто не го користи операторот Додека . Во оваа програма променливата к се користи само за одржување на „чистотата на стилот“ - за да се исклучи обработката на параметарот на јамката јас надвор од операторот За .

Слика 23 – Примери за програмирање циклус Додека

Цел на работата:

Проучете ги цикличните оператори за, while, do - while, научете како да составувате и програмирате циклични алгоритми.

Кратки теоретски информации

Операторите на јамката се користат кога е неопходно неколку пати да се повторат одредени дејства (оператори и операции), а таквите делови од алгоритмите се нарекуваат циклуси.

Операторот за јамка за

Основната форма на изјавата за јамка е:

за (израз_1; израз_2; израз_3)

оператор;

Каде израз_1– почетна вредност на параметарот на циклусот;

израз_2– проверка на условите за продолжување на циклусот;

израз_3– промена на параметарот на циклусот (корекција);

оператор– прост или сложен оператор во јазикот С.

Шемата за работа на операторот е следна: само еднаш, прво се пресметува израз_1, потоа се проверува изразот_2 и ако е „точен“, тогаш се извршува цикличен дел од програмата, потоа се коригира параметарот итн. додека изразот_2 не ја земе вредноста „false“.

На пример:за (k=1; k<5; k++)

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

Како резултат на извршувањето на овој оператор, броевите од 1 до 4 се печатат во колона.

Можете да користите променлива од кој било основен тип како параметар на јамка.

На пример:

за (ч=’а’; погл<=’z’; ch++) // Вывод на экран букв

printf(“ %c”,ch); // Латинска азбука

Потребно е внимателно да се контролира структурата на за јамките во програмата за да не завршите со бескрајна јамка (од која нема излез).

На пример:

за(k=10; k>6;k++)

printf („бескрајна јамка\n“);

Излезна јамкапред предвиденото на следниве начини:

По дополнителен услов;

Користејќи ги следните оператори:

пауза;- излез од циклусот во кој се наоѓа прекинот, контролата се пренесува на првата извршена изјава по циклусот;

излез (int Kod);- излезете од програмата;

враќање;- излез од функцијата;

Користење на операторот за безусловен скок оди до<метка>;

Рано завршување на тековниот цикличен чекорможно со користење на дополнителен услов или оператор продолжи, што го прекинува извршувањето на чекорот на тековната јамка, т.е. ги прескокнува исказите од останатиот дел од циклусот и ја пренесува контролата на главниот исказ на циклусот за да го прилагоди параметарот и да ја провери состојбата.

Забрането е пренос на контрола однадвор во внатрешноста на јамката.

Може да недостасува кој било од изразите на за јамката во загради, но симболот „;“. не може да се спушти.

На пример:

за (; i<3; i++)

става ("Здраво!");

Циклични изјави додека и do–while

Основна форма на цикличниот оператор додека:

Додека (услов)

оператор;

Каде оператор

Јамката работи се додека условот се оценува како точно, т.е. изразот во загради враќа ненула резултат. Ова е циклус со предуслов - прво се проверува условот, а потоа се извршува изјавата. Затоа, јамката while нема да се изврши ниту еднаш ако почетниот резултат од пресметувањето на условот е 0.

Основна форма на оператор прави додека:

оператор;

додека(состојба);

Каде операторе едноставен, сложен или празен исказ.

Оператор направидодека– оператор на јамка со постуслов, т.е. прво се извршува исказот, а потоа се проверува состојбата за вистинитост. Бидејќи во циклусот do–while состојбата се проверува на крајот од циклусот, јамката ќе се изврши барем еднаш.

Во циклусите како while и do–while, дозволени се истите методи на рано излегување од циклусот и рано завршување на тековниот чекор на циклусот како во изјавата for, но во вториот случај, за разлика од за циклусот, контролата се пренесува за проверка на состојбата. За да спречите бескрајна јамка во циклусите while и do–while, треба да обезбедите промена на променливите вклучени во условот.

На пример:

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

ако (i%5!=0) продолжи;

printf(“%5d”,i);

Примери на бесконечни јамки:

оператор;

2) while(number_not_0) // Секогаш точно!

оператор;

оператор;

додека (број_не_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“);

Пример за користење на изјавата за

Пресметај. Програмата треба да печати средни и конечни резултати.

Текстот на програмата може да изгледа вака

#вклучи

#вклучи

става („Внеси 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со произволни чекори ч. Вредности а, б, чвнесено од тастатурата. Табелата мора да ги содржи следните колони: број на низа, вредност на аргументот 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 (со предуслов);

Јамка како направи...while (со постуслов);

Јамка како за (броење).

1.Оператор за јамка како while

Формулар за влез:

додека (услов) изјава;

каде што: (услов) – логички израз;

оператор – операторот или телото на циклусот извршено во јамка.

Ако телото на јамката е сложена изјава, тогаш таа мора да биде затворена во загради на операторот (...):

додека (состојба)

група на оператори

Шемата за тоа како функционира таквата јамка: додека условот е вистинит, телото на јамката се извршува и состојбата повторно се проверува итн. Кога состојбата станува лажна, јамката излегува.

2. Операторот на јамка како do…while

Формулар за влез:

оператор;

додека(состојба);

Шемата за тоа како функционира таквата јамка: прво се извршува операторот, потоа се проверува условот, ако условот е вистинит, операторот се извршува и состојбата повторно се проверува итн. Кога состојбата станува лажна, јамката излегува.

Ако телото на јамката е сложена изјава, тогаш, како и за јамка со предуслов, таа мора да биде затворена во загради на операторот (...):



група на оператори

додека(состојба);

3. Операторот на јамка како за

Формулар за влез:

оператор;

A е почетен израз кој ги одредува почетните вредности за параметарот на јамката и, доколку е потребно, почетните вредности за другите параметри. На пример:

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

B е условен израз кој го проверува условот за продолжување на јамката. На пример:

C е израз за зголемување што го одредува зголемувањето на параметарот на јамката и, доколку е потребно, други параметри, тогаш тие се запишуваат во листа. На пример: x+=0.1, i++

4.1.3 Пример за составување алгоритам и програма во C++ за цикличен процес на пресметување.

Пресметајте ја вредноста на изразот:

б– почетна вредност, нејзината вредност се внесува од тастатурата и не се менува;

а– промени во опсегот во чекори од 1;

y- резултат на тоа, неговите вредности се прикажуваат на екранот.

Врз основа на спецификацијата, променливата a е цел број, така што може да се користи како бројач во јамка за броење.

Блок-дијаграмот на алгоритмот за решавање на овој проблем со помош на циклус на броење е како што следува:

#вклучи

#вклучи

#вклучи

printf("Внесете b:");

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("Внесете b:");

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("Внесете b:");

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).

Формализирајте го излезот од резултатите на таков начин што вредностите на параметарот на променливата се јасно истакнати и за секоја специфична вредност, вредностите на резултатот (три променливи од колоната 2 од Табела 3) се прикажани во форма на маса.

Редоследот на работа.

1. Направете анализа на задачата, формулирајте изјава за проблемот.

2. Креирајте блок дијаграми на алгоритми.

3. Направете програма во C++. Обезбедете внесување на почетните податоци од тастатурата и излез на резултатите на екранот.

4. Проверете ја функционалноста на програмата на различни почетни податоци.

5. Анализирајте ги добиените резултати.

Опции за индивидуални задачи.

Опциите за поединечни задачи се избираат од Табела 4 во согласност со бројот на ученикот во групната листа во дневникот на наставникот.

Табела 4. Опции за поединечни задачи

бр. Променлива променлива Видови циклуси
10 ≤ а ≤ 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 ≤ m ≤ 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 ≤ m ≤ 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 ≤ ч ≤ 1,2,Δ h = 0,1 1. Со предуслов, 2. Со постуслов
0 ≤ ч ≤ 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. Како функционира изјавата за?

4. Подвлечете ги исказите во програмата што формираат циклус.

5. Која е разликата помеѓу изјавите while и do ... while?

6. Заменете еден оператор на циклус во програмата со друг.

Во програмирањето често се среќаваме со проблеми кои вклучуваат процеси кои се повторуваат. Затоа, ние мора да знаеме и да можеме да користиме таков концепт како „ циклични пресметувачки процеси».

Ќе биде лесно за почетник програмер да ги разбере користејќи генерализиран пример. Покрај тоа, важно е да се разбере дека во сите програмски јазици постојат начини за имплементација на јамки.

Што е јамка во програмирањето?

Циклус - во програмирањето, е постојано повторување на истите дејства или пресметки, но според исти зависности со различни вредности на променливите.

Концептот на циклус го среќаваме не само во програмирањето. Има циклуси во многу области од нашиот живот.

На пример, циклусот на водата во природата е природен циклус во нашите животи.

Сега да ги погледнеме општите правила и концепти кои се користат во пресметковните циклуси.

Фази на цикличниот процес

Во принцип, циклусот треба да се спроведе во 4 фази:
  • Фаза 1 – подготовка на циклусот (иницијализирање).
    Поставување на почетната вредност за параметарот и променливата јамка.
    Параметар на јамка– оваа вредност што го брои бројот на чекори од циклусот (бројот на повторувања на циклусот).
    Променлива за јамкае величина што ја менува својата вредност во секоја фаза од циклусот.
    Иницијализација- ова е поставување на почетните вредности за параметарот и променливата јамка.
  • Фаза 2 - тело на циклусот.
    Ова е повторено повторување на дејство во циклус или пресметки засновани на истите математички зависности со различни вредности на променливи.
  • Фаза 3 – модификација (промена) на циклусот.
  • Фаза 4 – управување со циклусот.
    Ова е проверка на состојбата за продолжување или почеток на јамката.
Постојат 3 оператори на циклуси во Pascal кои можат да имплементираат било кој алгоритамски – циклична структура :
  1. Изјава за јамка со параметар
  2. Операторот на јамка со предуслов
  3. Оператор на јамка со постуслов
Ќе ги разгледаме подетално во следната статија.

1. Методи за конструирање на циклични пресметковни процеси во програмите.

2. Внесен во компјутеротНреални броеви. Напишете програма што ја прикажува аритметичката средина на ова множество.

Вовед

Цикличните програми се користат во речиси секој софтвер. Во овој случај, циклусите можат да бидат експлицитни или имплицитни. Конкретно, имплицитната јамка е присутна кај управувачите со прекини, кои ефективно работат во бесконечна јамка чие тело се активира од прекинот. Потпрограмите - функциите на прозорците на апликациите на Windows - исто така се циклични. Подолу ги разгледуваме програмите со јамка чие тело содржи функционални модули.

Цикличен процесе пресметковен процес во кој пресметките се вршат постојано со користење на истите формули за различни вредности на аргументот.

Програми, спроведувањето на цикличен процес се нарекуваат циклични програми.

Организацијата на циклусот може да се подели на следниве фази:

подготовка (иницијализирање) на циклусот (И);

вршење пресметки на јамка (тело на јамката) (T);

модификација на параметрите (М);

проверка на состојбата на крајот на циклусот (U).

Редоследот на овие чекори, како што се Т и М, може да варира. Во зависност од локацијата на проверката на состојбата на крајот на циклусот, се прави разлика помеѓу циклуси со долен и горен крај. За јамка која завршува до дното, телото на јамката се извршува барем еднаш бидејќи прво се вршат пресметките, а потоа се проверува условот за излез од јамката.


Во случај на јамка со врвен крај, телото на јамката може да не се изврши дури и еднаш ако излезниот услов е веднаш исполнет.

Циклусот се нарекува детерминистички ако бројот на повторувања на телото на јамката е познат или однапред одреден. Циклусот се нарекува итеративен ако бројот на повторувања на телото на јамката е однапред непознат, но зависи од вредностите на параметрите (некои променливи) вклучени во пресметките.

Тело на јамка- Ова е повеќекратно повторуван дел од програмата.

Параметар на јамкае променлива која добива нови вредности секој пат кога јамката се повторува (јамките можат да бидат едноставни или сложени).

Општ приказ на јамката n пати

Општо земено, јамката n пати е напишана вака:

nc број на повторувања пати

Услужниот збор nts (почеток на циклусот) и kts (крај на циклусот) се напишани строго еден под друг и поврзани со вертикална линија. Десно од оваа линија е напишана повторлива низа наредби (тело на јамката).

Бројот на повторувања е произволен цел број.

При извршување на алгоритмот, низата наредби во телото на јамката се повторува одреден број пати. Правилата на алгоритамскиот јазик дозволуваат специфицирање на кој било цел број на повторувања. Може да биде нула, па дури и негативен. Овие случаи не се сметаат за погрешни, телото на јамката едноставно нема да се изврши ниту еднаш, а компјутерот веднаш ќе продолжи да ги извршува командите напишани по cc

Општ поглед на циклусот досега

Во принцип, циклусот во моментов е напишан на следниов начин:

уште нема услов

| тело на јамка (низа на команди)

При извршување на циклус, компјутерот ги повторува следните дејства:

а) ја проверува состојбата напишана по функционалниот збор while;

б) ако условот не е исполнет, тогаш извршувањето на циклусот завршува и компјутерот почнува да ги извршува наредбите напишани по cc. Ако условот е исполнет, тогаш компјутерот го извршува телото на јамката, повторно ја проверува состојбата итн.

Општ приказ на циклусот за

nc за i од i1 до i2

| тело на јамка (низа на команди)

Тука i е името на вредност од типот на цел број, i1, i2 се произволни цели броеви или изрази со цели броеви. Телото на јамката се извршува последователно за i = i1, i = i1 + 1, i1 + 2, …i = i2.

Правилата на алгоритамскиот јазик дозволуваат да се наведат сите цели броеви i1, i2. особено, i2 може да биде помал од i1. овој случај не се смета за грешка - едноставно телото на циклусот нема да се изврши ниту еднаш, а компјутерот веднаш ќе продолжи со извршување на командите напишани по cc.

Јамка n пати и јамка додека

Јамките n пати и досега се форматирани на речиси ист начин во алгоритамскиот јазик. Ова не е изненадувачки, бидејќи и двете од овие команди дефинираат циклус - повторувачка низа на команди. Услужните зборови nts и kts означуваат дека се извршува циклус, а заглавието на јамката го одредува специфичниот механизам за неговото извршување.

Сепак, овие два циклуса имаат една значајна разлика. Кога компјутерот ќе почне да извршува циклус n пати, знае колку пати ќе треба да го повтори телото на јамката. Кога се извршува циклус, тоа сè уште не е случај: компјутерот ја проверува состојбата на циклусот секој пат и не може однапред да одреди кога ќе заврши извршувањето. Засега, бројот на повторувања на циклус можете да го дознаете само откако ќе заврши циклусот.

Ова јасно покажува во кои случаи која јамка треба да се користи. Ако бројот на повторувања е познат до почетокот на циклусот, погодно е да се користи јамката n пати. Ако бројот на повторувања не може да се одреди однапред, неопходен е циклус.

На пример, програма за автоматска контрола ја има структурата прикажана на сл. 1. Модули вклучени во циклусот(како и модулите за справување со прекини), со по еден влез и по еден излез, обично имаат карактеристична карактеристика што модулите содржат статични променливи на кои им е доделена вредност во тековниот циклус, а анализата на овие променливи се врши во следниот циклус . Така, споменатите променливи ја карактеризираат состојбата на модулот на крајот од тековниот или почетокот на следниот програмски циклус. Во продолжение, ќе разгледаме само такви модули на циклични програми и ќе ги означиме накратко како MCP.


Сл.1. Типична структура на контролна програма со бесконечна јамка.

МЦП имаат разновидна структура, чија сложеност мора да се процени според посебни критериуми. Липаев предложи удобен и објективен критериум за сложеноста на софтверските модули, имено: бројот и вкупната должина на патеките во контролниот графикон на модулот. Се земаат предвид само условните и изјавите за избор. Сепак, овој критериум очигледно не е доволен за MCP со статичка меморија, бидејќи при анализа на MCP потребно е да се запаметат вредностите на сите статички променливи поставени во претходниот циклус. Дополнително, нема препораки за стандардизација на алгоритми и програми, освен за долго познатото структурирано програмирање во најчесто користените програмски јазици како што се C и Pascal. Оваа статија предлага да се пополнат овие празнини во однос на MCP.

2. Фрагменти од циклични програмски модули

Фрагмент со два терминали, или едноставно фрагмент, ќе се смета за дел од програма со еден влез и еден излез (вклучувајќи ги и операторите на јамката) под претпоставка дека MCP што се разгледуваат се структурирани. Наједноставниот фрагмент вклучува една изјава. Низа фрагменти е исто така фрагмент. MCP, пак, е фрагмент и се состои од низа фрагменти.

Методот на независни фрагменти е предложен за синтетизирање на структурата на модулите кои спроведуваат табели за одлуки. Во овој случај, фрагментот што може да се вметне каде било во низата фрагменти од модулот се смета за независен. Независноста на локацијата на таков фрагмент се должи на фактот што податоците анализирани во него не се генерираат во наведената низа на фрагменти, а податоците генерирани во независниот фрагмент не се анализираат во оваа низа фрагменти. Затоа, независни фрагменти може да се извршуваат паралелно (псевдо-паралелно). На сл. Слика 2 покажува можни опции за имплементација за модул со два независни фрагменти. Во опциите „а“ и „б“ фрагментите се преуредуваат без да се наруши суштината на програмата; во опција „в“ фрагментите се спроведуваат паралелно.


Сл.2. Опции за имплементација на модул со независни фрагменти:

а) и б) - последователна имплементација,

в) - паралелна имплементација: двојна хоризонтална линија означува паралелизација на програмата, дебела хоризонтална линија укажува на завршување на паралелните процеси.

Зависен фрагмент е оној чија локација зависи од локацијата на друг фрагмент(и) во модулот. Ќе правиме разлика помеѓу фрагменти кои зависат од горе и долу. Фрагментот кој зависи од врвот мора секогаш да се наоѓа под некој фрагмент во кој се формираат променливите што се користат во овој (зависен) фрагмент. Фрагмент кој зависи од дното секогаш треба да биде поставен над фрагмент кој користи променливи генерирани во овој фрагмент. Два зависни фрагменти, од кои едниот е зависен од горе на вториот, а вториот од долу зависен од првиот, ќе се нарекуваат меѓусебно зависни фрагменти. Тие не можат да се заменуваат и не можат да се спроведуваат паралелно. На сл. Слика 3 покажува пример на модул со меѓусебно зависни фрагменти. Помеѓу заемно зависните фрагменти може да има други, зависни или независни од нив. Сл.3. Модул со зависни фрагменти.

Ќе повикаме зависен фрагмент чија локација во модулот е строго дефинирана како фиксна. На пример, во модулот за препознавање знак внесен од тастатурата, првиот мора да биде фрагментот зависен од дното од вистинскиот внес на знаци. Операторите „почеток“ и „крај“ на модулот се фиксирани фрагменти.

Апсолутно независни фрагменти не постојат, само затоа што во кој било модул ги има споменатите фиксирани фрагменти од почетокот и крајот. Затоа, независен фрагмент, генерално, има можна локациска област ограничена со два меѓусебно зависни фрагменти. Односно, построга дефиниција за независен фрагмент е како што следува: независен во однос на два фиксирани фрагменти ќе го наречеме фрагмент кој може да се постави каде било во низата фрагменти ограничени над и долу со наведените фиксирани фрагменти.




Врв