Programovanie procesov cyklického výpočtového spracovania dát. Programovanie cyklických výpočtových procesov. Príklad použitia príkazu for

V programovaní sa často vyskytujú úlohy, ktoré vyžadujú opakované vykonávanie rovnakej skupiny programových príkazov s rôznymi hodnotami ich operandov. Takéto procesy sa nazývajú cyklický alebo jednoducho cyklov. Skupina cyklicky sa opakujúcich výrokov tvorí tzv telo slučky, ktorý môže byť reprezentovaný jednoduchým alebo zloženým výrazom. Jednorazové vykonanie tela slučky nazveme iteráciu.

Telu cyklu v programe vždy predchádza hlavička slučky, obsahujúci označenie operátor slučky a výraz definujúci (priamo alebo nepriamo) počet iterácií. Všimnite si, že telo slučky je operandom operátora slučky, preto hlavička a telo slučky tvoria nedeliteľnú štrukturálnu jednotku programu. V nasledujúcom texte sa používa výraz „ operátor slučky“, budeme mať na mysli hlavičku aj telo slučky.

Na organizovanie cyklov vo všetkých programovacích systémoch existujú špecializované slučkových operátorov, ktorého použitie zbavuje programátora nutnosti programovať cykly „ručne“. MathCAD podporuje dva typy takýchto operátorov - cyklus s predurčením Pre (tiež nazývaný slučka s počítadlom) A slučka s predpokladom Zatiaľ čo . Opis štruktúry týchto operátorov je uvedený v tabuľke 5.

5.4.1 Prevádzkovateľ Pre

Tento operátor by sa mal použiť v prípadoch, keď je počet iterácií vopred určený, to znamená vopred známy.

Hlavička slučky tohto operátora (pravý operand) obsahuje premennú tzv parameter(alebo počítadlo) cyklu, A zoznam hodnôt tento parameter. Počet prvkov zoznamu určuje aj počet iterácií - počas každej iterácie dostane parameter loop ďalšiu hodnotu zo zoznamu uvedeného v hlavičke.

Parameter slučky má status internej programovej premennej a má všetky jej vlastnosti (popísané v časti 5.1.4). Spravidla sa parameter cyklu používa na pravej strane výrazov zahrnutých v tele cyklu, hoci nie je formálne zakázané používať ho na ľavej strane výrazov (t. j. naľavo od lokálnej definície operátor "f"). Malo by sa pamätať na to, že ak bol parameter zmenený v tele cyklu, jeho zmenená hodnota bude platná len do konca aktuálnej iterácie, pretože pred začiatkom ďalšej iterácie bude parameter stále dostávať ďalšiu hodnotu z zoznam špecifikovaný v hlavičke slučky.

Formálne je povolené nepoužívať parameter cyklu vo výrazoch tela cyklu vôbec - v tomto prípade zoznam hodnôt parametrov nehrá žiadnu rolu - dôležitá je iba dĺžka tohto zoznamu, ktorá určuje počet (možno nezmyselných) iterácií.

Po dokončení poslednej iterácie sa vykoná príkaz programu nasledujúci po príkaze loop. V tomto prípade si premenná použitá ako parameter dokončeného cyklu zachováva hodnotu, ktorú mala v poslednej skutočne dokončenej iterácia[*]. Upozorňujeme, že táto hodnota sa nie vždy zhoduje s poslednou hodnotou zo zoznamu špecifikovanou v hlavičke slučky, pretože pri spustení operátora je možný „skorý“ odchod zo slučky. Prestávka zahrnuté v tele slučky.

Zoznam hodnôt Parameter slučky je zapísaný v hlavičke slučky za symbolom " Î “, označujúci členstvo v súprave (tento symbol nie je potrebné zadávať ručne – zobrazí sa automaticky pri zadávaní operátora Pre ). MathCAD umožňuje použitie tri formy položky v tomto zozname: priamy prevod– prvky zoznamu sú explicitne špecifikované oddelené čiarkami, parameter prijíma hodnoty zo zoznamu v poradí, v akom sa zobrazujú; v hodnotenom premenlivom štýle – prvky zoznamu tvoria zodpovedajúci aritmetický rad; pole– prvky zoznamu postupne prijímajú hodnoty prvkov poľa v poradí ich indexov (najprv stĺpce zľava doprava, potom riadky zhora nadol).

Tri programy zobrazené na obrázku 21 ilustrujú rôzne použitia operátora Pre .

Program fakt(n) vypočíta faktoriál čísla n . Operátor slučky v tomto programe je súčasťou zloženého výrazu, ktorý je zase operandom podmieneného operátora Inak. Parameter slučky k získava hodnoty z celočíselného aritmetického radu.

