Ciklikus számítási adatfeldolgozási folyamatok programozása. Ciklikus számítási folyamatok programozása. Példa a for utasítás használatára

A programozás során gyakran vannak olyan feladatok, amelyek ugyanazon programutasításcsoport többszöri végrehajtását igénylik, operandusaik eltérő értékével. Az ilyen folyamatokat ún ciklikus vagy egyszerűen ciklusok. Ciklikusan ismétlődő állítások csoportja alkotja az ún huroktest, amely egyszerű vagy összetett kifejezésként is ábrázolható. A ciklustörzs egyetlen végrehajtása kerül meghívásra ismétlés.

A programban a ciklustörzset mindig megelőzi ciklus fejléce, amely tartalmazza a jelölést hurok operátorés egy kifejezés, amely megadja (közvetlenül vagy közvetve) az iterációk számát. Megjegyezzük, hogy a ciklus törzse a ciklus operátorának operandusa, ezért a fejléc és a ciklus törzse a program oszthatatlan szerkezeti egységét alkotja. A továbbiakban a kifejezést használva hurokutasítás", szem előtt tartjuk a hurok címét és törzsét is.

A ciklusok megszervezésére minden programozási rendszerben vannak speciális hurokutasítások, melynek használata megkíméli a programozót attól, hogy "kézi" ciklusokat kelljen programoznia. A MathCAD kétféle ilyen operátort támogat − ciklus predesztinációval Mert (más néven hurok számlálóval) És hurok előfeltétellel Míg . Ezen operátorok felépítését az 5. táblázat írja le.

5.4.1 Üzemeltető Mert

Ezt az operátort olyan esetekben kell használni, amikor az iterációk száma előre meghatározott, azaz előre ismert.

Ciklus fejléc ennek az operátornak (a jobb oldali operandusnak) egy nevezett változót tartalmaz paraméter(vagy számláló) ciklus, És értékek listája ezt a beállítást. A lista elemeinek száma határozza meg az iterációk számát - minden iteráció során a ciklusparaméter a következő értéket kapja a fejlécben megadott listából.

Ciklus paraméter belső programváltozó státusza van, és rendelkezik minden tulajdonságával (lásd az 5.1.4. bekezdésben). A ciklusparamétert általában a ciklustörzs részét képező kifejezések jobb oldalán használják, bár formálisan nem tilos a kifejezések bal oldalán (azaz a lokálistól balra) használni. "f" definíciós operátor). Emlékeztetni kell arra, hogy ha a paramétert megváltoztattuk a ciklustörzsben, akkor annak megváltozott értéke csak az aktuális iteráció végéig lesz érvényes, mivel a következő iteráció előtt a paraméter továbbra is a következő értéket kapja a listában megadott listából. hurokfejléc.

Formálisan megengedhető, hogy a ciklustest kifejezéseiben egyáltalán ne használjuk a ciklusparamétert - ebben az esetben a paraméterértékek listája nem játszik szerepet - csak ennek a listának a hossza számít, ami meghatározza az (esetleg értelmetlen) iterációk számát.

Az utolsó iteráció befejeztével a ciklusutasítást követő programutasítás végrehajtásra kerül. Ebben az esetben a befejezett ciklus paramétereként használt változó megtartja azt az értéket, amivel rendelkezett az utolsó ténylegesen befejezett iterációk[*]. Ne feledje, hogy ez az érték nem mindig esik egybe a ciklusfejlécben megadott lista utolsó értékével, mivel lehetőség van "korai" kilépésre a hurokból, amikor az operátor aktiválódik. Szünet szerepel a hurok törzsében.

Értéklista a ciklusparaméter a ciklusfejlécben a " szimbólum után van írva Î ", amely egy halmazhoz való tagságot jelzi (ezt a szimbólumot nem kell "manuálisan" megadni - automatikusan megjelenik az operátor megadásakor Mert ). A MathCAD lehetővé teszi a használatát három forma bejegyzések ezen a listán: közvetlen átvitel– a listaelemek kifejezetten vesszővel elválasztva vannak megadva, a paraméter abban a sorrendben kap értékeket a listából, ahogyan azok megjelennek; tartományos változó stílusában − a lista elemei alkotják a megfelelő számtani sorozatot; sor– a lista elemei egymás után kapják meg a tömbelemek értékeit indexeik sorrendjében (először - oszlopok balról jobbra, majd - sorok felülről lefelé).

A 21. ábrán látható három program az operátor különböző felhasználásait szemlélteti Mert .

Program Tény(n) kiszámítja egy szám faktoriálisát n . A ciklus operátor ebben a programban egy összetett kifejezés része, amely viszont a feltételes operátor operandusa másképp. Ciklus paraméter k értékeket kap egy egész számtani sorozatból.

