Ciklisku skaitļošanas datu apstrādes procesu programmēšana. Ciklisko skaitļošanas procesu programmēšana. Paziņojuma for izmantošanas piemērs

Programmēšanā bieži ir uzdevumi, kas prasa atkārtotu vienas un tās pašas programmas paziņojumu grupas izpildi ar dažādām to operandu vērtībām. Tādus procesus sauc ciklisks vai vienkārši cikli. Cikliski atkārtotu apgalvojumu grupa veido t.s cilpas korpuss, ko var attēlot ar vienkāršu vai saliktu izteiksmi. Mēs sauksim vienreizēju cilpas korpusa izpildi iterācija.

Programmā cilpas pamattekstu vienmēr ievada cilpas galvene, kas satur apzīmējumu cilpas operators un izteiksme, kas nosaka (tieši vai netieši) atkārtojumu skaitu. Ņemiet vērā, ka cilpas pamatteksts ir cilpas operatora operands, tāpēc cilpas galvene un pamatteksts veido nedalāmu programmas struktūrvienību. Turpmāk, izmantojot terminu " cilpas operators", mēs domāsim gan cilpas galveni, gan pamattekstu.

Ciklu organizēšanai visās programmēšanas sistēmās ir specializētas cilpas operatori, kuras izmantošana atbrīvo programmētāju no nepieciešamības programmēt ciklus “manuāli”. MathCAD atbalsta divu veidu šādus operatorus - cikls ar predestināciju Priekš (ko sauc arī par cilpa ar skaitītāju) Un cilpa ar priekšnosacījumu Kamēr . Šo operatoru struktūras apraksts ir sniegts 5. tabulā.

5.4.1 Operators Priekš

Šis operators ir jāizmanto gadījumos, kad iterāciju skaits ir iepriekš noteikts, tas ir, zināms iepriekš.

Cilpas galvenešī operatora (labais operands) satur mainīgo, ko sauc parametrs(vai skaitītājs) cikls, Un vērtību sarakstsšis parametrs. Saraksta elementu skaits nosaka arī iterāciju skaitu – katras iterācijas laikā cilpas parametrs saņem nākamo vērtību no galvenē norādītā saraksta.

Cilpas parametrs ir programmas iekšējā mainīgā statuss un tam ir visas tā īpašības (aprakstīts 5.1.4. sadaļā). Parasti cilpas parametrs tiek izmantots cilpas pamattekstā iekļauto izteiksmju labajā pusē, lai gan formāli nav aizliegts to lietot izteiksmju kreisajā pusē (tas ir, pa kreisi no vietējās definīcijas operators "f"). Jāatceras, ka, ja parametrs tika mainīts cilpas pamattekstā, tā mainītā vērtība būs spēkā tikai līdz pašreizējās iterācijas beigām, jo ​​pirms nākamās iterācijas sākuma parametrs joprojām saņems nākamo vērtību no saraksts, kas norādīts cilpas galvenē.

Formāli cilpas korpusa izteiksmēs ir atļauts cilpas parametru neizmantot vispār - šajā gadījumā parametru vērtību sarakstam nav nekādas nozīmes - būtisks ir tikai šī saraksta garums, kas nosaka (iespējams, bezjēdzīgu) iterāciju skaits.

Pēc pēdējās iterācijas pabeigšanas tiks izpildīts programmas paziņojums, kas seko cilpas paziņojumam. Šajā gadījumā mainīgais, kas tiek izmantots kā pabeigtās cilpas parametrs, saglabā vērtību, kāda tam bija pēdējā faktiski pabeigtajā iterācija[*]. Ņemiet vērā, ka šī vērtība ne vienmēr sakrīt ar pēdējo vērtību no saraksta, kas norādīts cilpas galvenē, jo, iedarbinot operatoru, ir iespējama “agrīna” iziešana no cilpas. Pārtraukt iekļauts cilpas korpusā.

Vērtību saraksts Cilpas parametrs tiek ierakstīts cilpas galvenē aiz simbola " Î ", kas norāda dalību komplektā (šis simbols nav jāievada manuāli - tas tiks automātiski parādīts, ievadot operatoru Priekš ). MathCAD ļauj izmantot trīs formas ieraksti šajā sarakstā: tieša pārsūtīšana– saraksta elementi ir skaidri norādīti, atdalot tos ar komatiem, parametrs saņem vērtības no saraksta tādā secībā, kādā tās parādās; ranžētā mainīgā stilā - saraksta elementi veido atbilstošo aritmētisko sēriju; masīvs– saraksta elementi secīgi saņem masīva elementu vērtības to indeksu secībā (vispirms kolonnas no kreisās uz labo, pēc tam rindas no augšas uz leju).

Trīs 21. attēlā redzamās programmas ilustrē dažādus operatora lietojumus Priekš .

Programma Fakts(n) aprēķina skaitļa faktoriālu n . Šajā programmā cilpas operators ir daļa no saliktas izteiksmes, kas savukārt ir nosacījuma operatora operands Citādi. Cilpas parametrs k iegūst vērtības no veselas aritmētiskās sērijas.