Program Ch(V,N,p) spracováva vstupný vektor V , pričom ju nahradíte hodnotou p tie prvky, ktorých indexy sú špecifikované prvkami druhého vstupného vektora N . V tomto príklade zoznam hodnôt parametrov slučky i definované množinou vektorových prvkov N . Všimnite si, že obidva tieto programy vykonávajú kontrolu vstupných údajov a blokujú spustenie hlavného algoritmu, ak sú skutočné argumenty programu zadané nesprávne.

Program L(M,z) uvedené v príklade V ), je doplnený podrobnými komentármi a nevyžaduje vysvetlenie. Tento program ilustruje možnosť použitia viacerých príkazov cyklu, z ktorých jeden je zahrnutý medzi príkazmi teloďalší. Použitie vnorené slučky- typická technika používaná na spracovanie viacrozmerných polí.

Obrázok 21 – Príklady programovania cyklu Pre


Obrázok 22 znázorňuje použitie operátorov Prestávka A ďalej v tele slučky. Zvyčajne sú tieto operátory samotné operandy podmienené príkazy Ak alebo Inak .

Operátor Prestávka ("prerušiť") preruší vykonanie slučky a prenesie riadenie na operátora, ktorý nasleduje operátora prerušeného okruhu. Všimnite si, že ak operátor Prestávka prerušené vnorená slučka, vykonávanie vonkajšej slučky bude pokračovať.

Operátor ďalej ("pokračovať") koná inak - on preruší iba aktuálnu iteráciu cyklu a prenesie riadenie do hlavičky tejto slučky, po ktorej sa slučka vykoná pokračuje z nasledujúcej iterácie (pokiaľ, samozrejme, prerušená iterácia nebola posledná).

Operátor Prestávka povolené používať a vonku telo cyklu. V tomto prípade sa vykonávanie celého podprogramu preruší a vráti sa výsledok vyhodnotenia jeho posledného skutočne vykonaného výrazu.

Obrázok 22 – Príklady použitia operátorov Prestávka A ďalej

Funkcia SumaN(V) spočíta iba tie vektorové prvky, ktoré obsahujú skalárne číselné údaje, a preskočí zvyšné prvky. Funkcia Inverzná (V) tvorí vektor, ktorého prvky sú inverzné hodnoty zodpovedajúcich prvkov pôvodného vektora. Navyše, ak nasledujúci prvok obsahuje číslo „0“ alebo nie je skalárom číselného typu, cyklus sa preruší. Všimnite si, že operátor Prestávka v poslednom príklade nepreruší program, ale odovzdá riadenie operátorovi Návrat , bezprostredne po operátorovi Pre .

5.4.3 Prevádzkovateľ Zatiaľ čo

Na rozdiel od operátora Pre , hlavička výpisu Zatiaľ čo (v preklade - " Zbohom") neobsahuje výslovné označenie počtu iterácií - obsahuje logický výraz, ktorej hodnota sa automaticky vypočíta pred začiatkom vykonanie každej ďalšej iterácie[†]. Pokiaľ je tento výraz pravdivý, cyklus bude pokračovať v iterácii; akonáhle sa výraz stane nepravdivým po dokončení ďalšej iterácie, ďalšia iterácia cyklu sa nevykoná a príkaz programu nasledujúci za príkazom získa kontrolu Zatiaľ čo .

Je zrejmé, že ak je do hlavičky cyklu umiestnený rovnako nepravdivý logický výraz, tento cyklus nedokončí žiadnu zo svojich iterácií, a ak je tento výraz rovnako pravdivý, cyklus bude nekonečný (posledná situácia sa nazýva slučkovanie programy). Aby sa predišlo takýmto situáciám, operandy logického výrazu musia obsahovať jednu alebo viac premenných, ktoré menia ich hodnoty v tele slučky aby bola slučka konečná (na zamedzenie slučkovania je možné použiť iné prostriedky – napríklad prinútenie operátora opustiť slučku Prestávka ).

Príklady použitia operátora Zatiaľ čo sú uvedené na obrázku 23. Sú uvedené tri možnosti riešenia rovnakého problému: každý z programov F0 , F1 A F2 vráti index prvého prvku zdrojového vektoraV presahujúce stanovenú hodnotuz .

Prvý program (napr A ) pridá jednu na počítadlo k v tele slučky Zatiaľ čo až do ďalšieho k tý prvok pôvodného vektora neprekročí zadanú hodnotu z . Potom sa cyklus ukončí a program vráti poslednú upravenú hodnotu premennej k , čo je riešením problému. Všimnite si, že na rozdiel od cyklu Pre , pult k tu je potrebné spracovať ho samostatnými príkazmi: inicializujte (čiže priraďte mu počiatočnú hodnotu) pred operátorom cyklu a zmeňte jeho hodnotu v tele cyklu.

