Programiranje procesov ciklične računalniške obdelave podatkov. Programiranje cikličnih računalniških procesov. Primer uporabe stavka for

V programiranju pogosto obstajajo naloge, ki zahtevajo ponavljajoče se izvajanje iste skupine programskih stavkov z različnimi vrednostmi njihovih operandov. Takšni procesi se imenujejo ciklično ali preprosto ciklov. Skupina ciklično ponavljajočih se stavkov tvori t.i telo zanke, ki je lahko predstavljen s preprostim ali sestavljenim izrazom. Poklicali bomo enkratno izvedbo telesa zanke ponovitev.

Pred telesom zanke v programu je vedno glava zanke, ki vsebuje oznako operater zanke in izraz, ki (neposredno ali posredno) definira število ponovitev. Upoštevajte, da je telo zanke operand operaterja zanke; zato glava in telo zanke tvorita nedeljivo strukturno enoto programa. V nadaljevanju z uporabo izraza " operater zanke", bomo mislili tako na glavo kot na telo zanke.

Za organiziranje ciklov v vseh programskih sistemih obstajajo specializirani operatorji zanke, katerega uporaba programerja razbremeni potrebe po “ročnem” programiranju ciklov. MathCAD podpira dve vrsti takih operaterjev - cikel s predestinacijo Za (imenovano tudi zanka s števcem) In zanka s predpogojem Medtem . Opis strukture teh operaterjev je podan v tabeli 5.

5.4.1 Operater Za

Ta operator je treba uporabiti v primerih, ko je število ponovitev vnaprej določeno, torej znano vnaprej.

Glava zanke tega operatorja (desni operand) vsebuje spremenljivko, imenovano parameter(ali števec) cikel, In seznam vrednosti ta parameter. Število elementov seznama določa tudi število ponovitev - med vsako ponovitvijo parameter zanke prejme naslednjo vrednost s seznama, navedenega v glavi.

Parameter zanke ima status notranje programske spremenljivke in ima vse njene lastnosti (opisane v razdelku 5.1.4). Praviloma se parameter zanke uporablja na desni strani izrazov, vključenih v telo zanke, čeprav formalno ni prepovedano uporabljati na levi strani izrazov (to je levo od lokalne definicije operator "f"). Ne smemo pozabiti, da če je bil parameter spremenjen v telesu zanke, bo njegova spremenjena vrednost veljavna le do konca trenutne iteracije, saj bo pred začetkom naslednje iteracije parameter še vedno prejel naslednjo vrednost iz seznam, določen v glavi zanke.

Formalno je dovoljeno, da se parameter zanke sploh ne uporablja v izrazih telesa zanke - v tem primeru seznam vrednosti parametrov ne igra nobene vloge - pomembna je le dolžina tega seznama, ki določa število (morda nesmiselnih) ponovitev.

Po zaključku zadnje ponovitve se izvede programski stavek, ki sledi stavku zanke. V tem primeru spremenljivka, uporabljena kot parameter končane zanke, ohrani vrednost, ki jo je imela v zadnjem dejansko dokončan ponovitev [*]. Upoštevajte, da ta vrednost ne sovpada vedno z zadnjo vrednostjo s seznama, podanega v glavi zanke, saj je "zgodnji" izhod iz zanke možen, ko se sproži operator Zlom vključeno v telo zanke.

Seznam vrednosti Parameter zanke je zapisan v glavi zanke za simbolom " Î «, ki označuje pripadnost nizu (tega simbola ni treba vnesti ročno – samodejno se prikaže ob vnosu operatorja Za ). MathCAD omogoča uporabo tri oblike vnosi na tem seznamu: neposredni prenos– elementi seznama so izrecno določeni ločeni z vejicami, parameter prejme vrednosti s seznama v vrstnem redu, kot so prikazani; v slogu razvrščene spremenljivke – elementi seznama tvorijo ustrezne aritmetične serije; niz– elementi seznama zaporedno prejemajo vrednosti elementov matrike v vrstnem redu njihovih indeksov (najprej stolpci od leve proti desni, nato vrstice od zgoraj navzdol).

Trije programi, prikazani na sliki 21, prikazujejo različne uporabe operaterja Za .

Program dejstvo(n) izračuna faktorijel števila n . Operator zanke v tem programu je del sestavljenega izraza, ki je nato operand pogojnega operatorja V nasprotnem primeru. Parameter zanke k pridobi vrednosti iz celih aritmetičnih nizov.