Programma Ch(V,N,p) apstrādā ievades vektoru V , aizstājot to ar vērtību lpp tie elementi, kuru indeksus nosaka otrā ievadvektora elementi N . Šajā piemērā cilpas parametru vērtību saraksts i ko nosaka vektora elementu kopa N . Ņemiet vērā, ka abas šīs programmas veic ievades datu kontroli un bloķē galvenā algoritma izpildi, ja faktiskie programmas argumenti ir norādīti nepareizi.

Programma L(M,z) dots piemērā V ), ir pievienoti detalizēti komentāri, un tas neprasa paskaidrojumus. Šī programma ilustrē iespēju izmantot vairākus cilpas paziņojumus, no kuriem viens ir iekļauts paziņojumos ķermeni cits. Lietošana ligzdotas cilpas- tipisks paņēmiens, ko izmanto daudzdimensiju masīvu apstrādei.

21. attēls – cikla programmēšanas piemēri Priekš


22. attēlā parādīta operatoru izmantošana Pārtraukt Un Turpināt cilpas korpusā. Parasti šie operatori paši ir operandi nosacījuma paziņojumi Ja vai Citādi .

Operators Pārtraukt ("pārtraukt") pārtrauc cilpas izpildi un nodod vadību operatoram, kas seko pārtrauktā cilpas operatoram. Ņemiet vērā, ka, ja operators Pārtraukt pārtrauca ligzdota cilpa, turpināsies ārējās cilpas izpilde.

Operators Turpināt ("turpināt") rīkojas savādāk – viņš pārtrauc tikai cilpas pašreizējo iterāciju un nodod vadību šīs cilpas galvenei, pēc kuras cilpa tiek izpildīta turpinās no nākamās iterācijas (ja vien, protams, pārtrauktā iterācija nebija pēdējā).

Operators Pārtraukt atļauts lietot un ārpusē cikla korpuss. Šajā gadījumā tiek pārtraukta visas apakšprogrammas izpilde, un tiek atgriezts tās pēdējās faktiski izpildītās izteiksmes novērtējuma rezultāts.

22. attēls – operatoru izmantošanas piemēri Pārtraukt Un Turpināt

Funkcija SumN(V) summē tikai tos vektora elementus, kas satur skalārus skaitliskos datus, un izlaiž pārējos elementus. Funkcija Apgrieztā (V) veido vektoru, kura elementi ir sākotnējā vektora atbilstošo elementu apgrieztās vērtības. Turklāt, ja nākamajā elementā ir skaitlis "0" vai tas nav skaitliska tipa skalārs, cikls tiek pārtraukts. Ņemiet vērā, ka operators Pārtraukt pēdējā piemērā tas nepārtrauc programmu, bet nodod vadību operatoram Atgriezties , tūlīt aiz operatora Priekš .

5.4.3 Operators Kamēr

Atšķirībā no operatora Priekš , paziņojuma galvene Kamēr (tulkojumā - " Uz redzēšanos") nesatur nepārprotamas norādes par atkārtojumu skaitu - tas satur loģiskā izteiksme, kuras vērtība tiek aprēķināta automātiski pirms sākuma katras nākamās iterācijas izpilde[†]. Kamēr šī izteiksme ir patiesa, cilpa turpinās atkārtot; tiklīdz izteiksme kļūst nepatiesa pēc nākamās iterācijas pabeigšanas, nākamā cilpas iterācija netiks izpildīta, un programmas priekšraksts, kas seko priekšrakstam, saņems kontroli Kamēr .

Acīmredzot, ja cilpas galvenē tiek ievietota identiski nepatiesa loģiskā izteiksme, šī cilpa nepabeigs nevienu no iterācijām, un, ja šī izteiksme ir identiski patiesa, cilpa būs bezgalīga (pēdējo situāciju sauc cilpas programmas). Lai izvairītos no šādām situācijām, loģiskās izteiksmes operandos jāiekļauj viens vai vairāki mainīgie, kas maina to vērtības cilpas korpusā lai cilpa būtu ierobežota (var izmantot citus līdzekļus, lai novērstu cilpu - piemēram, piespiežot operatoru iziet no cilpas Pārtraukt ).

Operatora izmantošanas piemēri Kamēr ir parādītas 23. attēlā. Dotas trīs iespējas vienas un tās pašas problēmas risināšanai: katra no programmām F0 , F1 Un F2 atgriež avota vektora pirmā elementa indeksuV pārsniedz noteikto vērtībuz .

Pirmā programma (piemērs A ) pievieno vienu skaitītājam k cilpas korpusā Kamēr līdz nākamajai k sākotnējā vektora th elements nepārsniegs norādīto vērtību z . Pēc tam cilpa beidzas un programma atgriež pēdējo mainīto mainīgā vērtību k , kas ir problēmas risinājums. Ņemiet vērā, ka atšķirībā no cikla Priekš , skaitītājs k šeit ir nepieciešams to apstrādāt ar atsevišķiem paziņojumiem: inicializēt (tas ir, piešķirt tai sākotnējo vērtību) pirms cilpas operatora un mainīt tā vērtību cilpas pamattekstā.