Je ľahké vidieť túto možnosť A ) programu má významnú nevýhodu: nebráni tomu, aby sa program zacyklil v prípade, keď problém nemá riešenie, teda keď parameter z presahuje hodnotu najväčšieho prvku vektora V . V tomto príklade k zacykleniu v takejto situácii naozaj nedôjde – to však nie je zásluha nášho programu, ale systému MathCAD, ktorý bude riadiť výstup vektorového indexu V mimo povolených hodnôt a vygeneruje chybové hlásenie.

Táto možnosť je bez tejto nevýhody b ) programu, v ktorom telo cyklu obsahuje dodatočnú kontrolu platnosti ďalšej hodnoty indexu a násilne prerušuje cyklus s operátorom Prestávka v príslušnej situácii s vydaním textovej správy.

Možno najefektívnejším riešením tohto problému je možnosť V ), ktorý operátor vôbec nevyužíva Zatiaľ čo . V tomto programe premenná k používa sa len na zachovanie „čistoty štýlu“ - na vylúčenie spracovania parametra slučky i mimo operátora Pre .

Obrázok 23 – Príklady programovania cyklu Zatiaľ čo

Cieľ práce:

Preštudujte si cyklické operátory pre, while, do - while, naučte sa skladať a programovať cyklické algoritmy.

Stručné teoretické informácie

Operátory slučiek sa používajú, keď je potrebné niekoľkokrát opakovať určité akcie (operátory a operácie) a takéto časti algoritmov sa nazývajú slučky.

Operátor slučky for

Základná forma príkazu cyklu for je:

pre (výraz_1; výraz_2; výraz_3)

operátor;

Kde výraz_1– počiatočná hodnota parametra cyklu;

výraz_2– kontrola podmienok pre pokračovanie cyklu;

výraz_3– zmena parametra cyklu (korekcia);

operátor– jednoduchý alebo zložený operátor v jazyku C.

Operačná schéma operátora je nasledovná: iba raz sa najprv vypočíta výraz_1, potom sa skontroluje výraz_2 a ak je „pravda“, vykoná sa cyklická časť programu, potom sa opraví parameter atď. kým výraz_2 nenadobudne hodnotu „false“.

Napríklad: pre (k=1; k<5; k++)

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

V dôsledku vykonania tohto operátora sa čísla od 1 do 4 vytlačia v stĺpci.

Ako parameter cyklu môžete použiť premennú akéhokoľvek základného typu.

Napríklad:

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

printf(“ %c”,ch); // Latinská abeceda

Je potrebné starostlivo kontrolovať štruktúru cyklov for v programe, aby ste neskončili s nekonečnou slučkou (z ktorej niet výstupu).

Napríklad:

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

printf(“nekonečná slučka\n”);

Výstupná slučka pred plánovaným termínom nasledujúcimi spôsobmi:

Podľa dodatočnej podmienky;

Pomocou nasledujúcich operátorov:

prestávka;- výstup zo slučky, v ktorej sa nachádza break, riadenie sa prenesie na prvý vykonaný príkaz po slučke;

exit(int Kod);- ukončiť program;

návrat;- odchod z funkcie;

Použitie operátora bezpodmienečného skoku ísť do<метка>;

Skoré dokončenie aktuálneho cyklického kroku možné pomocou dodatočnej podmienky alebo operátora ďalej, ktorý preruší vykonávanie kroku aktuálnej slučky, t.j. preskočí príkazy zvyšku cyklu a prenesie riadenie do hlavného príkazu cyklu, aby upravil parameter a skontroloval podmienku.

Je zakázané prenášať riadenie zvonku do vnútra slučky.

Ktorýkoľvek z výrazov cyklu for v zátvorkách môže chýbať, ale symbol „;“. nie je možné znížiť.

Napríklad:

pre (; i<3; i++)

puts("Ahoj!");

Cyklické príkazy while a do-while

Základná forma cyklického operátora zatiaľ čo:

Kým (podmienka)

operátor;

Kde operátor

Cyklus prebieha dovtedy, kým sa podmienka vyhodnotí ako pravdivá, t.j. výraz v zátvorkách vráti nenulový výsledok. Ide o cyklus s predbežnou podmienkou – najprv sa skontroluje podmienka, potom sa vykoná príkaz. Preto sa cyklus while nevykoná ani raz, ak je počiatočný výsledok výpočtu podmienky 0.

Základná forma operátora robiť - kým:

operátor;

while(podmienka);

Kde operátor je jednoduchý, zložený alebo prázdny príkaz.

Operátor robiťzatiaľ čo– slučkový operátor s postpodmienkou, t.j. najprv sa vykoná príkaz a potom sa skontroluje pravdivosť podmienky. Keďže v slučke do–while sa podmienka kontroluje na konci cyklu, slučka sa vykoná aspoň raz.