Program Ch(V,N,p) feldolgozza a bemeneti vektort V , lecserélve az értékre p azok az elemek, amelyek indexét a második bemeneti vektor elemei adják N . Ebben a példában a hurokparaméter értéklistája én vektorelemek halmaza adja meg N . Vegye figyelembe, hogy mindkét program bemeneti adatok vezérlését hajtja végre, és blokkolja a fő algoritmus végrehajtását, ha az aktuális program argumentumok helytelenül vannak megadva.

Program L(M,z) , a példában megadott V ), részletes megjegyzések kísérik, és nem igényel magyarázatot. Ez a program több ciklusutasítás használatának lehetőségét szemlélteti, amelyek közül az egyik szerepel az utasításokban test egy másik. Használat beágyazott hurkok egy tipikus trükk, amelyet többdimenziós tömbök feldolgozására használnak.

21. ábra - Példák programozási ciklusokra Mert


A 22. ábra szemlélteti az operátorok használatát Szünet És Folytatni a hurok testében. Általában ezek az operátorok maguk is operandusok. feltételes állítások Ha vagy másképp .

Operátor Szünet ("elvetél") megszakítja a ciklus végrehajtását, és átadja a vezérlést a megszakított ciklus utasítást követő utasításra. Vegye figyelembe, hogy ha az operátor Szünet megszakított beágyazott hurok, a külső hurok végrehajtása folytatódik.

Operátor Folytatni ("folytatás") másként cselekszik - ez csak a ciklus aktuális iterációját szakítja megés átadja a vezérlést ennek a ciklusnak a fejlécéhez, majd a ciklus végrehajtását folytatja a következő iterációtól (kivéve persze, ha a megszakított iteráció volt az utolsó).

Operátor Szünet használata engedélyezett és kívül ciklustestek. Ebben az esetben a teljes szubrutin végrehajtása megszakad, és az utolsó ténylegesen végrehajtott szubrutin kiértékelésének eredménye kerül visszaadásra.

22. ábra - Példák operátorok használatára Szünet És Folytatni

Funkció SumN(V) A vektornak csak azokat az elemeit összegzi, amelyek numerikus típusú skaláris adatokat tartalmaznak, és figyelmen kívül hagyja a többi elemet. Funkció Inverz (V) generál egy vektort, amelynek elemei az eredeti vektor megfelelő elemei értékeinek reciprokjai. Ebben az esetben, ha a következő elem a „0” számot tartalmazza, vagy nem numerikus skalár, ciklus megszakad. Vegye figyelembe, hogy az operátor Szünet az utolsó példában nem szakítja meg a programot, hanem átadja a vezérlést az operátornak Visszatérés közvetlenül a kezelő után Mert .

5.4.3 Kezelő Míg

Ellentétben az operátorral Mert , nyilatkozat fejléce Míg (fordításban - " Viszlát") nem tartalmaz kifejezett jelzést az iterációk számáról - tartalmazza logikai kifejezés, amelynek értékét a rendszer automatikusan kiszámítja kezdete előtt minden egymást követő iteráció végrehajtása[†]. Amíg ez a kifejezés "igaz", a ciklus iterációi folytatódnak; amint a következő iteráció befejezése után a kifejezés "false" lesz, a ciklus következő iterációja nem kerül végrehajtásra, és a vezérlést az utasítást követő program utasítás kapja Míg .

Nyilvánvaló, hogy ha egy azonosan hamis logikai kifejezés kerül a hurok fejlécébe, akkor ez a ciklus nem hajtja végre egyik iterációját sem, és ha ez a kifejezés azonos igaz, akkor a ciklus végtelen lesz (ez utóbbi helyzet az ún. hurkolt programok). Az ilyen helyzetek elkerülése érdekében egy vagy több olyan változót, amelyek megváltoztatják az értéküket, bele kell foglalni egy logikai kifejezés operandusai közé. a huroktestben oly módon, hogy a hurok véges legyen (más eszközök is használhatók a hurkolódás megakadályozására - pl. a kezelő kényszerkilépése a hurokból Szünet ).

Példák az operátor használatára Míg A 23. ábra három lehetőséget kínál ugyanannak a problémának a megoldására: mindegyik program F0 , F1 És F2 az eredeti vektor elemei közül az első indexét adja visszaV meghaladja a megadott értéketz .

Az első program (pl A ) hozzáad egyet a számlálóhoz k a huroktestben Míg a következőig k Az eredeti vektor -edik eleme nem haladja meg a megadott értéket z . Ezt követően a ciklus véget ér, és a program visszaadja a változó utoljára módosított értékét k , ami a probléma megoldása. Vegye figyelembe, hogy a ciklussal ellentétben Mert , számláló k itt külön utasításokkal kell feldolgozni: inicializálni (vagyis kiinduló értéket rendelni hozzá) a ciklusutasítás előtt és megváltoztatni az értékét a ciklustörzsben.