Program Ch(V,N,p) obdela vhodni vektor V , ki jo nadomesti z vrednostjo str tiste elemente, katerih indekse podajajo elementi drugega vhodnega vektorja n . V tem primeru seznam vrednosti parametrov zanke jaz definiran z nizom vektorskih elementov n . Upoštevajte, da oba programa izvajata nadzor vhodnih podatkov in blokirata izvajanje glavnega algoritma, če so dejanski argumenti programa nepravilno podani.

Program L(M,z) naveden v primeru V ), je opremljen s podrobnimi komentarji in ne zahteva pojasnila. Ta program ponazarja možnost uporabe več stavkov zanke, od katerih je eden vključen med stavke telo drugo. Uporaba ugnezdene zanke- tipična tehnika, ki se uporablja za obdelavo večdimenzionalnih nizov.

Slika 21 – Primeri programiranja cikla Za


Slika 22 prikazuje uporabo operatorjev Zlom in Nadaljuj v telesu zanke. Običajno so ti operatorji sami operandi pogojne izjave če oz V nasprotnem primeru .

Operater Zlom ("prekiniti") prekine izvajanje zanke in prenese nadzor na operaterja po prekinjenem operaterju zanke. Upoštevajte, da če operater Zlom zmoten ugnezdena zanka, se bo izvajanje zunanje zanke nadaljevalo.

Operater Nadaljuj ("nadaljuj") deluje drugače - on prekine samo trenutno ponovitev zanke in prenese nadzor na glavo te zanke, po kateri se zanka izvede nadaljuje od naslednje ponovitve (če seveda ni bila prekinjena ponovitev zadnja).

Operater Zlom dovoljeno za uporabo in zunaj telo cikla. V tem primeru je izvajanje celotnega podprograma prekinjeno in vrnjen je rezultat vrednotenja njegovega zadnjega dejansko izvedenega izraza.

Slika 22 – Primeri uporabe operatorjev Zlom in Nadaljuj

funkcija VsotaN(V) sešteje samo tiste vektorske elemente, ki vsebujejo skalarne numerične podatke, in preskoči preostale elemente. funkcija Obratno (V) tvori vektor, katerega elementi so inverzne vrednosti ustreznih elementov prvotnega vektorja. Poleg tega, če naslednji element vsebuje številko "0" ali ni skalar številskega tipa, cikel je prekinjen. Upoštevajte, da operater Zlom v zadnjem primeru ne prekine programa, ampak prenese nadzor na operaterja Vrnitev , takoj za operaterjem Za .

5.4.3 Operater Medtem

Za razliko od operaterja Za , glava izjave Medtem (v prevodu - " adijo") ne vsebuje izrecnih navedb števila ponovitev - vsebuje logično izražanje, katere vrednost se samodejno izračuna pred začetkom izvajanje vsake naslednje ponovitve[†]. Dokler je ta izraz resničen, se bo zanka še naprej ponavljala; takoj ko izraz po zaključku naslednje ponovitve postane napačen, se naslednja ponovitev zanke ne bo izvedla in programski stavek, ki sledi stavku, bo prejel nadzor Medtem .

Očitno je, da če je v glavo zanke postavljen enako napačen logični izraz, ta zanka ne bo dokončala nobene svoje ponovitve, in če je ta izraz enako resničen, bo zanka neskončna (slednja situacija se imenuje zankanje programi). Da bi se izognili takim situacijam, morajo operandi logičnega izraza vsebovati eno ali več spremenljivk, ki spreminjajo svoje vrednosti v telesu zanke tako da je zanka končna (za preprečitev zanke je mogoče uporabiti druga sredstva - na primer prisilitev operaterja, da zapusti zanko Zlom ).

Primeri uporabe operatorja Medtem so prikazani na sliki 23. Podane so tri možnosti za rešitev istega problema: vsak od programov F0 , F1 in F2 vrne indeks prvega elementa izvornega vektorjaV presega določeno vrednostz .

Prvi program (primer A ) doda eno v števec k v telesu zanke Medtem do naslednjega k element prvotnega vektorja ne bo presegel navedene vrednosti z . Po tem se zanka konča in program vrne zadnjo spremenjeno vrednost spremenljivke k , ki je rešitev problema. Upoštevajte, da za razliko od cikla Za , števec k tukaj ga je treba obdelati z ločenimi stavki: inicializirati (to pomeni, dodeliti mu začetno vrednost) pred operatorjem zanke in spremeniti njegovo vrednost v telesu zanke.