V cykloch ako while a do–while sú povolené rovnaké metódy skorého ukončenia cyklu a skorého dokončenia aktuálneho kroku cyklu ako v príkaze for, ale v druhom prípade sa na rozdiel od cyklu for prenesie riadenie. na kontrolu stavu. Ak chcete zabrániť nekonečnej slučke v cykloch while a do-while, musíte zabezpečiť zmenu premenných zahrnutých v podmienke.

Napríklad:

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

if (i%5!=0) pokračovať;

printf("%5d",i);

Príklady nekonečných slučiek:

operátor;

2) while(number_not_0) // Vždy pravda!

operátor;

operátor;

while(číslo_nie_0); // Vždy pravda!

Medzi operátormi slučky musí existovať podmienka ukončenia.

Vnorené slučky

V prípade vnorených slučiek je jedna slučka vo vnútri druhej, napríklad:

pre (i=nn;i

for(j=mn;j

operátor;

Kde operátor je jednoduchý, zložený alebo prázdny príkaz. Vnútorná slučka sa vykoná pre každú hodnotu parametra i, ktorá spĺňa podmienku vonkajšej slučky.

Príklad:

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

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

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

printf(“\n”);

Príklad použitia príkazu for

Vypočítajte. Program by mal vytlačiť priebežné a konečné výsledky.

Text programu môže vyzerať takto

#include

#include

puts(“Zadajte N”);

scanf("%d",&N);

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

( // vziať a dvojité priradenie

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

printf("\n ODPOVEĎ: s=%f, Stlačte ľubovoľnú klávesu...",s);

Možnosti pre jednotlivé úlohy

Napíšte program na určenie tabuľky funkčných hodnôt pri v ľubovoľnom rozsahu [ a,b] zmeny argumentov X s ľubovoľnými krokmi h. hodnoty a, b, h zadané z klávesnice. Tabuľka musí obsahovať tieto stĺpce: poradové číslo, hodnota argumentu X, funkčná hodnota, správa o rastúcej alebo klesajúcej funkcii, rozdiel dvoch susedných funkčných hodnôt.

Určite maximálnu a minimálnu hodnotu funkcie.

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,4 p; b = 0,4 p; h = 0,5.

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

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

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

"Programovanie cyklických výpočtových procesov"

Cieľ práce: zvládnutie metód na zostavovanie algoritmov pre cyklické výpočtové procesy a organizovanie cyklických programov komplexnej štruktúry.

Teoretická časť

4.1.1. Cyklické algoritmy.

Cyklus je postupnosť akcií, ktoré možno vykonať viackrát.

Algoritmus round-robin je algoritmus, ktorý obsahuje jednu alebo viac slučiek.

Existujú 3 typy cyklov:

Slučka s predpokladom;

Slučka s dodatočnou podmienkou;

Slučka s počítadlom (počítacia slučka).

Ak je vykonanie cyklu spojené s nejakou logickou podmienkou, potom sa použijú slučky s predbežnou podmienkou alebo dodatočnou podmienkou.

Cykly počítadla sú triedou, v ktorej sa vykonávanie tela slučky musí opakovať vopred určený počet krát.

Blokové diagramy cyklických algoritmov vyzerajú takto:

1. Slučka s počítadlom.

2. Slučka s predpokladom. 3. Slučka s postcondition.

4.1.2 Slučkové operátory v programovacom jazyku C++.

V C++ existuje pre každý typ slučky zodpovedajúci operátor:

Slučka ako while (s predpokladom);

Loop like do...while (s postcondition);

Slučka ako pre (počítanie).

1.Operátor slučky ako while

Vstupný formulár:

while (podmienka) vyhlásenie;

kde: (podmienka) – logické vyjadrenie;

operátor – operátor alebo telo cyklu vykonávané v slučke.

Ak je telo cyklu zloženým príkazom, musí byť uzavreté v zátvorkách operátora (...):

kým (podmienka)

skupina operátorov

Schéma fungovania takéhoto cyklu: kým je podmienka pravdivá, telo cyklu sa vykoná a podmienka sa znova skontroluje atď. Keď sa podmienka stane nepravdivou, cyklus sa ukončí.

2. Operátor slučky ako do...zatiaľ

Vstupný formulár:

operátor;

while(podmienka);

Schéma fungovania takéhoto cyklu: najprv sa vykoná operátor, potom sa skontroluje podmienka, ak je podmienka pravdivá, vykoná sa operátor a znova sa skontroluje podmienka atď. Keď sa podmienka stane nepravdivou, cyklus sa ukončí.

Ak je telo cyklu zloženým príkazom, potom, ako v prípade cyklu s podmienkou, musí byť uzavreté v zátvorkách operátora (...):



skupina operátorov

while(podmienka);

3. Operátor slučky ako pre

Vstupný formulár:

operátor;

A je počiatočný výraz, ktorý určuje počiatočné hodnoty pre parameter slučky a v prípade potreby počiatočné hodnoty pre ostatné parametre. Napríklad:

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

B je podmienený výraz, ktorý kontroluje podmienku pre pokračovanie cyklu. Napríklad:

C je prírastkový výraz, ktorý určuje prírastok parametra slučky a v prípade potreby aj ďalšie parametre, potom sa zapíšu do zoznamu. Napríklad: x+=0,1, i++

4.1.3 Príklad zostavenia algoritmu a programu v C++ pre cyklický výpočtový proces.

Vypočítajte hodnotu výrazu:

b– počiatočná hodnota, jej hodnota sa zadáva z klávesnice a nemení sa;

a– zmeny rozsahu v krokoch po 1;

r– výsledok, jeho hodnoty sa zobrazia na obrazovke.

Na základe špecifikácie je premenná a celé číslo, takže ju možno použiť ako počítadlo v počítacej slučke.

Bloková schéma algoritmu na riešenie tohto problému pomocou počítacieho cyklu je nasledovná:

#include

#include

#include

printf("Zadajte b: ");

scanf("%f",&b);

printf(“a y\n”);

pre (a=0;a<=10;a++)

printf(“%3d”,a);

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

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

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

Bloková schéma algoritmu na riešenie tohto problému pomocou slučky s podmienkou je nasledovná:

Text C++ programu zodpovedajúceho tomuto algoritmu je nasledovný:

#include

#include

#include

printf("Zadajte 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 neexistuje\n”);

Bloková schéma algoritmu na riešenie tohto problému pomocou slučky s dodatočnou podmienkou je nasledovná:

Text C++ programu zodpovedajúceho tomuto algoritmu je nasledovný:

#include

#include

#include

printf("Zadajte 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 neexistuje\n”);

zatiaľ čo (a<=10);

Praktická časť

4.2.1 Požiadavky na vykonanie práce:

Dokončite úlohu z laboratórnej práce č. 3 pre rozsah hodnôt jednej z premenných. Menená premenná, jej rozsah zmeny a krok sú uvedené v tabuľke 4. Vytvorte blokové diagramy algoritmov a programov pre dva typy cyklov špecifikované v jednotlivej úlohe (tabuľka 4).

Výstup výsledkov formalizujte tak, aby boli hodnoty parametra premennej jasne zvýraznené a pre každú konkrétnu hodnotu sa hodnoty výsledku (tri premenné zo stĺpca 2 tabuľky 3) zobrazili vo formulári stola.

Poradie práce.

1. Vykonajte rozbor úlohy, sformulujte vyjadrenie problému.

2. Vytvorte blokové diagramy algoritmov.

3. Vytvorte program v C++. Poskytnite vstup počiatočných údajov z klávesnice a výstup výsledkov na obrazovku.

4. Skontrolujte funkčnosť programu na rôznych počiatočných údajoch.

5. Analyzujte získané výsledky.

Možnosti pre jednotlivé úlohy.

Možnosti pre jednotlivé úlohy sa vyberajú z tabuľky 4 podľa čísla študenta v zozname skupín v denníku učiteľa.

Tabuľka 4. Možnosti pre jednotlivé úlohy

Nie Premenlivá premenná Typy cyklov
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. S predpokladom, 2. Počítateľné
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
5 ≤ e ≤ 35,Δ e = 2 1. Počítateľné, 2. S post-stavom
-5 ≤ m ≤ 15,Δ m = 1 1. S predpokladom, 2. Počítateľné
1 ≤ c ≤ 70,Δ c = 3 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
1,5 ≤ c ≤ 15,Δ c = 0,5 1. Počítateľné, 2. S post-stavom
-8 ≤ b ≤ 28,Δ b = 2 1. S predpokladom, 2. Počítateľné
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
-7 ≤ k ≤ 2,Δ k = 0,3 1. Počítateľné, 2. S post-stavom
-1 ≤ m ≤ 21,Δ m = 1 1. S predpokladom, 2. Počítateľné
-2 ≤ e ≤ 34,Δ e = 2 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
-11 ≤ c ≤ 23,Δ c = 2 1. Počítateľné, 2. S post-stavom
-13 ≤ p ≤ 50,Δ p = 3 1. S predpokladom, 2. Počítateľné
3,3 ≤ b ≤ 9,3,Δ b = 0,3 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
3,5 ≤ y ≤ 12,3,Δ y = 0,4 1. Počítateľné, 2. S post-stavom
-7,5 ≤ a ≤ 5,7,Δ a = 0,6 1. S predpokladom, 2. Počítateľné
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
0 ≤ h ≤ 10,Δ h = 0,5 1. Počítateľné, 2. S post-stavom
-15 ≤ b ≤ 15, Δ b = 2 1. S predpokladom, 2. Počítateľné
-7 ≤ l ≤ 3, Δ l = 0,5 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Počítateľné, 2. S post-stavom
1 ≤ k ≤ 9, Δ k = 0,4 1. S predpokladom, 2. Počítateľné
0 ≤ b ≤ 6,9,Δ b = 0,3 1. S predbežnou podmienkou, 2. S dodatočnou podmienkou
-3 ≤ v ≤ 9,Δ v = 0,6 1. Počítateľné, 2. S post-stavom
-2 ≤ p ≤ 2,6,Δ p = 0,2 1. S predpokladom, 2. Počítateľné

4.3 Testové otázky a praktické úlohy:

1. Ako funguje príkaz while?

2. Ako funguje príkaz do ... while?

3. Ako funguje príkaz for?

4. Podčiarknite v programe výroky, ktoré tvoria cyklus.

5. Aký je rozdiel medzi výrokmi while a do ... while?

6. Nahraďte jeden operátor slučky v programe iným.

Pri programovaní sa často stretávame s problémami, ktoré zahŕňajú procesy, ktoré sa opakujú. Preto musíme poznať a vedieť používať taký koncept ako „ cyklické výpočtové procesy».

Pre začínajúceho programátora bude ľahké ich pochopiť pomocou zovšeobecneného príkladu. Okrem toho je dôležité pochopiť, že vo všetkých programovacích jazykoch existujú spôsoby implementácie slučiek.

Čo je slučka v programovaní?

Cyklus - v programovaní je opakované opakovanie rovnakých akcií alebo výpočtov, ale podľa rovnakých závislostí s rôznymi hodnotami premenných.

S pojmom cyklus sa stretávame nielen v programovaní. V mnohých oblastiach nášho života existujú cykly.

Napríklad kolobeh vody v prírode je prirodzený kolobeh v našom živote.

Teraz sa pozrime na všeobecné pravidlá a pojmy používané vo výpočtových cykloch.

Etapy cyklického procesu

Vo všeobecnosti by sa cyklus mal realizovať v 4 etapách:
  • 1. fáza – príprava cyklu (inicializácia).
    Nastavenie počiatočnej hodnoty pre parameter a premennú slučky.
    Parameter slučky– táto hodnota, ktorá počíta počet krokov cyklu (počet opakovaní cyklu).
    Premenná slučky je veličina, ktorá mení svoju hodnotu v každej fáze cyklu.
    Inicializácia– toto je nastavenie počiatočných hodnôt pre parameter a premennú slučky.
  • 2. fáza – telo cyklu.
    Ide o opakované opakovanie akcie v cykle alebo výpočtov založených na rovnakých matematických závislostiach s rôznymi hodnotami premenných.
  • 3. fáza – úprava (zmena) cyklu.
  • 4. fáza – riadenie cyklu.
    Toto je kontrola stavu pre pokračovanie alebo začiatok cyklu.
V pascal sú 3 slučkové operátory, ktoré môžu implementovať ľubovoľné algoritmicky – cyklická štruktúra :
  1. Operátor slučky s parametrom
  2. Slučkový operátor s predpokladom
  3. Operátor slučky s dodatočnou podmienkou
Podrobne sa na ne pozrieme v nasledujúcom článku.

1. Metódy konštrukcie cyklických výpočtových procesov v programoch.

2. Zadané do počítačaNreálne čísla. Napíšte program, ktorý zobrazí aritmetický priemer tejto množiny.

Úvod

Cyklické programy sa používajú takmer v akomkoľvek softvéri. V tomto prípade môžu byť cykly explicitné alebo implicitné. Implicitná slučka je prítomná najmä v obslužných programoch prerušenia, ktoré efektívne bežia v nekonečnej slučke, ktorej telo je spúšťané prerušením. Podprogramy - funkcie okien aplikácií Windows - sú tiež cyklické. Nižšie uvažujeme o programoch so slučkou, ktorých telo obsahuje funkčné moduly.

Cyklický proces je výpočtový proces, v ktorom sa výpočty vykonávajú opakovane pomocou rovnakých vzorcov pre rôzne hodnoty argumentu.

programy, implementujúce cyklický proces sa nazývajú cyklické programy.

Organizáciu cyklu možno rozdeliť do nasledujúcich etáp:

príprava (inicializácia) cyklu (AND);

vykonávanie výpočtov slučky (telo slučky) (T);

modifikácia parametrov (M);

kontrola stavu konca cyklu (U).

Poradie týchto krokov, ako je T a M, sa môže meniť. V závislosti od miesta kontroly stavu konca cyklu sa rozlišujú cykly s dolným a horným koncom. Pre slučku so spodným ukončením sa telo slučky vykoná aspoň raz, pretože najskôr sa vykonajú výpočty a potom sa skontroluje podmienka pre ukončenie slučky.


V prípade slučky s horným koncom sa telo slučky nemusí vykonať ani raz, ak je okamžite splnená podmienka ukončenia.

Cyklus sa nazýva deterministický, ak je počet opakovaní tela slučky známy alebo určený vopred. Cyklus sa nazýva iteračný, ak počet opakovaní tela slučky nie je vopred známy, ale závisí od hodnôt parametrov (niektorých premenných), ktoré sa podieľajú na výpočtoch.

Telo slučky- Toto je opakovane opakovaná časť programu.

Parameter slučky je premenná, ktorá nadobúda nové hodnoty vždy, keď sa slučka opakuje (slučky môžu byť jednoduché alebo zložité).

Celkový pohľad na slučku n-krát

Vo všeobecnosti sa slučka n-krát zapíše takto:

nc počet opakovaní

Služobné slovo nts (začiatok cyklu) a kts (koniec cyklu) sú napísané striktne pod sebou a spojené zvislou čiarou. Napravo od tohto riadku je napísaná opakovateľná sekvencia príkazov (telo slučky).

Počet opakovaní je ľubovoľné celé číslo.

Pri vykonávaní algoritmu sa sekvencia príkazov v tele cyklu opakuje stanovený počet krát. Pravidlá algoritmického jazyka umožňujú zadať ľubovoľný celočíselný počet opakovaní. Môže byť nula alebo dokonca záporná. Tieto prípady sa nepovažujú za chybné, telo cyklu sa jednoducho nevykoná ani raz a počítač okamžite začne vykonávať príkazy napísané po cc

Celkový pohľad na doterajší cyklus

Vo všeobecnosti je cyklus v súčasnosti napísaný takto:

zatiaľ bez podmienky

| telo slučky (sekvencia príkazov)

Pri vykonávaní cyklu počítač zopakuje nasledujúce akcie:

a) skontroluje podmienku zapísanú za funkčným slovom while;

b) ak podmienka nie je splnená, tak vykonávanie cyklu skončí a počítač začne vykonávať príkazy napísané po cc. Ak je podmienka splnená, potom počítač vykoná telo cyklu, znova skontroluje podmienku atď.

Celkový pohľad na cyklus pre

nc pre i od i1 do i2

| telo slučky (sekvencia príkazov)

Tu i je názov hodnoty typu celé číslo, i1, i2 sú ľubovoľné celé čísla alebo výrazy s celočíselnými hodnotami. Telo cyklu sa vykonáva postupne pre i = i1, i = i1 + 1, i1 + 2, …i = i2.

Pravidlá algoritmického jazyka umožňujú zadať ľubovoľné celé čísla i1, i2. konkrétne i2 môže byť menšie ako i1. tento prípad sa nepovažuje za chybu - jednoducho sa telo cyklu ani raz nevykoná a počítač okamžite pristúpi k vykonávaniu príkazov napísaných po cc.

Slučka n-krát a slučka while

Slučky n-krát a doteraz sú formátované takmer rovnakým spôsobom v algoritmickom jazyku. To nie je prekvapujúce, pretože oba tieto príkazy definujú slučku - opakujúcu sa sekvenciu príkazov. Servisné slová nts a kts označujú, že sa vykonáva slučka, a hlavička slučky špecifikuje špecifický mechanizmus na jej vykonávanie.

Tieto dva cykly však majú jeden podstatný rozdiel. Keď počítač začne vykonávať cyklus n-krát, vie, koľkokrát bude musieť opakovať telo cyklu. Pri vykonávaní cyklu to zatiaľ neplatí: počítač zakaždým kontroluje stav cyklu a nevie vopred určiť, kedy sa vykonávanie skončí. Zatiaľ môžete zistiť počet opakovaní cyklu až po dokončení cyklu.

Tým je jasné, v ktorých prípadoch by sa mala použiť ktorá slučka. Ak je počet opakovaní známy do začiatku cyklu, je vhodné použiť cyklus n-krát. Ak nie je možné vopred určiť počet opakovaní, je potrebný cyklus.

Napríklad automatický riadiaci program má štruktúru znázornenú na obr. 1. Moduly zahrnuté v cykle(ako aj moduly na obsluhu prerušení), každý s jedným vstupom a jedným výstupom, majú zvyčajne tú charakteristickú vlastnosť, že moduly obsahujú statické premenné, ktorým je priradená hodnota v aktuálnom cykle, a analýza týchto premenných sa vykonáva v nasledujúcom cykle. . Uvedené premenné teda charakterizujú stav modulu na konci aktuálneho alebo na začiatku nasledujúceho programového cyklu. Ďalej budeme uvažovať iba o takýchto moduloch cyklických programov a stručne ich označíme ako MCP.


Obr.1. Typická štruktúra riadiaceho programu s nekonečnou slučkou.

MCP majú rôznu štruktúru, ktorej zložitosť sa musí posudzovať podľa osobitných kritérií. V.V. Lipaev navrhol vhodné a objektívne kritérium zložitosti softvérových modulov, a to: počet a celkovú dĺžku ciest v riadiacom grafe modulu. Do úvahy sa berú iba podmienené a výberové vyhlásenia. Toto kritérium však zjavne nestačí pre MCP so statickou pamäťou, pretože pri analýze MCP je potrebné zapamätať si hodnoty všetkých statických premenných nastavených v predchádzajúcom cykle. Okrem toho neexistujú žiadne odporúčania pre štandardizáciu algoritmov a programov, s výnimkou dlho známeho štruktúrovaného programovania v bežne používaných programovacích jazykoch, ako sú C a Pascal. Tento článok navrhuje vyplniť tieto medzery vo vzťahu k MCP.

2. Fragmenty cyklických programových modulov

Dvojkoncový fragment alebo jednoducho fragment sa bude považovať za časť programu s jedným vstupom a jedným výstupom (vrátane operátorov slučky) za predpokladu, že uvažované MCP sú štruktúrované. Najjednoduchší fragment obsahuje jeden príkaz. Sekvencia fragmentov je tiež fragment. MCP je zase fragment a pozostáva zo sekvencie fragmentov.

Metóda nezávislých fragmentov je navrhnutá na syntetizovanie štruktúry modulov, ktoré implementujú rozhodovacie tabuľky. V tomto prípade sa fragment, ktorý môže byť vložený kdekoľvek v sekvencii modulových fragmentov, považuje za nezávislý. Nezávislosť umiestnenia takéhoto fragmentu je spôsobená skutočnosťou, že údaje v ňom analyzované nie sú generované v špecifikovanej sekvencii fragmentov a údaje generované v nezávislom fragmente nie sú analyzované v tejto sekvencii fragmentov. Preto môžu byť nezávislé fragmenty vykonávané paralelne (pseudoparalelne). Na obr. Obrázok 2 ukazuje možné možnosti implementácie pre modul s dvoma nezávislými fragmentmi. V možnostiach „a“ a „b“ sa fragmenty preusporiadajú bez toho, aby sa skreslila podstata programu; v možnosti „c“ sú fragmenty implementované paralelne.


Obr.2. Možnosti implementácie modulu s nezávislými fragmentmi:

a) a b) - postupná implementácia,

c) - paralelná realizácia: dvojitá vodorovná čiara označuje paralelizáciu programu, hrubá vodorovná čiara označuje ukončenie paralelných procesov.