Könnyen belátható ez a lehetőség A ). z meghaladja a vektor legnagyobb elemének értékét V . Ebben a példában a hurokolás ilyen helyzetben nem igazán fog megtörténni - de ez nem a mi programunk érdeme, hanem a vektorindex kimenetét vezérlő MathCAD rendszeré. V tartományon kívül esik, és hibaüzenetet generál.

Ettől a hiányosságtól mentes a lehetőség b ) egy olyan programnak, amelyben a ciklustörzs további ellenőrzést tartalmaz a következő indexérték érvényességére vonatkozóan, és erőszakosan megszakítja a ciklust az operátorral Szünet a megfelelő helyzetben egy szöveges üzenet kiadásával.

Talán a leghatékonyabb módja ennek a probléma megoldásának az V ), amely egyáltalán nem használja az operátort Míg . Ebben a programban a változó k csak a "stílustisztaság" fenntartására szolgál - a hurokparaméter feldolgozásának kizárására én az üzemeltetőn kívül Mert .

23. ábra - Példák programozási ciklusokra Míg

A munka célja:

A while, do - while ciklikus utasításainak tanulmányozásához tanulja meg ciklikus algoritmusok összeállítását és programozását.

Rövid elméleti információk

Ciklusoperátorokat akkor használunk, ha bizonyos műveleteket (operátorokat és műveleteket) többször meg kell ismételni, és az algoritmusok ilyen szakaszait ciklusoknak nevezzük.

ciklus utasításhoz

A for ciklus operátor alapformája az

for (kifejezés_1; kifejezés_2; kifejezés_3)

operátor;

Ahol kifejezés_1– a ciklusparaméter kezdeti értéke;

kifejezés_2– a ciklus folytatásának feltételének ellenőrzése;

kifejezés_3– ciklusparaméter módosítása (korrekció);

operátor egy egyszerű vagy összetett C operátor.

Az operátor működési sémája a következő: csak egyszer számítjuk ki a_1 kifejezést, akkor ellenőrizzük a_2 kifejezést, és ha „igaz”, akkor a program ciklikus része fut le, majd a paraméter korrigálásra kerül, és így tovább a_2 kifejezésig. a „false” értéket veszi fel.

Például: for (k=1; k<5; k++)

printf("\n %d", k);

Ennek az utasításnak a végrehajtása eredményeként az 1-től 4-ig terjedő számok egy oszlopba kerülnek kinyomtatásra.

Bármilyen alaptípusú változót használhat ciklusparaméterként.

Például:

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

printf(“%c”,ch); // latin ábécé

Gondosan ellenőrizni kell a for ciklusok szerkezetét a programban, hogy ne kerüljön végtelen ciklusba (amiből nincs kilépés).

Például:

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

printf("végtelen ciklus \n");

Lépjen ki a hurokból elején a következő módokon:

Kiegészítő feltétellel;

A következő állítások felhasználásával:

szünet;- kilépés abból a ciklusból, amelyben a törés található, a vezérlés átkerül a ciklus utáni első végrehajtott utasításra;

exit(intCode);- kilépés a programból;

Visszatérés;- kilépés a funkcióból;

A feltétel nélküli ugrás operátor használata menj<метка>;

Korai az aktuális ciklikus lépés vége további feltétel vagy kezelő segítségével lehetséges folytatni, amely megszakítja az aktuális huroklépés végrehajtását, azaz. kihagyja a ciklus többi részének utasításait, és átadja a vezérlést a ciklus head utasítására a paraméter javításához és a feltétel teszteléséhez.

Tilos a vezérlést kívülről a hurkon belülre átvinni.

A zárójelben lévő for ciklus bármely kifejezése hiányozhat, de a ";" karakter hiányzik. nem lehet leejteni.

Például:

for(;i<3; i++)

puts("Helló!");

A while és a do-whing utasítások hurkolása

A ciklikus operátor alapformája míg:

Míg (feltétel)

operátor;

Ahol operátor

A ciklus mindaddig végrehajtódik, amíg a feltétel „igaz”-ra értékelődik, azaz. a zárójeles kifejezés nem nulla eredményt ad vissza. Ez egy előfeltételes ciklus - először a feltétel ellenőrzése, majd az utasítás végrehajtása. Ezért a while ciklus még egyszer sem kerül végrehajtásra, ha a feltétel kiértékelésének kezdeti eredménye 0.

Alap operátorforma csinálni, miközben:

operátor;

míg (állapot);

Ahol operátor egy egyszerű, összetett vagy üres állítás.

Operátor csináldmíg egy hurokoperátor utófeltétellel, azaz. először az utasítás végrehajtásra kerül, majd a feltétel ellenőrzése az igazság szempontjából. Mivel a do-while ciklusban a feltétel a ciklus végén kerül ellenőrzésre, a ciklus legalább egyszer végrehajtásra kerül.