Šo iespēju ir viegli redzēt A ) programmai ir būtisks trūkums: tas neliedz programmai veikt cilpu gadījumā, ja problēmai nav risinājuma, tas ir, ja parametrs z pārsniedz vektora lielākā elementa vērtību V . Šajā piemērā cilpa šādā situācijā īsti nenotiks - taču tas nav mūsu programmas, bet gan MathCAD sistēmas nopelns, kas kontrolēs vektora indeksa izvadi. V ārpus pieļaujamajām vērtībām un ģenerēs kļūdas ziņojumu.

Šī iespēja ir brīva no šī trūkuma b ) programmas, kurā cilpas pamattekstā ir papildu pārbaude nākamās indeksa vērtības derīgumam un piespiedu kārtā tiek pārtraukta cilpa ar operatoru Pārtraukt atbilstošā situācijā ar īsziņas izsniegšanu.

Varbūt visefektīvākais šīs problēmas risinājums ir iespēja V ), kas vispār neizmanto operatoru Kamēr . Šajā programmā mainīgais k izmanto tikai, lai saglabātu "stila tīrību" - lai izslēgtu cilpas parametra apstrādi i ārpus operatora Priekš .

23. attēls – cikla programmēšanas piemēri Kamēr

Darba mērķis:

Izpētiet cikliskos operatorus, kamēr, do - kamēr, uzziniet, kā sastādīt un programmēt cikliskos algoritmus.

Īsa teorētiskā informācija

Ciklu operatori tiek izmantoti, ja ir nepieciešams vairākas reizes atkārtot noteiktas darbības (operatorus un darbības), un šādas algoritmu sadaļas tiek sauktas par cilpām.

For cilpas operators

For cilpas priekšraksta pamatforma ir:

for (izteiksme_1; izteiksme_2; izteiksme_3)

operators;

Kur izteiksme_1– cikla parametra sākotnējā vērtība;

izteiksme_2– cikla turpināšanas nosacījumu pārbaude;

izteiksme_3– cikla parametra maiņa (korekcija);

operators– vienkāršs vai salikts operators C valodā.

Operatora darbības shēma ir šāda: tikai vienu reizi vispirms tiek aprēķināta izteiksme_1, pēc tam tiek pārbaudīta izteiksme_2, un, ja tā ir “true”, tad tiek izpildīta programmas cikliskā sadaļa, pēc tam tiek labots parametrs utt. līdz izteiksme_2 iegūst vērtību “false”.

Piemēram: par (k=1; k<5; k++)

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

Šī operatora izpildes rezultātā skaitļi no 1 līdz 4 tiek izdrukāti kolonnā.

Kā cilpas parametru varat izmantot jebkura pamata tipa mainīgo.

Piemēram:

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

printf(“%c”,ch); // Latīņu alfabēts

Programmā ir rūpīgi jākontrolē for cilpu struktūra, lai nenonāktu bezgalīgā cilpā (no kuras nav izejas).

Piemēram:

for(k=10; k>6;k++)

printf ("bezgalīga cilpa\n");

Iziet no cilpas pirms grafika šādos veidos:

Pēc papildu nosacījuma;

Izmantojot šādus operatorus:

pārtraukums;- iziet no cilpas, kurā atrodas pārtraukums, vadība tiek pārnesta uz pirmo izpildīto paziņojumu pēc cilpas;

iziet(int Kod);- iziet no programmas;

atgriešanās;- iziet no funkcijas;

Izmantojot beznosacījumu lēciena operatoru iet uz<метка>;

Agri pašreizējā cikliskā posma pabeigšana iespējams, izmantojot papildu nosacījumu vai operatoru Turpināt, kas pārtrauc pašreizējās cilpas soļa izpildi, t.i. izlaiž pārējās cilpas paziņojumus un pārsūta vadību uz cilpas priekšrakstu, lai pielāgotu parametru un pārbaudītu stāvokli.

Kontroles pārnešana no ārpuses uz cilpas iekšpusi ir aizliegta.

Iekavās var nebūt nevienas for cilpas izteiksmes, bet simbola ";". nevar nolaist.

Piemēram:

for (; i<3; i++)

liek("Sveiks!");

Cikliski, kamēr un dari, kamēr paziņojumi

Cikliskā operatora pamatforma kamēr:

Kamēr (stāvoklis)

operators;

Kur operators

Cilpa darbojas tik ilgi, kamēr nosacījums tiek novērtēts kā patiess, t.i. izteiksme iekavās atgriež rezultātu, kas nav nulle. Šī ir cilpa ar priekšnosacījumu - vispirms tiek pārbaudīts nosacījums, tad izpilda paziņojumu. Tāpēc cilpa while netiks izpildīta pat vienu reizi, ja nosacījuma aprēķina sākotnējais rezultāts ir 0.

Operatora pamatforma darīt kamēr:

operators;

kamēr(nosacījums);

Kur operators ir vienkāršs, salikts vai tukšs paziņojums.

Operators darītkamēr– cilpas operators ar pēcnosacījumu, t.i. vispirms tiek izpildīts paziņojums, un pēc tam tiek pārbaudīts nosacījuma patiesums. Tā kā cilpas do-while nosacījums tiek pārbaudīts cilpas beigās, cilpa tiks izpildīta vismaz vienu reizi.