Preprosto je videti, da možnost A ) programa ima bistveno pomanjkljivost: ne preprečuje zanke programa v primeru, ko problem nima rešitve, to je, ko je parameter z presega vrednost največjega elementa vektorja V . V tem primeru se zanka v takšni situaciji res ne bo zgodila - vendar to ni zasluga našega programa, temveč sistema MathCAD, ki bo nadzoroval izhod vektorskega indeksa V zunaj dovoljenih vrednosti in bo ustvaril sporočilo o napaki.

Brez te pomanjkljivosti je možnost b ) programa, v katerem telo zanke vsebuje dodatno preverjanje veljavnosti naslednje vrednosti indeksa in prisilno prekine zanko z operatorjem Zlom v ustrezni situaciji z izdajo besedilnega sporočila.

Morda je najučinkovitejša rešitev te težave možnost V ), ki operaterja sploh ne uporablja Medtem . V tem programu spremenljivka k uporablja se samo za ohranjanje "čistosti sloga" - za izključitev obdelave parametra zanke jaz zunaj operaterja Za .

Slika 23 – Primeri programiranja cikla Medtem

Cilj dela:

Preučite ciklične operatorje za, medtem, do - medtem, naučite se sestavljati in programirati ciklične algoritme.

Kratke teoretične informacije

Operatorji zanke se uporabljajo, ko je treba določena dejanja (operatorje in operacije) večkrat ponoviti, in takšne dele algoritmov imenujemo zanke.

Operator zanke for

Osnovna oblika stavka for zanke je:

za (izraz_1; izraz_2; izraz_3)

operater;

Kje izraz_1– začetna vrednost parametra cikla;

izraz_2– preverjanje pogojev za nadaljevanje cikla;

izraz_3– sprememba parametra cikla (popravek);

operater– preprost ali sestavljen operator v jeziku C.

Shema delovanja operatorja je naslednja: samo enkrat se najprej izračuna izraz_1, nato se preveri izraz_2 in če je »true«, se izvede ciklični del programa, nato se popravi parameter itd. dokler izraz_2 ne dobi vrednosti »false«.

Na primer: za (k=1; k<5; k++)

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

Kot rezultat izvajanja tega operatorja se številke od 1 do 4 izpišejo v stolpec.

Kot parameter zanke lahko uporabite spremenljivko katerega koli osnovnega tipa.

Na primer:

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

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

Potrebno je skrbno nadzorovati strukturo zank for v programu, da ne pride do neskončne zanke (iz katere ni izhoda).

Na primer:

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

printf(“neskončna zanka\n”);

Izhodna zanka pred rokom na naslednje načine:

Z dodatnim pogojem;

Uporaba naslednjih operaterjev:

odmor;- izhod iz zanke, v kateri se nahaja break, nadzor se prenese na prvi izvedeni stavek po zanki;

izhod (int Kod);- zapustite program;

vrnitev;- izstop iz funkcije;

Uporaba operaterja brezpogojnega skoka Pojdi do<метка>;

Zgodaj zaključek trenutnega cikličnega koraka možno z uporabo dodatnega pogoja ali operatorja nadaljevati, ki prekine izvajanje koraka trenutne zanke, tj. preskoči stavke preostalega dela zanke in prenese nadzor na glavni stavek zanke, da prilagodi parameter in preveri pogoj.

Prepovedano je prenašati krmiljenje od zunaj v notranjost zanke.

Morda manjka kateri koli od izrazov zanke for v oklepajih, razen simbola ";". ni mogoče znižati.

Na primer:

za (; i<3; i++)

postavlja ("Pozdravljeni!");

Ciklični stavki while in do–while

Osnovna oblika cikličnega operatorja medtem:

Medtem ko (pogoj)

operater;

Kje operater

Zanka teče, dokler je pogoj ovrednoten kot resničen, tj. izraz v oklepaju vrne rezultat, ki ni enak nič. To je zanka s predpogojem - najprej se preveri pogoj, nato se izvede stavek. Zato se zanka while ne bo izvedla niti enkrat, če je začetni rezultat izračuna pogoja 0.

Osnovna oblika operatorja narediti - medtem ko:

operater;

medtem ko (pogoj);

Kje operater je preprost, sestavljen ali prazen stavek.

Operater nareditimedtem– operator zanke s postpogojem, tj. najprej se izvede stavek, nato pa se preveri resničnost pogoja. Ker se v zanki do–while pogoj preveri na koncu zanke, bo zanka izvedena vsaj enkrat.