Az olyan ciklusokban, mint a while és a do–while, a ciklusból való korai kilépés és a ciklus aktuális lépésének korai befejezése ugyanazok a módszerek megengedettek, mint a for utasításban, de az utóbbi esetben a for ciklustól eltérően a vezérlés átkerült az állapot ellenőrzésére. A while és a do-while ciklusokon belüli végtelen ciklus elkerülése érdekében gondoskodnia kell a feltételben szereplő változók módosításáról.

Például:

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

if (i%5!=0) folytassa;

printf("%5d",i);

Példák végtelen hurokra:

operátor;

2) while(szám_nem_0) // Mindig igaz!

operátor;

operátor;

while(szám_nem_0); // Mindig igaz!

A ciklus utasításai között kell lennie egy kilépési feltételnek.

Beágyazott hurkok

Beágyazott hurkok esetén az egyik hurok egy másikban van, például:

for(i=nn;i

for(j=mn;j

operátor;

Ahol operátor egy egyszerű, összetett vagy üres állítás. A belső ciklus az i paraméter minden olyan értékére kerül végrehajtásra, amely kielégíti a külső hurok feltételét.

Példa:

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

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

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

printf("\n");

Példa a for utasítás használatára

Kiszámítja . A programnak ki kell nyomtatnia a közbenső és a végső eredményeket.

A program szövege így nézhet ki

#beleértve

#beleértve

puts("Enter N");

scanf("%d",&N);

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

( // vegye és kettős hozzárendelés

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

printf("\n VÁLASZ: s=%f, Nyomjon meg egy gombot...",s);

Az egyéni feladatok változatai

Írjon programot a függvényértékek táblázatának meghatározására nál nél tetszőleges tartományban [ a,b] argumentum megváltozik xönkényes lépéssel h. Értékek a, b, h billentyűzetről lépett be. A táblázatnak a következő oszlopokat kell tartalmaznia: sorozatszám, argumentumérték x, függvényérték, üzenet a függvény növelésére vagy csökkentésére, két szomszédos függvényérték különbségére.

Határozza meg a függvény maximális és minimális értékét.

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.

„Ciklikus számítási folyamatok programozása”

A munka célja: metódusok elsajátítása ciklikus számítási folyamatok algoritmusainak összeállításához és összetett szerkezetű ciklikus programok szervezéséhez.

Elméleti rész

4.1.1. Ciklikus algoritmusok.

A hurok olyan műveletek sorozata, amelyek többször is végrehajthatók.

A ciklikus algoritmus egy vagy több ciklust tartalmazó algoritmus.

3 típusú ciklus létezik:

Hurok előfeltétellel;

Hurok utófeltétellel;

Ciklus számlálóval (számláló ciklus).

Ha a ciklus végrehajtása valamilyen logikai feltételhez kapcsolódik, akkor elő- vagy utófeltételes ciklusokat használunk.

A számláló hurkok egy olyan osztályt képviselnek, amelyben a ciklustörzs végrehajtását előre meghatározott számú alkalommal meg kell ismételni.

A ciklikus algoritmusok blokkdiagramjai így néznek ki:

1. Hurok számlálóval.

2. Hurok előfeltétellel. 3. Hurok utófeltétellel.

4.1.2 Loop utasítások a C++ programozási nyelvben.

A C++-ban minden típusú ciklushoz van egy megfelelő operátor:

while ciklus (előfeltétellel);

do...while ciklus (utófeltétellel);

For ciklus (megszámlálható).

1. Loop operátor, mint a while

Rögzítési forma:

while (feltétel) állítás;

ahol: (feltétel) – logikai kifejezés;

utasítás - a ciklusban végrehajtott utasítás vagy törzs.

Ha a ciklus törzse összetett utasítás, akkor azt operátori zárójelek közé kell tenni (...):

míg (feltétel)

operátorcsoport

Egy ilyen ciklus működési sémája: amíg a feltétel igaz (igaz), a ciklus törzse végrehajtásra kerül, és a feltétel ismét ellenőrzésre kerül stb. Amikor a feltétel hamissá válik, a hurok véget ér.

2. Loop operátor, mint a do…while

Rögzítési forma:

operátor;

míg (állapot);

Egy ilyen ciklus működési sémája: először az operátort hajtjuk végre, majd a feltételt ellenőrizzük, ha a feltétel igaz, akkor az operátort végrehajtjuk és a feltételt újra ellenőrizzük stb. Amikor a feltétel hamissá válik, a hurok véget ér.

Ha a ciklustörzs összetett utasítás, akkor, mint egy előfeltételes hurkot, operátori zárójelek közé kell tenni (...):



operátorcsoport

míg (állapot);

3. hurok operátor, mint a for

Rögzítési forma:

operátor;

Az A egy kezdeti kifejezés, amely beállítja a hurokparaméter kezdeti értékeit, és ha szükséges, más paraméterek kezdeti értékeit. Például:

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

A B egy feltételes kifejezés, amely ellenőrzi a ciklus folytatásának feltételét. Például:

A C egy növekményes kifejezés, amely növeli a ciklusparamétert, és ha szükséges, más paramétereket is, majd ezek listába kerülnek. Például: x+=0,1, i++

4.1.3 Példa algoritmus és program fordítására C++ nyelven ciklikus számítási folyamathoz.

Számítsa ki egy kifejezés értékét:

b- a kezdeti érték, értéke a billentyűzetről kerül beírásra, és nem változik;

a– a tartomány változásai az 1. lépéssel;

y– eredmény, értékei megjelennek a képernyőn.

A hozzárendelési feltétel alapján az a változó egész szám, így a számláló ciklusban számlálóként használható.

A probléma számlálóciklussal történő megoldására szolgáló algoritmus blokkvázlata a következő:

#beleértve

#beleértve

#beleértve

printf("Írja be a b: ");

scanf("%f",&b);

printf("a y\n");

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

printf("%3d",a);

printf("%8.2f\n",y);

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

printf("%8.2f\n",y);

A probléma előfeltételes hurok segítségével történő megoldására szolgáló algoritmus blokkvázlata a következő:

Az algoritmusnak megfelelő C++ program szövege a következő:

#beleértve

#beleértve

#beleértve

printf("Írja be a 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 nem létezik\n");

A probléma utófeltételes hurok segítségével történő megoldására szolgáló algoritmus blokkvázlata a következő:

Az algoritmusnak megfelelő C++ program szövege a következő:

#beleértve

#beleértve

#beleértve

printf("Írja be a 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 nem létezik\n");

míg(a<=10);

Gyakorlati rész

4.2.1 A munkavégzéssel szemben támasztott követelmények:

Végezze el a 3. számú laboratóriumi munka feladatát az egyik változó értéktartományára vonatkozóan. A változó változót, változási tartományát és lépését a 4. táblázat tartalmazza. Készítsen algoritmusok és programok folyamatábráját az egyes feladatban megjelölt két ciklustípushoz (4. táblázat).

Az eredmények kimenetét úgy rendezze el, hogy a változó paraméter értékei egyértelműen megkülönböztethetők legyenek, és minden egyes értékéhez megjelenjenek az eredmény értékei (három változó a 3. táblázat 2. oszlopából). táblázat formájában.

A munka sorrendje.

1. Feladatelemzés elvégzése, problémafelvetés megfogalmazása.

2. Készítsen algoritmusok blokkdiagramját!

3. Írjon programot C++ nyelven. Adja meg a kezdeti adatokat a billentyűzetről, és adja meg az eredményeket a képernyőn.

4. Ellenőrizze a program teljesítményét különböző kezdeti adatokon.

5. Végezze el az eredmények elemzését.

Az egyéni feladatok változatai.

Az egyéni feladatok változatait a 4. táblázatból választjuk ki a tanári napló csoportlistájában szereplő tanulói számnak megfelelően.

4. táblázat Az egyes feladatok változatai

sz. p / p változtatható változó Hurok típusok
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. Feltétellel, 2. Megszámlálható
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. Előfeltétellel, 2. Utófeltétellel
5 ≤ e ≤ 35,Δ e = 2 1. Számolható, 2. Utófeltétellel
-5 ≤ m ≤ 15,Δ m = 1 1. Feltétellel, 2. Megszámlálható
1 ≤ c ≤ 70,Δ c=3 1. Előfeltétellel, 2. Utófeltétellel
1,5 ≤ c ≤ 15,Δ c = 0,5 1. Számolható, 2. Utófeltétellel
-8 ≤ b ≤ 28,Δ b = 2 1. Feltétellel, 2. Megszámlálható
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. Előfeltétellel, 2. Utófeltétellel
-7 ≤ k ≤ 2,Δ k = 0,3 1. Számolható, 2. Utófeltétellel
-1 ≤ m ≤ 21,Δ m = 1 1. Feltétellel, 2. Megszámlálható
-2 ≤ e ≤ 34,Δ e = 2 1. Előfeltétellel, 2. Utófeltétellel
-11 ≤ c ≤ 23,Δ c = 2 1. Számolható, 2. Utófeltétellel
-13 ≤ p ≤ 50,Δ p=3 1. Feltétellel, 2. Megszámlálható
3,3 ≤ b ≤ 9,3,Δ b = 0,3 1. Előfeltétellel, 2. Utófeltétellel
3,5 ≤ y ≤ 12,3,Δ y=0,4 1. Számolható, 2. Utófeltétellel
-7,5 ≤ a ≤ 5,7,Δ a = 0,6 1. Feltétellel, 2. Megszámlálható
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. Előfeltétellel, 2. Utófeltétellel
0 ≤ h ≤ 10,Δ h=0,5 1. Számolható, 2. Utófeltétellel
-15 ≤ b ≤ 15, Δ b=2 1. Feltétellel, 2. Megszámlálható
-7 ≤ l ≤ 3, Δ l = 0,5 1. Előfeltétellel, 2. Utófeltétellel
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Számolható, 2. Utófeltétellel
1 ≤ k ≤ 9, Δ k = 0,4 1. Feltétellel, 2. Megszámlálható
0 ≤ b ≤ 6,9,Δ b = 0,3 1. Előfeltétellel, 2. Utófeltétellel
-3 ≤ v ≤ 9,Δ v = 0,6 1. Számolható, 2. Utófeltétellel
-2 ≤ p ≤ 2,6,Δ p = 0,2 1. Feltétellel, 2. Megszámlálható

4.3 Ellenőrző kérdések és gyakorlati feladatok:

1. Hogyan működik a while utasítás?

2. Hogyan működik a do ... while utasítás?

3. Hogyan működik a for utasítás?

4. Húzd alá a ciklust alkotó állításokat a programban!

5. Mi a különbség a while és a do ... while állítások között?

6. Cserélje ki az egyik ciklusoperátort egy másikra a programban.

A programozás során gyakran találkozunk olyan feladatokkal, amelyekben ismétlődő folyamatok vannak. Ezért tudnunk kell és tudnunk kell használni egy olyan fogalmat, mint " ciklikus számítási folyamatok».

A kezdő programozó könnyen megértheti őket egy általánosított példa segítségével. Ezenkívül fontos megérteni, hogy minden programozási nyelvben vannak módok a ciklusok megvalósítására.

Mit jelent a ciklus a programozásban?

Ciklus - a programozásban ugyanazon műveletek vagy számítások ismételt megismétlésének nevezik, de ugyanazon függőségek szerint, különböző változóértékekkel.

A ciklus fogalmával nem csak a programozásban találkozunk. Életünk számos területén vannak ciklusok.

Például a víz körforgása a természetben természetes körforgás az életünkben.

És most vegyük figyelembe a számítási ciklusokban használt általános szabályokat és fogalmakat.

A ciklikus folyamat szakaszai

Általában a ciklust 4 szakaszban kell végrehajtani:
  • 1. szakasz - ciklus előkészítése (inicializálás).
    A paraméter és a hurokváltozó kezdeti értékének beállítása.
    Ciklus paraméter- ez az érték, amely a ciklus lépéseinek számát (a ciklus ismétlődéseinek számát) számolja.
    hurokváltozó olyan érték, amely a ciklus minden szakaszában megváltoztatja értékét.
    Inicializálás a kezdeti értékek hozzárendelése a paraméterhez és a hurokváltozóhoz.
  • 2. szakasz - a ciklus teste.
    Ez egy művelet többszöri megismétlése egy ciklusban vagy számítások ugyanazon matematikai függőségeken, különböző változóértékekkel.
  • 3. szakasz - a ciklus módosítása (módosítása).
  • 4. szakasz - ciklusmenedzsment.
    Ez egy teszt a ciklus folytatásának vagy kezdetének állapotáról.
A pascalban 3 ciklusutasítás van, amelyek bármelyiket megvalósíthatják algoritmikusan - ciklikus szerkezet :
  1. Cikkutasítás paraméterrel
  2. Cikkutasítás előfeltétellel
  3. Hurokutasítás utófeltétellel
A következő cikkben részletesen megvizsgáljuk őket.

1. Módszerek ciklikus számítási folyamatok felépítésére programokban.

2. Belépett a számítógépbeNvalós számok. Írjon programot, amely megjeleníti ennek a halmaznak a számtani középértékét!

Bevezetés

A hurokprogramokat szinte minden szoftverben használják. Ebben az esetben a ciklusok lehetnek explicitek és implicitek. Az implicit hurok különösen a megszakításkezelőkben van jelen, amelyek valójában egy végtelen hurokban futnak, amelynek törzsét a megszakítás váltja ki. Az alprogramok is ciklikusak – a Windows alkalmazások ablakfunkciói. Továbbá figyelembe veszik a ciklussal rendelkező programokat, amelyek törzse funkcionális modulokat tartalmaz.

Ciklikus folyamat egy számítási folyamat, amelyben a számításokat ismételten hajtják végre ugyanazokkal a képletekkel az argumentum különböző értékeihez.

Programok ciklikus folyamatot megvalósító programokat ciklikus programoknak nevezzük.

A ciklus megszervezése a következő szakaszokra osztható:

a ciklus előkészítése (inicializálása) (ÉS);

hurokszámítások végrehajtása (huroktest) (T);

paraméter módosítása (M);

a ciklus végének állapotának ellenőrzése (U).

Ezeknek a lépéseknek a sorrendje, pl. T és M, változhat. A teszt helyétől függően a hurokvégződési feltételek különbséget tesznek az alsó és felső végződésű hurkok között. Az alsó végű hurok esetében a ciklustörzs legalább egyszer végrehajtásra kerül, mivel először a számításokat hajtják végre, majd a ciklusból való kilépési feltételt ellenőrzik.


Felső végű hurok esetén előfordulhat, hogy a huroktörzs egyszer sem hajtható végre, ha a kilépési feltétel azonnal teljesül.

Egy hurkot determinisztikusnak nevezzük, ha a huroktest ismétlődéseinek száma ismert vagy előre meghatározott. A ciklust iteratívnak nevezzük, ha a ciklustörzs ismétlődéseinek száma nem ismert előre, de a számításba bevont paraméterek (egyes változók) értékétől függ.

Hurok test Ez a program sokszor ismétlődő része.

Ciklus paraméter egy olyan változó, amely új értékeket vesz fel minden alkalommal, amikor a ciklus ismétlődik (vannak egyszerű és összetett hurkok).

A ciklus általános nézete n-szer

Általában az n-szeres ciklust a következőképpen írjuk:

nc ismétlések száma

Az nts (ciklus eleje) és kts (ciklus vége) szolgálatszó szigorúan egymás alá van írva, és függőleges sáv köti össze őket. Ettől a sortól jobbra egy ismétlődő parancssorozat (huroktörzs) van írva.

Az ismétlések száma tetszőleges egész szám.

Az algoritmus végrehajtásakor a ciklustörzsben lévő parancsok sorozata megismétlődik a megadott számú alkalommal. Az algoritmikus nyelv szabályai lehetővé teszik az ismétlések tetszőleges számú egész számának megadását. Lehet nulla vagy akár negatív is. Ezeket az eseteket nem tekintjük hibásnak, csak a ciklus törzse egyszer sem kerül végrehajtásra, és a számítógép azonnal folytatja a kts után írt parancsok végrehajtását.

A ciklus általános képe

Általában a ciklus a következőképpen van írva:

nc bye feltétel

| huroktörzs (parancsok sorozata)

Egy ciklus végrehajtásakor a számítógép megismétli a következő lépéseket:

a) ellenőrzi a szolgálatszó után írt feltételt;

b) ha a feltétel nem teljesül, akkor a ciklus végrehajtása véget ér, és a számítógép elkezdi végrehajtani a kts után írt parancsokat. Ha a feltétel teljesül, akkor a számítógép végrehajtja a huroktörzset, újra ellenőrzi a feltételt, és így tovább.

A ciklus általános képe

nc for i i1-től i2-ig

| huroktörzs (parancsok sorozata)

Itt az i egy egész típusú érték neve, az i1, i2 tetszőleges egész számok vagy egész értékkel rendelkező kifejezések. A huroktestet szekvenciálisan hajtjuk végre i = i1, i = i1 + 1, i1 + 2, …i = i2 esetén.

Az algoritmikus nyelv szabályai lehetővé teszik bármilyen i1, i2 egész szám megadását. különösen i2 lehet kisebb, mint i1. ez az eset nem tekinthető hibásnak - csak a ciklus törzse egyszer sem kerül végrehajtásra, és a számítógép azonnal folytatja a kts után írt parancsok végrehajtását.

Hurok n-szer és ciklus közben

A ciklusok n-szer és eddig szinte ugyanúgy vannak elrendezve az algoritmikus nyelvben. Ez nem meglepő, mert mindkét parancs felállít egy ciklust - ismétlődő parancssorozatot. Az nts és kts szolgáltatásszavak azt jelzik, hogy egy ciklus végrehajtása folyamatban van, és a ciklusfejléc egy konkrét mechanizmust határoz meg a végrehajtásához.

Ennek a két ciklusnak azonban van egy jelentős különbsége. A ciklus n-szeri végrehajtásának megkezdésekor a számítógép tudja, hogy hányszor kell megismételnie a ciklus törzsét. A ciklus végrehajtásakor ez még nem így van: a számítógép minden alkalommal ellenőrzi a ciklus állapotát, és nem tudja előre meghatározni, hogy a végrehajtás mikor ér véget. A ciklus ismétléseinek számát csak a ciklus befejezéséig tudja megtudni.

Ez egyértelművé teszi, hogy mely esetekben melyik ciklust kell használni. Ha a ciklus kezdetéig ismert az ismétlések száma, célszerű a ciklust n-szer használni. Ha az ismétlések száma nem határozható meg előre, akkor messzemenően egy ciklusra van szükség.

Például az automatikus vezérlőprogram felépítése az ábrán látható. 1. A ciklusban szereplő modulok(valamint a megszakításkezelő modulok), egy-egy bemenettel és egy kimenettel, általában jellemző tulajdonsággal rendelkeznek: a modulok statikus változókat tartalmaznak, amelyek az aktuális ciklusban kapnak értéket, és ezek elemzése a következő ciklusban történik. Így az említett változók a modul állapotát jellemzik az aktuális folyamat végén vagy a következő programciklus elején. A jövőben csak a ciklikus programok ilyen moduljait fogjuk figyelembe venni, és röviden MCP-ként jelöljük.


1. ábra. A végtelen ciklusú vezérlőprogram tipikus felépítése.

Az MCP-k szerteágazó szerkezetűek, amelyek összetettségét speciális szempontok szerint kell értékelni. V. V. Lipaev egy kényelmes és objektív kritériumot javasolt a programmodulok összetettségére, nevezetesen: a modul vezérlőgrafikonján lévő útvonalak száma és teljes hossza. Ez csak a feltételes és szelektív állításokat veszi figyelembe. Ez a kritérium azonban nyilvánvalóan nem elegendő a statikus memóriával rendelkező MCP-hez, mivel az MCP elemzésekor emlékezni kell az előző ciklusban beállított összes statikus változó értékére. Ezenkívül nincsenek ajánlások az algoritmusok és programok szabványosítására, kivéve a régóta ismert strukturált programozást az általánosan használt programozási nyelvekben, mint például a C és a Pascal. Ez a cikk ezen hiányosságok pótlását javasolja az MCP-vel kapcsolatban.

2. Ciklikus programok moduljainak töredékei

Kétpólusú töredékként vagy egyszerűen töredékként egy bemenettel és egy kimenettel rendelkező programszakaszt fogunk figyelembe venni (beleértve a hurokoperátorokat is), feltéve, hogy a vizsgált MCP-k strukturáltak. A legegyszerűbb töredék egyetlen operátort tartalmaz. A töredékek sorozata is töredék. Az MCP viszont egy töredék, és töredékek sorozatából áll.

A döntési táblázatokat megvalósító modulok szerkezetének szintetizálására független töredékek módszerét javasoljuk. Ebben az esetben egy fragmentum akkor tekinthető függetlennek, ha bárhová beilleszthető a modultöredékek sorozatába. Egy ilyen töredék helyének függetlensége abból adódik, hogy a benne elemzett adatok nem a meghatározott töredéksorozatban képződnek, és a független töredékben keletkezett adatok nem ebben a töredéksorozatban kerülnek elemzésre. Ezért a független töredékek párhuzamosan (pszeudo-párhuzamosan) hajthatók végre. ábrán. A 2. ábra egy modul lehetséges megvalósításait mutatja két független töredékkel. Az "a" és "b" lehetőségnél a töredékek átrendeződnek anélkül, hogy a program lényegét torzítanák; a „c” változatban a töredékek párhuzamosan valósulnak meg.


2. ábra. Lehetőségek független töredékekkel rendelkező modul megvalósítására:

a) és b) - szekvenciális megvalósítás,