Cilpās, piemēram, while un do–while, ir atļautas tās pašas metodes agrīnai iziešanai no cilpas un cilpas pašreizējā posma agrīnai pabeigšanai kā priekšrakstā, taču otrajā gadījumā, atšķirībā no for cilpas, kontrole tiek nodota. stāvokļa pārbaudei. Lai novērstu nebeidzamu cilpu while un do-while cilpu iekšpusē, ir jāparedz nosacījumā iekļauto mainīgo maiņa.

Piemēram:

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

if (i%5!=0) turpināt;

printf(“%5d”,i);

Bezgalīgu cilpu piemēri:

operators;

2) while(number_not_0) // Vienmēr taisnība!

operators;

operators;

while(skaitlis_nav_0); // Vienmēr taisnība!

Starp cilpas operatoriem ir jābūt izejas nosacījumam.

Ligzdotas cilpas

Ligzdotu cilpu gadījumā viena cilpa atrodas citā, piemēram:

for(i=nn;i

for(j=mn;j

operators;

Kur operators ir vienkāršs, salikts vai tukšs paziņojums. Iekšējā cilpa tiks izpildīta katrai parametra i vērtībai, kas apmierina ārējās cilpas nosacījumu.

Piemērs:

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

for(j=1;j<4;j++)

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

printf("\n");

Paziņojuma for izmantošanas piemērs

Aprēķināt. Programmai jādrukā starpposma un gala rezultāti.

Programmas teksts var izskatīties šādi

#iekļauts

#iekļauts

liek ("Ievadiet N");

scanf(“%d”,&N);

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

( // ņemt un dubultā uzdevums

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

printf("\n ATBILDE: s=%f, Nospiediet jebkuru taustiņu...",s);

Iespējas individuāliem uzdevumiem

Uzrakstiet programmu funkciju vērtību tabulas noteikšanai plkst patvaļīgā diapazonā [ a,b] argumentu izmaiņas X ar patvaļīgiem soļiem h. Vērtības a, b, h ievadīts no tastatūras. Tabulā jābūt šādām kolonnām: kārtas numurs, argumenta vērtība x, funkcijas vērtība, ziņojums par funkcijas palielināšanu vai samazināšanos, divu blakus esošo funkciju vērtību atšķirība.

Nosakiet funkcijas maksimālo un minimālo vērtību.

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.

"Ciklisku skaitļošanas procesu programmēšana"

Darba mērķis: apgūt metodes ciklisku skaitļošanas procesu algoritmu sastādīšanai un sarežģītas struktūras ciklisku programmu organizēšanai.

Teorētiskā daļa

4.1.1. Cikliskie algoritmi.

Cikls ir darbību secība, ko var veikt vairāk nekā vienu reizi.

Apļveida algoritms ir algoritms, kas satur vienu vai vairākas cilpas.

Ir 3 veidu cikli:

Cilpa ar priekšnosacījumu;

Cilpa ar pēcnosacījumu;

Cilpa ar skaitītāju (skaitīšanas cilpa).

Ja cilpas izpilde ir saistīta ar kādu loģisku nosacījumu, tad tiek izmantotas cilpas ar priekšnosacījumu vai pēcnosacījumu.

Skaitītāja cilpas ir klase, kurā cilpas korpusa izpilde ir jāatkārto iepriekš noteiktu reižu skaitu.

Ciklisko algoritmu blokshēmas izskatās šādi:

1. Cilpa ar skaitītāju.

2. Cilpa ar priekšnosacījumu. 3. Cilpa ar pēcnosacījumu.

4.1.2. Cilpas operatori C++ programmēšanas valodā.

C++ valodā katram cilpas veidam ir atbilstošs operators:

Loop like while (ar priekšnosacījumu);

Loop like do...while (ar pēcnosacījumu);

Cilpa patīk (skaitīšanai).

1.Cilpas operators, piemēram, kamēr

Pieteikšanās forma:

while (nosacījuma) paziņojums;

kur: (nosacījums) – loģiskā izteiksme;

operators – cilpā izpildītās cilpas operators vai korpuss.

Ja cilpas pamatteksts ir salikts paziņojums, tas jāiekļauj operatora iekavās (...):

kamēr (stāvoklis)

operatoru grupa

Šādas cilpas darbības shēma: kamēr nosacījums ir patiess, tiek izpildīts cilpas pamatteksts un nosacījums tiek pārbaudīts vēlreiz utt. Kad nosacījums kļūst nepatiess, cilpa iziet.

2. Loop operators like do...while

Pieteikšanās forma:

operators;

kamēr(nosacījums);

Shēma, kā darbojas šāda cilpa: vispirms tiek izpildīts operators, tad tiek pārbaudīts nosacījums, ja nosacījums ir patiess, tiek izpildīts operators un vēlreiz tiek pārbaudīts nosacījums utt. Kad nosacījums kļūst nepatiess, cilpa iziet.

Ja cilpas pamatteksts ir salikts paziņojums, tad, tāpat kā cilpai ar priekšnosacījumu, tas jāiekļauj operatora iekavās (...):



operatoru grupa

kamēr(nosacījums);

3. Cilpas operators patīk

Pieteikšanās forma:

operators;

A ir sākotnējā izteiksme, kas norāda cilpas parametra sākotnējās vērtības un, ja nepieciešams, citu parametru sākotnējās vērtības. Piemēram:

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

B ir nosacījuma izteiksme, kas pārbauda cilpas turpināšanas nosacījumu. Piemēram:

C ir pieauguma izteiksme, kas norāda cilpas parametra pieaugumu un, ja nepieciešams, citus parametrus, tad tie tiek ierakstīti sarakstā. Piemēram: x+=0,1, i++

4.1.3. Algoritma un programmas sastādīšanas piemērs C++ valodā cikliskajam skaitļošanas procesam.

Aprēķiniet izteiksmes vērtību:

b– sākotnējā vērtība, tās vērtība tiek ievadīta no tastatūras un nemainās;

a– diapazona izmaiņas pa 1;

y- rezultāts, tā vērtības tiek parādītas ekrānā.

Pamatojoties uz specifikāciju, mainīgais a ir vesels skaitlis, tāpēc to var izmantot kā skaitītāju skaitīšanas cilpā.

Algoritma blokshēma šīs problēmas risināšanai, izmantojot skaitīšanas ciklu, ir šāda:

#iekļauts

#iekļauts

#iekļauts

printf ("Ievadiet b:");

scanf(“%f”,&b);

printf("a y\n");

priekš (a=0;a<=10;a++)

printf(“%3d”,a);

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

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

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

Algoritma blokshēma šīs problēmas risināšanai, izmantojot cilpu ar priekšnosacījumu, ir šāda:

Šim algoritmam atbilstošās C++ programmas teksts ir šāds:

#iekļauts

#iekļauts

#iekļauts

printf ("Ievadiet 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 neeksistē\n”);

Algoritma blokshēma šīs problēmas risināšanai, izmantojot cilpu ar pēcnosacījumu, ir šāda:

Šim algoritmam atbilstošās C++ programmas teksts ir šāds:

#iekļauts

#iekļauts

#iekļauts

printf ("Ievadiet 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 neeksistē\n”);

kamēr (a<=10);

Praktiskā daļa

4.2.1 Prasības darbu veikšanai:

Pabeidziet laboratorijas darba Nr. 3 uzdevumu viena mainīgā lieluma vērtību diapazonam. Maināmais lielums, tā izmaiņu diapazons un solis ir norādīti 4. tabulā. Izveidojiet algoritmu un programmu blokshēmas divu veidu cikliem, kas norādīti individuālajā uzdevumā (4. tabula).

Formalizējiet rezultātu izvadi tā, lai mainīgā parametra vērtības būtu skaidri izceltas un katrai konkrētajai vērtībai rezultāta vērtības (trīs mainīgie no 3. tabulas 2. ailes) tiktu parādītas formā. no galda.

Darba kārtība.

1. Veikt uzdevuma analīzi, formulēt problēmas izklāstu.

2. Izveidot algoritmu blokshēmas.

3. Izveidojiet programmu C++ valodā. Nodrošiniet sākotnējo datu ievadi no tastatūras un rezultātu izvadi uz ekrānu.

4. Pārbaudiet programmas funkcionalitāti uz dažādiem sākotnējiem datiem.

5. Analizējiet iegūtos rezultātus.

Iespējas individuāliem uzdevumiem.

Individuālo uzdevumu iespējas tiek atlasītas no 4. tabulas atbilstoši skolēna numuram grupas sarakstā skolotāja žurnālā.

4. tabula. Atsevišķu uzdevumu iespējas

Nē. Mainīgs mainīgais Ciklu veidi
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. Ar priekšnosacījumu, 2. Saskaitāms
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
5 ≤ e ≤ 35,Δ e = 2 1. Saskaitāms, 2. Ar pēcnosacījumu
-5 ≤ m ≤ 15,Δ m = 1 1. Ar priekšnosacījumu, 2. Saskaitāms
1 ≤ c ≤ 70,Δ c = 3 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
1,5 ≤ c ≤ 15,Δ c = 0,5 1. Saskaitāms, 2. Ar pēcnosacījumu
-8 ≤ b ≤ 28,Δ b = 2 1. Ar priekšnosacījumu, 2. Saskaitāms
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
-7 ≤ k ≤ 2,Δ k = 0,3 1. Saskaitāms, 2. Ar pēcnosacījumu
-1 ≤ m ≤ 21,Δ m = 1 1. Ar priekšnosacījumu, 2. Saskaitāms
-2 ≤ e ≤ 34,Δ e = 2 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
-11 ≤ c ≤ 23,Δ c = 2 1. Saskaitāms, 2. Ar pēcnosacījumu
-13 ≤ p ≤ 50,Δ p = 3 1. Ar priekšnosacījumu, 2. Saskaitāms
3,3 ≤ b ≤ 9,3,Δ b = 0,3 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
3,5 ≤ y ≤ 12,3,Δ y = 0,4 1. Saskaitāms, 2. Ar pēcnosacījumu
-7,5 ≤ a ≤ 5,7,Δ a = 0,6 1. Ar priekšnosacījumu, 2. Saskaitāms
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
0 ≤ h ≤ 10,Δ h=0,5 1. Saskaitāms, 2. Ar pēcnosacījumu
-15 ≤ b ≤ 15, Δ b =2 1. Ar priekšnosacījumu, 2. Saskaitāms
-7 ≤ l ≤ 3, Δ l = 0,5 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Saskaitāms, 2. Ar pēcnosacījumu
1 ≤ k ≤ 9, Δ k = 0,4 1. Ar priekšnosacījumu, 2. Saskaitāms
0 ≤ b ≤ 6,9,Δ b = 0,3 1. Ar priekšnosacījumu, 2. Ar pēcnosacījumu
-3 ≤ v ≤ 9,Δ v = 0,6 1. Saskaitāms, 2. Ar pēcnosacījumu
-2 ≤ p ≤ 2,6,Δ p = 0,2 1. Ar priekšnosacījumu, 2. Saskaitāms

4.3 Testa jautājumi un praktiskie uzdevumi:

1. Kā darbojas paziņojums while?

2. Kā darbojas do... while paziņojums?

3. Kā darbojas priekšraksts?

4. Programmā pasvītrojiet apgalvojumus, kas veido ciklu.

5. Kāda ir atšķirība starp while un do ... while apgalvojumiem?

6. Aizstāt vienu cilpas operatoru programmā ar citu.

Programmēšanā mēs bieži sastopamies ar problēmām, kas saistītas ar procesiem, kas atkārtojas. Tāpēc mums ir jāzina un jāprot lietot tāds jēdziens kā “ cikliskie skaitļošanas procesi».

Iesācējam programmētājam būs viegli tos saprast, izmantojot vispārinātu piemēru. Turklāt ir svarīgi saprast, ka visās programmēšanas valodās ir veidi, kā ieviest cilpas.

Kas ir cilpa programmēšanā?

Cikls - programmēšanā ir to pašu darbību vai aprēķinu atkārtota atkārtošana, bet saskaņā ar tām pašām atkarībām ar dažādām mainīgo vērtībām.

Ar cikla jēdzienu sastopamies ne tikai programmēšanā. Cikli ir daudzās mūsu dzīves jomās.

Piemēram, ūdens cikls dabā ir dabisks cikls mūsu dzīvē.

Tagad apskatīsim vispārīgos noteikumus un jēdzienus, ko izmanto skaitļošanas ciklos.

Cikliskā procesa posmi

Kopumā cikls jāīsteno 4 posmos:
  • 1. posms – cikla sagatavošana (inicializācija).
    Parametra un cilpas mainīgā sākotnējās vērtības iestatīšana.
    Cilpas parametrs– šī vērtība, kas skaita cikla soļu skaitu (cikla atkārtojumu skaitu).
    Cilpas mainīgais ir lielums, kas maina savu vērtību katrā cikla posmā.
    Inicializācija– tas ir parametra un cilpas mainīgā sākotnējo vērtību iestatīšana.
  • 2. posms – cikla korpuss.
    Tas ir atkārtots darbības atkārtojums ciklā vai aprēķini, kuru pamatā ir tās pašas matemātiskās atkarības ar dažādām mainīgo vērtībām.
  • 3. posms – cikla modifikācija (maiņa).
  • 4. posms – cikla vadība.
    Šī ir stāvokļa pārbaude cilpas turpinājumam vai sākumam.
Pascal ir 3 cilpas operatori, kas var ieviest jebkuru algoritmiski – cikliskā struktūra :
  1. Cilpas paziņojums ar parametru
  2. Cilpas operators ar priekšnosacījumu
  3. Cilpas operators ar pēcnosacījumu
Mēs tos sīkāk aplūkosim nākamajā rakstā.

1. Metodes ciklisku skaitļošanas procesu konstruēšanai programmās.

2. Ievadīts datorāNreāli skaitļi. Uzrakstiet programmu, kas parāda šīs kopas vidējo aritmētisko.

Ievads

Cikliskās programmas tiek izmantotas gandrīz jebkurā programmatūrā. Šajā gadījumā cikli var būt tieši vai netieši. Konkrēti, netiešā cilpa ir sastopama pārtraukumu apstrādātājos, kas efektīvi darbojas bezgalīgā cilpā, kuras korpusu aktivizē pārtraukums. Apakšprogrammas - Windows lietojumprogrammu logu funkcijas - arī ir cikliskas. Zemāk mēs aplūkojam programmas ar cilpu, kuras korpusā ir funkcionāli moduļi.

Ciklisks process ir skaitļošanas process, kurā aprēķini tiek veikti atkārtoti, izmantojot vienas un tās pašas formulas dažādām argumenta vērtībām.

Programmas, īstenojot ciklisku procesu, sauc par cikliskām programmām.

Cikla organizēšanu var iedalīt šādos posmos:

cikla sagatavošana (inicializācija) (UN);

cilpas aprēķinu veikšana (cilpas korpuss) (T);

parametru modifikācija (M);

pārbaudot cikla beigu nosacījumu (U).

Šo darbību secība, piemēram, T un M, var atšķirties. Atkarībā no cikla beigu stāvokļa pārbaudes vietas tiek izšķirti cikli ar apakšējo un augšējo galotni. Apakšējā beigu cilpai cilpas pamatteksts tiek izpildīts vismaz vienu reizi, jo vispirms tiek veikti aprēķini un pēc tam tiek pārbaudīts nosacījums iziešanai no cilpas.


Augšējā gala cilpas gadījumā cilpas pamattekstu var neizpildīt pat vienu reizi, ja nekavējoties tiek izpildīts izejas nosacījums.

Ciklu sauc par deterministisku, ja ir zināms vai iepriekš noteikts cilpas korpusa atkārtojumu skaits. Ciklu sauc par iteratīvu, ja cilpas korpusa atkārtojumu skaits nav iepriekš zināms, bet ir atkarīgs no aprēķinos iesaistīto parametru (dažu mainīgo) vērtībām.

Cilpas korpuss- Šī ir vairākkārt atkārtota programmas sadaļa.

Cilpas parametrs ir mainīgais, kas iegūst jaunas vērtības katru reizi, kad cilpa tiek atkārtota (cilpas var būt vienkāršas vai sarežģītas).

Vispārīgs cilpas skats n reizes

Kopumā cilpa n reizes tiek uzrakstīta šādi:

nc atkārtojumu skaits

Servisa vārdu nts (cikla sākums) un kts (cikla beigas) raksta stingri viens zem otra un savieno ar vertikālu līniju. Pa labi no šīs rindas ir rakstīta atkārtojama komandu secība (cilpas pamatteksts).

Atkārtojumu skaits ir patvaļīgs vesels skaitlis.

Izpildot algoritmu, komandu secība cilpas pamattekstā tiek atkārtota norādīto reižu skaitu. Algoritmiskās valodas noteikumi ļauj norādīt jebkuru veselu atkārtojumu skaitu. Tas var būt nulle vai pat negatīvs. Šie gadījumi netiek uzskatīti par kļūdainiem, cilpas pamatteksts vienkārši netiks izpildīts pat vienu reizi, un dators nekavējoties turpinās izpildīt komandas, kas rakstītas pēc cc

Vispārējs skatījums uz ciklu līdz šim

Kopumā cikls pašlaik ir rakstīts šādi:

vēl nav nosacījumu

| cilpas pamatteksts (komandu secība)

Veicot ciklu, dators atkārto šādas darbības:

a) pārbauda nosacījumu, kas rakstīts aiz funkcijas vārda while;

b) ja nosacījums nav izpildīts, tad cilpas izpilde beidzas un dators sāk izpildīt pēc cc rakstītās komandas. Ja nosacījums ir izpildīts, tad dators izpilda cilpas pamattekstu, vēlreiz pārbauda nosacījumu utt.

Cikla vispārīgs skats par

nc priekš i no i1 līdz i2

| cilpas pamatteksts (komandu secība)

Šeit i ir vesela skaitļa veida vērtības nosaukums, i1, i2 ir patvaļīgi veseli skaitļi vai izteiksmes ar veselu skaitļu vērtībām. Cilpas pamattekstu izpilda secīgi, ja i = i1, i = i1 + 1, i1 + 2, …i = i2.

Algoritmiskās valodas noteikumi ļauj norādīt jebkurus veselus skaitļus i1, i2. jo īpaši i2 var būt mazāks par i1. šis gadījums netiek uzskatīts par kļūdu - vienkārši cilpas pamatteksts netiks izpildīts pat vienu reizi, un dators nekavējoties sāks izpildīt pēc cc rakstītās komandas.

Cilpu n reizes un ciklu kamēr

Cilpas n reizes un līdz šim ir formatētas gandrīz vienādi algoritmiskajā valodā. Tas nav pārsteidzoši, jo abas šīs komandas definē cilpu - atkārtotu komandu secību. Pakalpojuma vārdi nts un kts norāda, ka tiek izpildīta cilpa, un cilpas galvene norāda konkrētu tās izpildes mehānismu.

Tomēr šiem diviem cikliem ir viena būtiska atšķirība. Kad dators sāk izpildīt cilpu n reizes, tas zina, cik reizes tam būs jāatkārto cilpas pamatteksts. Izpildot cilpu, tas vēl nenotiek: dators katru reizi pārbauda cilpas stāvokli un nevar iepriekš noteikt, kad izpilde beigsies. Pagaidām cikla atkārtojumu skaitu var uzzināt tikai pēc cikla pabeigšanas.

Tādējādi ir skaidrs, kādos gadījumos, kura cilpa ir jāizmanto. Ja līdz cilpas sākuma brīdim ir zināms atkārtojumu skaits, ir ērti izmantot cilpu n reizes. Ja atkārtojumu skaitu nevar noteikt iepriekš, ir nepieciešams cikls.

Piemēram, automātiskās vadības programmai ir tāda struktūra, kā parādīts attēlā. 1. Ciklā iekļauti moduļi(kā arī pārtraukumu apstrādes moduļiem), ar vienu ieeju un vienu izeju, parasti ir raksturīga iezīme, ka moduļos ir statiski mainīgie, kuriem pašreizējā ciklā tiek piešķirta vērtība, un šo mainīgo analīze tiek veikta nākamajā ciklā. . Tādējādi minētie mainīgie raksturo moduļa stāvokli pašreizējās programmas beigās vai nākamā programmas cikla sākumā. Turpmāk aplūkosim tikai šādus ciklisko programmu moduļus un īsi apzīmēsim tos kā MCP.


1. att. Tipiska vadības programmas struktūra ar bezgalīgu cilpu.

MCP ir daudzveidīga struktūra, kuras sarežģītība jānovērtē pēc īpašiem kritērijiem. V.V.Lipajevs piedāvāja ērtu un objektīvu programmatūras moduļu sarežģītības kritēriju, proti: ceļu skaitu un kopējo garumu moduļa vadības grafikā. Tiek ņemti vērā tikai nosacījumi un atlases paziņojumi. Tomēr ar šo kritēriju nepārprotami nepietiek MCP ar statisku atmiņu, jo, analizējot MCP, ir jāatceras visu statisko mainīgo vērtības, kas iestatītas iepriekšējā ciklā. Turklāt nav ieteikumu par algoritmu un programmu standartizāciju, izņemot sen zināmo strukturēto programmēšanu plaši lietotās programmēšanas valodās, piemēram, C un Pascal. Šajā rakstā ir ierosināts aizpildīt šīs nepilnības attiecībā uz MCP.

2. Ciklisko programmu moduļu fragmenti

Divu terminālu fragments vai vienkārši fragments tiks uzskatīts par programmas sadaļu ar vienu ievadi un vienu izvadi (ieskaitot cilpas operatorus), pieņemot, ka aplūkojamie MCP ir strukturēti. Vienkāršākais fragments ietver vienu paziņojumu. Fragmentu secība arī ir fragments. Savukārt MCP ir fragments un sastāv no fragmentu secības.

Neatkarīgo fragmentu metode ir piedāvāta to moduļu struktūras sintezēšanai, kuri realizē lēmumu tabulas. Šajā gadījumā fragments, ko var ievietot jebkurā vietā moduļa fragmentu secībā, tiek uzskatīts par neatkarīgu. Šāda fragmenta atrašanās vietas neatkarība ir saistīta ar to, ka tajā analizētie dati netiek ģenerēti norādītajā fragmentu secībā, un neatkarīgajā fragmentā ģenerētie dati netiek analizēti šajā fragmentu secībā. Tāpēc neatkarīgi fragmenti var tikt izpildīti paralēli (pseidoparalēli). Attēlā 2. attēlā parādītas iespējamās ieviešanas iespējas modulim ar diviem neatkarīgiem fragmentiem. Opcijās “a” un “b” fragmenti tiek pārkārtoti, neizkropļojot programmas būtību; variantā “c” fragmenti tiek realizēti paralēli.


2. att. Moduļa ar neatkarīgiem fragmentiem ieviešanas iespējas:

a) un b) - secīga ieviešana,

c) - paralēla ieviešana: dubultā horizontālā līnija norāda uz programmas paralēlizāciju, bieza horizontāla līnija norāda uz paralēlu procesu pabeigšanu.