V zankah, kot sta while in do–while, so dovoljeni enaki načini zgodnjega izhoda iz zanke in zgodnjega zaključka trenutnega koraka zanke kot v stavku for, vendar se v slednjem primeru, za razliko od zanke for, nadzor prenese za preverjanje stanja. Če želite preprečiti neskončno zanko znotraj zank while in do–while, morate poskrbeti za spreminjanje spremenljivk, vključenih v pogoj.

Na primer:

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

če (i%5!=0) nadaljuj;

printf(“%5d”,i);

Primeri neskončnih zank:

operater;

2) while(number_not_0) // Vedno velja!

operater;

operater;

medtem ko (število_ne_0); // Vedno res!

Med operatorji zanke mora obstajati izstopni pogoj.

Ugnezdene zanke

V primeru ugnezdenih zank je ena zanka znotraj druge, na primer:

za(i=nn;i

za(j=mn;j

operater;

Kje operater je preprost, sestavljen ali prazen stavek. Notranja zanka se bo izvedla za vsako vrednost parametra i, ki izpolnjuje pogoj zunanje zanke.

primer:

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

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

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

printf("\n");

Primer uporabe stavka for

Izračunaj. Program naj natisne vmesne in končne rezultate.

Besedilo programa je lahko videti tako

#vključi

#vključi

postavlja ("Vnesite N");

scanf(“%d”,&N);

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

( // prevzame in podvoji dodelitev

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

printf("\n ODGOVOR: s=%f, Pritisnite katero koli tipko...",s);

Možnosti za posamezne naloge

Napišite program za določitev tabele funkcijskih vrednosti pri v poljubnem območju [ a,b] spremembe argumentov X s poljubnimi koraki h. Vrednote a, b, h vnesen s tipkovnice. Tabela mora vsebovati naslednje stolpce: zaporedna številka, vrednost argumenta x, vrednost funkcije, sporočilo o naraščajoči ali padajoči funkciji, razlika dveh sosednjih funkcijskih vrednosti.

Določite največjo in najmanjšo vrednost funkcije.

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.

“Programiranje cikličnih računalniških procesov”

Cilj dela: obvladovanje metod za sestavljanje algoritmov za ciklične računske procese in organiziranje cikličnih programov kompleksne strukture.

Teoretični del

4.1.1. Ciklični algoritmi.

Cikel je zaporedje dejanj, ki jih je mogoče izvesti več kot enkrat.

Round-robin algoritem je algoritem, ki vsebuje eno ali več zank.

Obstajajo 3 vrste ciklov:

Zanka s predpogojem;

Zanka s postpogojem;

Zanka s števcem (štetna zanka).

Če je izvajanje zanke povezano z nekim logičnim pogojem, se uporabijo zanke s predpogojem ali popogojem.

Nasprotne zanke so razred, v katerem je treba izvedbo telesa zanke ponoviti vnaprej določeno število krat.

Blokovni diagrami cikličnih algoritmov izgledajo takole:

1. Zanka s števcem.

2. Zanka s predpogojem. 3. Zanka s postpogojem.

4.1.2 Operatorji zanke v programskem jeziku C++.

V C++ obstaja za vsako vrsto zanke ustrezen operator:

Zanka kot while (s predpogojem);

Zanka kot do...while (s postpogojem);

Zanka kot za (štetje).

1. Operator zanke, kot je medtem

Prijavnica:

medtem (pogoj) izjava;

kjer je: (pogoj) – logični izraz;

operator – operator ali telo zanke, ki se izvaja v zanki.

Če je telo zanke sestavljen stavek, mora biti v oklepajih operatorja (...):

medtem ko (pogoj)

skupina operaterjev

Shema, kako deluje takšna zanka: dokler je pogoj resničen, se telo zanke izvede in pogoj se ponovno preveri itd. Ko pogoj postane napačen, se zanka izklopi.

2. Operator zanke, kot je do...while

Prijavnica:

operater;

medtem ko (pogoj);

Shema, kako deluje takšna zanka: najprej se izvede operator, nato se preveri pogoj, če je pogoj resničen, se izvede operator in ponovno preveri pogoj itd. Ko pogoj postane napačen, se zanka izklopi.

Če je telo zanke sestavljen stavek, mora biti, tako kot za zanko s predpogojem, zaprt v oklepajih operaterja (...):



skupina operaterjev

medtem ko (pogoj);

3. Operator zanke kot for

Prijavnica:

operater;

A je začetni izraz, ki določa začetne vrednosti za parameter zanke in, če je potrebno, začetne vrednosti za druge parametre. Na primer:

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

B je pogojni izraz, ki preverja pogoj za nadaljevanje zanke. Na primer:

C je inkrementni izraz, ki podaja inkrement parametra zanke in, če je potrebno, druge parametre, nato pa so zapisani na seznamu. Na primer: x+=0,1, i++

4.1.3 Primer prevajanja algoritma in programa v C++ za ciklični računalniški proces.

Izračunajte vrednost izraza:

b– začetna vrednost, njena vrednost se vnese s tipkovnico in se ne spremeni;

a– spremembe obsega v korakih po 1;

l– rezultat, njegove vrednosti so prikazane na zaslonu.

Na podlagi specifikacije je spremenljivka a celo število, zato jo je mogoče uporabiti kot števec v štetni zanki.

Blokovni diagram algoritma za reševanje tega problema z uporabo cikla štetja je naslednji:

#vključi

#vključi

#vključi

printf("Vnesite b: ");

scanf("%f",&b);

printf("a y\n");

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

printf(“%3d”,a);

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

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

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

Blokovni diagram algoritma za reševanje tega problema z uporabo zanke s predpogojem je naslednji:

Besedilo programa C++, ki ustreza temu algoritmu, je naslednje:

#vključi

#vključi

#vključi

printf("Vnesite 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 ne obstaja\n”);

Blokovni diagram algoritma za reševanje tega problema z uporabo zanke s postpogojem je naslednji:

Besedilo programa C++, ki ustreza temu algoritmu, je naslednje:

#vključi

#vključi

#vključi

printf("Vnesite 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 ne obstaja\n”);

medtem ko (a<=10);

Praktični del

4.2.1 Zahteve za izvedbo dela:

Rešite nalogo iz laboratorijske vaje št. 3 za razpon vrednosti ene od spremenljivk. Spremenljivka, ki jo spreminjamo, njeno območje spreminjanja in korak so navedeni v tabeli 4. Izdelajte blokovne diagrame algoritmov in programov za dva tipa ciklov, podana v posamezni nalogi (tabela 4).

Formalizirajte izpis rezultatov tako, da so vrednosti parametra spremenljivke jasno poudarjene in da so za vsako specifično vrednost prikazane vrednosti rezultata (tri spremenljivke iz stolpca 2 tabele 3) v obliki mize.

Vrstni red dela.

1. Izvedite analizo naloge, oblikujte izjavo o problemu.

2. Izdelajte blokovne diagrame algoritmov.

3. Ustvarite program v C++. Zagotovite vnos začetnih podatkov s tipkovnice in izpis rezultatov na zaslon.

4. Preverite delovanje programa na različnih začetnih podatkih.

5. Analizirajte dobljene rezultate.

Možnosti za posamezne naloge.

Možnosti posameznih nalog so izbrane iz tabele 4 glede na številko študenta na seznamu skupin v učiteljevem dnevniku.

Tabela 4. Možnosti posameznih nalog

št. Spremenljiva spremenljivka Vrste ciklov
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 predpogojem, 2. Števno
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. S predpogojem, 2. S popogojem
5 ≤ e ≤ 35,Δ e = 2 1. Števen, 2. S postpogojem
-5 ≤ m ≤ 15,Δ m = 1 1. S predpogojem, 2. Števno
1 ≤ c ≤ 70,Δ c = 3 1. S predpogojem, 2. S popogojem
1,5 ≤ c ≤ 15,Δ c = 0,5 1. Števen, 2. S postpogojem
-8 ≤ b ≤ 28,Δ b = 2 1. S predpogojem, 2. Števno
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. S predpogojem, 2. S popogojem
-7 ≤ k ≤ 2,Δ k = 0,3 1. Števen, 2. S postpogojem
-1 ≤ m ≤ 21,Δ m = 1 1. S predpogojem, 2. Števno
-2 ≤ e ≤ 34,Δ e = 2 1. S predpogojem, 2. S popogojem
-11 ≤ c ≤ 23,Δ c = 2 1. Števen, 2. S postpogojem
-13 ≤ p ≤ 50,Δ p = 3 1. S predpogojem, 2. Števno
3,3 ≤ b ≤ 9,3,Δ b = 0,3 1. S predpogojem, 2. S popogojem
3,5 ≤ y ≤ 12,3,Δ y = 0,4 1. Števen, 2. S postpogojem
-7,5 ≤ a ≤ 5,7,Δ a = 0,6 1. S predpogojem, 2. Števno
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. S predpogojem, 2. S popogojem
0 ≤ h ≤ 10,Δ h=0,5 1. Števen, 2. S postpogojem
-15 ≤ b ≤ 15, Δ b =2 1. S predpogojem, 2. Števno
-7 ≤ l ≤ 3, Δ l = 0,5 1. S predpogojem, 2. S popogojem
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Števen, 2. S postpogojem
1 ≤ k ≤ 9, Δ k = 0,4 1. S predpogojem, 2. Števno
0 ≤ b ≤ 6,9,Δ b = 0,3 1. S predpogojem, 2. S popogojem
-3 ≤ v ≤ 9,Δ v = 0,6 1. Števen, 2. S postpogojem
-2 ≤ p ≤ 2,6,Δ p = 0,2 1. S predpogojem, 2. Števno

4.3 Testna vprašanja in praktične naloge:

1. Kako deluje stavek while?

2. Kako deluje stavek do ... while?

3. Kako deluje stavek for?

4. V programu podčrtaj stavke, ki tvorijo cikel.

5. Kakšna je razlika med stavkoma while in do ... while?

6. En operator zanke v programu zamenjajte z drugim.

Pri programiranju se pogosto srečujemo s težavami, ki vključujejo ponavljajoče se procese. Zato moramo poznati in znati uporabljati koncept, kot je " ciklični računalniški procesi».

Programer začetnik jih bo zlahka razumel na splošnem primeru. Poleg tega je pomembno razumeti, da v vseh programskih jezikih obstajajo načini za implementacijo zank.

Kaj je zanka v programiranju?

Cikel - v programiranju je ponavljajoče se ponavljanje istih dejanj ali izračunov, vendar glede na iste odvisnosti z različnimi vrednostmi spremenljivk.

S konceptom cikla se ne srečamo le pri programiranju. Na mnogih področjih našega življenja obstajajo cikli.

Na primer, kroženje vode v naravi je naravno kroženje v našem življenju.

Zdaj pa si poglejmo splošna pravila in koncepte, ki se uporabljajo v računalniških ciklih.

Faze cikličnega procesa

Na splošno je treba cikel izvajati v 4 fazah:
  • Faza 1 – priprava cikla (inicializacija).
    Nastavitev začetne vrednosti za parameter in spremenljivko zanke.
    Parameter zanke– ta vrednost, ki šteje število korakov cikla (število ponovitev cikla).
    Spremenljivka zanke je količina, ki spremeni svojo vrednost na vsaki stopnji cikla.
    Inicializacija– to je nastavitev začetnih vrednosti za parameter in spremenljivko zanke.
  • Faza 2 – telo cikla.
    To je ponavljajoče se ponavljanje dejanja v ciklu ali izračuni na podlagi istih matematičnih odvisnosti z različnimi vrednostmi spremenljivk.
  • Faza 3 – modifikacija (sprememba) cikla.
  • Faza 4 – upravljanje cikla.
    To je preverjanje pogojev za nadaljevanje ali začetek zanke.
V Pascalu obstajajo 3 operatorji zanke, ki lahko implementirajo katerega koli algoritemsko – ciklična struktura :
  1. Stavek zanke s parametrom
  2. Operator zanke s predpogojem
  3. Operator zanke s postpogojem
Podrobneje si jih bomo ogledali v naslednjem članku.

1. Metode za konstruiranje cikličnih računskih procesov v programih.

2. Vneseno v računalniknrealna števila. Napišite program, ki prikaže aritmetično sredino te množice.

Uvod

Ciklični programi se uporabljajo v skoraj vseh programih. V tem primeru so cikli lahko eksplicitni ali implicitni. Zlasti je implicitna zanka prisotna v obdelovalcih prekinitev, ki dejansko tečejo v neskončni zanki, katere telo sproži prekinitev. Podprogrami - okenske funkcije aplikacij Windows - so prav tako ciklični. V nadaljevanju obravnavamo programe z zanko, katerih telo vsebuje funkcionalne module.

Ciklični proces je računski proces, v katerem se izračuni izvajajo večkrat z uporabo istih formul za različne vrednosti argumenta.

Programi, ki izvajajo ciklični proces, imenujemo ciklični programi.

Organizacijo cikla lahko razdelimo na naslednje stopnje:

priprava (inicializacija) cikla (AND);

izvajanje izračunov zanke (telo zanke) (T);

sprememba parametrov (M);

preverjanje stanja konca cikla (U).

Vrstni red teh korakov, kot sta T in M, se lahko razlikuje. Glede na lokacijo preverjanja stanja konca cikla ločimo cikle z nižjim in zgornjim koncem. Pri zanki, ki se konča na dnu, se telo zanke izvede vsaj enkrat, ker se najprej izvedejo izračuni, nato pa se preveri pogoj za izhod iz zanke.


V primeru zanke, ki se konča na vrhu, telo zanke morda ne bo izvedeno niti enkrat, če je izhodni pogoj takoj izpolnjen.

Cikel imenujemo determinističen, če je število ponovitev telesa zanke znano ali določeno vnaprej. Cikel se imenuje iterativni, če je število ponovitev telesa zanke vnaprej neznano, vendar je odvisno od vrednosti parametrov (nekaterih spremenljivk), vključenih v izračune.

Telo zanke- To je večkrat ponovljen del programa.

Parameter zanke je spremenljivka, ki prevzame nove vrednosti vsakič, ko se zanka ponovi (zanke so lahko preproste ali kompleksne).

Splošni pogled na zanko n-krat

Na splošno je zanka n-krat zapisana takole:

nc število ponovitev

Storitveni besedi nts (začetek cikla) ​​in kts (konec cikla) ​​sta napisani strogo ena pod drugo in povezani z navpično črto. Desno od te vrstice je zapisano ponovljivo zaporedje ukazov (telo zanke).

Število ponovitev je poljubno celo število.

Pri izvajanju algoritma se zaporedje ukazov v telesu zanke ponovi določeno število krat. Pravila algoritemskega jezika omogočajo določitev poljubnega celega števila ponovitev. Lahko je nič ali celo negativen. Ti primeri se ne štejejo za napačne, telo zanke preprosto ne bo izvedeno niti enkrat in računalnik bo takoj nadaljeval z izvajanjem ukazov, zapisanih za cc

Splošni pogled na dosedanji cikel

Na splošno je cikel trenutno napisan takole:

še ni pogoja

| telo zanke (zaporedje ukazov)

Pri izvajanju cikla računalnik ponavlja naslednja dejanja:

a) preveri pogoj, zapisan za funkcijsko besedo while;

b) če pogoj ni izpolnjen, se izvajanje zanke konča in računalnik začne izvajati ukaze, zapisane za cc. Če je pogoj izpolnjen, potem računalnik izvede telo zanke, znova preveri pogoj itd.

Splošni pogled na cikel za

nc za i od i1 do i2

| telo zanke (zaporedje ukazov)

Tukaj je i ime vrednosti celoštevilskega tipa, i1, i2 sta poljubna cela števila ali izraza s celimi vrednostmi. Telo zanke se izvaja zaporedno za i = i1, i = i1 + 1, i1 + 2, … i = i2.

Pravila algoritemskega jezika dovoljujejo podajanje poljubnih celih števil i1, i2. zlasti i2 je lahko manjši od i1. ta primer se ne šteje za napako - preprosto telo zanke ne bo izvedeno niti enkrat in računalnik bo takoj nadaljeval z izvajanjem ukazov, zapisanih za cc.

Zanka n-krat in zanka medtem

Zanke so n-krat in doslej oblikovane na skoraj enak način v algoritemskem jeziku. To ni presenetljivo, saj oba ukaza definirata zanko - ponavljajoče se zaporedje ukazov. Storitveni besedi nts in kts označujeta, da se zanka izvaja, glava zanke pa podaja poseben mehanizem za njeno izvajanje.

Vendar imata ta dva cikla eno pomembno razliko. Ko računalnik začne izvajati zanko n-krat, ve, kolikokrat bo moral ponoviti telo zanke. Pri izvajanju zanke še ni tako: računalnik vsakič preveri stanje zanke in ne more vnaprej določiti, kdaj se bo izvajanje končalo. Zaenkrat lahko ugotovite število ponovitev cikla šele, ko je cikel zaključen.

Tako je jasno, v katerih primerih je treba uporabiti katero zanko. Če je število ponovitev znano do trenutka, ko se zanka začne, je priročno uporabiti zanko n-krat. Če števila ponovitev ni mogoče določiti vnaprej, je potreben cikel.

Na primer, samodejni krmilni program ima strukturo, prikazano na sl. 1. Moduli, vključeni v cikel(kot tudi moduli za obdelavo prekinitev), s po enim vhodom in enim izhodom, imajo tipično značilnost, da moduli vsebujejo statične spremenljivke, ki jim je dodeljena vrednost v trenutnem ciklu, analiza teh spremenljivk pa se izvede v naslednjem ciklu. . Tako omenjene spremenljivke označujejo stanje modula na koncu tekočega ali na začetku naslednjega programskega cikla. V nadaljevanju bomo obravnavali le takšne module cikličnih programov in jih na kratko označili kot MCP.


Slika 1. Tipična struktura krmilnega programa z neskončno zanko.

MCP imajo razgibano strukturo, katere kompleksnost je treba ocenjevati po posebnih kriterijih. V. V. Lipaev je predlagal priročno in objektivno merilo za kompleksnost programskih modulov, in sicer: število in skupno dolžino poti v kontrolnem grafu modula. Upoštevane so le pogojne in izbirne izjave. Vendar to merilo očitno ni dovolj za MCP s statičnim pomnilnikom, saj je pri analizi MCP potrebno zapomniti vrednosti vseh statičnih spremenljivk, nastavljenih v prejšnjem ciklu. Poleg tega ni nobenih priporočil za standardizacijo algoritmov in programov, razen za že dolgo znano strukturirano programiranje v pogosto uporabljenih programskih jezikih, kot sta C in Pascal. Ta članek predlaga zapolnitev teh vrzeli v zvezi z MCP.

2. Fragmenti cikličnih programskih modulov

Dvoterminalni fragment ali preprosto fragment bo obravnavan kot odsek programa z enim vhodom in enim izhodom (vključno z operaterji zanke) ob predpostavki, da so obravnavani MCP strukturirani. Najenostavnejši fragment vključuje eno samo izjavo. Tudi zaporedje fragmentov je fragment. MCP pa je fragment in je sestavljen iz zaporedja fragmentov.

Metoda neodvisnih fragmentov je predlagana za sintezo strukture modulov, ki implementirajo odločitvene tabele. V tem primeru se fragment, ki ga je mogoče vstaviti kamor koli v zaporedje fragmentov modula, šteje za neodvisnega. Neodvisnost lokacije takega fragmenta je posledica dejstva, da podatki, analizirani v njem, niso generirani v določenem zaporedju fragmentov, podatki, generirani v neodvisnem fragmentu, pa niso analizirani v tem zaporedju fragmentov. Zato se lahko neodvisni fragmenti izvajajo vzporedno (psevdo-vzporedno). Na sl. Slika 2 prikazuje možne izvedbene možnosti za modul z dvema neodvisnima fragmentoma. V možnostih "a" in "b" so fragmenti preurejeni brez izkrivljanja bistva programa; pri možnosti “c” so fragmenti implementirani vzporedno.


Slika 2. Možnosti za implementacijo modula z neodvisnimi fragmenti:

a) in b) - zaporedna izvedba,

c) - vzporedna izvedba: dvojna vodoravna črta označuje paralelizacijo programa, debela vodoravna črta označuje zaključek vzporednih procesov.