Závislý fragment je taký, ktorého umiestnenie závisí od umiestnenia iného fragmentu (fragmentov) v module. Budeme rozlišovať medzi nad a pod závislými fragmentmi. Hore závislý fragment musí byť vždy umiestnený pod nejakým fragmentom, v ktorom sú vytvorené premenné použité v tomto (závislom) fragmente. Fragment závislý od dna by mal byť vždy umiestnený nad fragmentom, ktorý používa premenné vytvorené v tomto fragmente. Dva závislé fragmenty, z ktorých jeden je závislý zhora od druhého a druhý zdola závislý od prvého, sa budú nazývať vzájomne závislé fragmenty. Nie je možné ich zamieňať a nemožno ich implementovať paralelne. Na obr. Obrázok 3 zobrazuje príklad modulu so vzájomne závislými fragmentmi. Medzi vzájomne závislými fragmentmi môžu byť ďalšie, od nich závislé alebo nezávislé. Obr.3. Modul so závislými fragmentmi.

Budeme volať závislý fragment, ktorého umiestnenie v module je striktne definované ako pevné. Napríklad v module na rozpoznávanie znaku zadaného z klávesnice musí byť prvý zlomok skutočného zadávania znakov závislý od spodnej časti. Operátory „začiatok“ a „koniec“ modulu sú pevné fragmenty.

Absolútne nezávislé fragmenty neexistujú, už len preto, že v akomkoľvek module sú spomínané pevné fragmenty začiatku a konca. Preto má nezávislý fragment vo všeobecnosti možnú oblasť umiestnenia obmedzenú dvoma vzájomne závislými fragmentmi. To znamená, že prísnejšia definícia nezávislého fragmentu je nasledovná: nezávislým vzhľadom na dva fixné fragmenty budeme nazývať fragment, ktorý môže byť umiestnený kdekoľvek v sekvencii fragmentov ohraničených nad a pod uvedenými fixnými fragmentmi.




Hore