c) - párhuzamos megvalósítás: dupla vízszintes vonal jelzi a program párhuzamosítását, félkövér vízszintes vonal párhuzamos folyamatok befejezését.

Függő töredék az, amelynek elhelyezkedése a modulban lévő másik töredék(ek) helyétől függ. Különbséget teszünk a felső és az alsó függő töredékek között. Egy felső függő fragmentumnak mindig olyan fragmentum alatt kell elhelyezkednie, amelyben az ebben a (függő) fragmentumban használt változók keletkeznek. Mindig egy alulról függő töredéket kell elhelyezni azon töredék fölé, amely az ebben a töredékben generált változókat használja. Két függő töredéket, amelyek közül az egyik felső függ a másodiktól, a második pedig az elsőtől alulról, kölcsönösen függő fragmentumoknak nevezzük. Nem cserélhetők fel, és nem hajthatók végre párhuzamosan. ábrán. A 3. ábra egy példát mutat egy kölcsönösen függő töredékekkel rendelkező modulra. A kölcsönösen függő töredékek között lehetnek mások, tőlük függőek vagy függetlenek. 3. ábra. Modul függő töredékekkel.

A rögzített töredéket függő töredéknek fogjuk nevezni, amelynek helye a modulban szigorúan meghatározott. Például a billentyűzetről beírt karakter felismerésére szolgáló modulban az elsőnek a közvetlenül beírt karakter alsó részétől kell lennie. A modulok "start" és "vége" operátorai rögzített töredékek.

Abszolút független töredékek nem léteznek, már csak azért is, mert bármelyik modulban szerepel a kezdet és a vég rögzített töredéke. Ezért egy független fragmentumnak általában van egy lehetséges elhelyezkedési régiója, amelyet két egymástól függő fragmentum korlátoz. Vagyis a független töredék szigorúbb meghatározása a következő: független két fix töredék tekintetében az a töredék, amely bárhol elhelyezhető a jelzett rögzített töredékek által fent és alul határolt töredékek sorozatában.




Top