Odvisni fragment je tisti, katerega lokacija je odvisna od lokacije drugega(-ih) fragmenta(-ov) v modulu. Ločili bomo med zgoraj in spodaj odvisnimi fragmenti. Zgornji odvisni fragment se mora vedno nahajati pod nekim fragmentom, v katerem so oblikovane spremenljivke, uporabljene v tem (odvisnem) fragmentu. Fragment, odvisen od dna, mora biti vedno postavljen nad fragment, ki uporablja spremenljivke, ustvarjene v tem fragmentu. Dva odvisna fragmenta, od katerih je eden od zgoraj odvisen od drugega, drugi pa od spodaj odvisen od prvega, se imenujejo medsebojno odvisni fragmenti. Ni jih mogoče zamenjati in jih ni mogoče izvajati vzporedno. Na sl. Slika 3 prikazuje primer modula z medsebojno odvisnimi fragmenti. Med medsebojno odvisnimi fragmenti so lahko drugi, odvisni ali neodvisni od njih. Slika 3. Modul z odvisnimi fragmenti.

Imenovali bomo odvisni fragment, katerega lokacija v modulu je strogo določena kot fiksna. Na primer, v modulu za prepoznavanje znaka, vnesenega s tipkovnico, mora biti prvi del dejanskega vnosa znaka, ki je odvisen od dna. Operatorja »začetek« in »konec« modula sta fiksna fragmenta.

Absolutno neodvisni fragmenti ne obstajajo, že zato, ker v katerem koli modulu obstajajo omenjeni fiksni fragmenti začetka in konca. Zato ima neodvisen fragment na splošno možno območje lokacije, omejeno z dvema medsebojno odvisnima fragmentoma. To pomeni, da je strožja definicija neodvisnega fragmenta naslednja: neodvisen glede na dva fiksna fragmenta bomo imenovali fragment, ki ga lahko postavimo kamor koli v zaporedju fragmentov, ki ga zgoraj in spodaj omejujejo določeni fiksni fragmenti.




Vrh