Atkarīgais fragments ir tāds, kura atrašanās vieta ir atkarīga no cita(-u) fragmenta(-u) atrašanās vietas modulī. Mēs nošķirsim augš un zem atkarīgos fragmentus. No augšas atkarīgajam fragmentam vienmēr jāatrodas zem kāda fragmenta, kurā veidojas šajā (atkarīgajā) fragmentā izmantotie mainīgie. No apakšas atkarīgs fragments vienmēr jānovieto virs fragmenta, kurā tiek izmantoti šajā fragmentā ģenerētie mainīgie. Divi atkarīgi fragmenti, no kuriem viens ir atkarīgs no augšas no otrā, bet otrs no apakšas ir atkarīgs no pirmā, tiks saukti par savstarpēji atkarīgiem fragmentiem. Tos nevar aizstāt un īstenot paralēli. Attēlā 3. attēlā parādīts moduļa piemērs ar savstarpēji atkarīgiem fragmentiem. Starp savstarpēji atkarīgiem fragmentiem var būt citi, no tiem atkarīgi vai neatkarīgi. 3. att. Modulis ar atkarīgiem fragmentiem.

Mēs izsauksim atkarīgo fragmentu, kura atrašanās vieta modulī ir stingri noteikta kā fiksēta. Piemēram, modulī no tastatūras ievadītās rakstzīmes atpazīšanas pirmajam ir jābūt faktiskās rakstzīmju ievades no apakšas atkarīgajam fragmentam. Moduļa “sākums” un “beigas” operatori ir fiksēti fragmenti.

Absolūti neatkarīgi fragmenti neeksistē kaut vai tāpēc, ka jebkurā modulī ir minētie fiksētie sākuma un beigu fragmenti. Tāpēc neatkarīgam fragmentam kopumā ir iespējama atrašanās vietas zona, ko ierobežo divi savstarpēji atkarīgi fragmenti. Tas ir, stingrāka neatkarīga fragmenta definīcija ir šāda: par neatkarīgu attiecībā uz diviem fiksētiem fragmentiem mēs sauksim fragmentu, kuru var novietot jebkurā fragmentu secībā, kuru augšā un apakšā ierobežo norādītie fiksētie fragmenti.




Tops