Ciklusi. Petlja s postuvjetom i petlja s preduvjetom U petlji s preduvjetom, tijelo petlje

Ciklus dok se poziva s preduvjetom, jer se uvjet provjerava prije svakog izvođenja tijela petlje. Koristi se ako je broj ponavljanja ciklusa unaprijed nepoznat.

Izvršavanje naredbe petlje dok počinje provjerom stanja. Ako je istinit, tada se izvode naredbe tijela petlje, zatim se ponovno provjerava uvjet, itd. Čim se u sljedećem koraku pokaže da je uvjet lažan, petlja će završiti. Ciklus dok možda se nikada neće izvršiti ako je uvjet lažan na samom početku.

U blok dijagramu ciklus dok je prikazan kao što je prikazano na sl. 5.3.

Riža. 5.3. Dijagram toka ciklusa dok

Unos naredbe petlje dok provodi se slično ulasku u ciklus za, nakon pritiska na tipku dok ploče Programiranje Na ekranu se pojavljuju elementi prikazani na slici 1. 5.4. U prvo polje unesite uvjet za izvođenje petlje, a u donje polje operatore tijela petlje. Ako postoji više od jedne izjave u tijelu petlje, tada morate koristiti gumb Dodaj liniju za dodavanje dodatnih iskaza u tijelo petlje.

Riža. 5.4. Umetanje izjave petlje dok

Tijelo petlje mora sadržavati barem jednu naredbu koja mijenja stanje petlje tako da petlja završava nakon određenog broja ponavljanja, inače će se petlja izvoditi beskrajno.

Primjer 5.4. Pronađite prvi negativni član niza

Dijagram toka algoritma za rješavanje primjera:

Primjer 5.5. Izračunajte vrijednosti funkcije kada se argument promijeni x od -1 do 3 u koracima od 0,5 i oblikujte vektor od tih vrijednosti g.

Ovaj zadatak je već razmatran, ali pomoću petlje Za, riješimo to s ciklusom Dok.

Opis i poziv funkcijskog programa:

Primjer 5.6. Naći broj i zbroj znamenki zadanog prirodnog broja Opis i poziv programske funkcije:


Ovaj program koristi dvije funkcije:

· mod – daje ostatak pri dijeljenju x na g.

· trunc– daje cijeli dio z, uklanjanjem frakcijskog dijela.

Primjer 5.7. Napišite program za izračunavanje zbroja članova beskonačnog niza do člana u nizu.

U ovom slučaju izračunajte trenutni član niza pomoću formule: - trenutni član serije, - prethodni član serije .

Iterativni je računski proces u kojem se njegova prethodna vrijednost koristi za određivanje sljedeće vrijednosti varijable. Pri korištenju iterativnih procesa primjenjuje se metoda uzastopnih aproksimacija. Ciklus je kontroliran zadanom greškom izračuna e. Ako je pri sljedećoj iteraciji pogreška ≥e, tada petlja nastavlja računati sljedeću približnu vrijednost rezultata, inače petlja izlazi.

Opis i poziv funkcijskog programa:



Ugniježđene petlje

Ako je tijelo petlje ciklička struktura, tada se takva petlja naziva ugniježđena ili složena. Algoritam sa strukturom ugniježđene petlje je algoritam koji sadrži petlju unutar koje se nalazi jedna ili više drugih petlji.

Najjednostavniji slučaj ugniježđenih petlji je dvostruka. U ovom slučaju, jedna petlja se nalazi unutar druge. Različite opcije za ugniježđene petlje:

Primjer 6.1. Izračunati .

Opis i poziv funkcijskog programa:

Rad ugniježđene petlje je sljedeći: prvo se postavlja prva vrijednost parametra vanjske petlje ja, tada se kontrola prenosi na unutarnju petlju i parametar unutarnje petlje j uzima sve vrijednosti redom. Kada je izvršenje unutarnje petlje dovršeno, postavlja se druga vrijednost parametra vanjske petlje i unutarnja petlja se ponovno potpuno izvršava. Proces se ponavlja sve dok parametar vanjske petlje ne prihvati sve vrijednosti.

Ciklički računalni proces (CCP) karakterizira ponavljanje istih izračuna nad određenim skupom podataka. Broj ponavljanja petlje kontrolira posebna varijabla tzv. brojač ili kontrolna varijabla ciklus. Na brojač se postavlja uvjet koji određuje koliko dugo petlja treba raditi.

Poziva se ponovljeni blok izračuna tijelo ciklus. U tijelu petlje mora se osigurati mijenjanje vrijednosti brojača tako da može završiti. Ako se tijelo petlje sastoji od više od jedne naredbe, ono zatvoren u operatorske zagrade početak ... kraj;. Poziva se jednokratno izvršavanje tijela petlje korak.

Dakle, za programiranje petlje dovoljno je definirati uvjet koji kontrolira broj njezinih ponavljanja i opisati operatore koji čine tijelo petlje. S ove točke gledišta, teoretski su moguće samo dvije vrste petlji: provjera uvjeta ili prethodi izvođenju tijela petlje ili se događa nakon njega. Oslikajmo te cikluse u obliku blok dijagrama s odgovarajućim opisima:

Petlja s preduvjetom: najprije se testira uvjet, zatim, ovisno o tome je li istinit ili lažan, ili se izvršava tijelo petlje ili se slijedi izjava koja slijedi nakon tijela petlje. Nakon što je tijelo petlje dovršeno, kontrola se ponovno prenosi radi provjere stanja. Naravno, pretpostavlja se da je u tijelu petlje osigurana neka promjena u varijablama uključenim u uvjet - inače petlje i program će se zamrznuti.

Petlja s postuvjetom: Prvo se izvršava tijelo petlje, zatim se kontrola prenosi na provjeru stanja. Ovisno o istinitosti ili lažnosti uvjeta, tijelo petlje se ponovno izvršava ili dolazi do prijelaza na naredbu koja slijedi nakon tijela petlje. Sve što je rečeno o mogućoj petlji za petlju s preduvjetom vrijedi i za petlju s postuvjetom.

Na temelju gornjih blok dijagrama, glavna razlika između dva ciklusa je očita: jamči se da će se petlja s postuvjetom izvršiti barem jednom, dok se petlja s preduvjetom ne smije izvršiti niti jednom, ako se uvjet odmah pokaže lažnim.

Obje vrste petlji implementirane su u Pascalu. Petlja s preduvjetom ima sljedeći opći oblik:

dok boolean_expression počinje

(izjave tijela petlje)

Rad ciklusa može se opisati riječima: " sve dok je Booleov izraz istinit, tijelo petlje se ponavlja".

Logički izraz je konstruiran prema pravilima proučavanim u 7. poglavlju. Tijelo petlje može se formirati bilo kojim Pascalovim operatorom. Ako postoji samo jedna izjava u tijelu petlje, ne morate pisati operatorske zagrade.

Opća oznaka za petlju s postuvjetom je sljedeća:

(izjave tijela petlje)

do boolean_expression;

Petlja s postuvjetom radi na sljedeći način: " tijelo petlje se ponavlja sve dok Booleov izraz ne dobije vrijednost true". Imajte na umu da, za razliku od while, Pascalova ponavljajuća petlja radi sve dok je uvjet lažno. Ova razlika je naglašena upotrebom ključne riječi untill("do Ne") umjesto while("do"). Također, kao izuzetak, tijelo ponavljajuće petlje, čak i ako se sastoji od nekoliko izjava, može Ne zatvoriti u operatorske zagrade.

Često su ciklusi međusobno zamjenjivi. Zamislimo, na primjer, da za svaku od vrijednosti varijable x=1,2,...,20 trebate izvršiti neki izračun (matematički, ovaj zakon promjene x može se napisati kao
ili
). Pokažimo opći oblik while i repeat petlji:

dok je x<=20 do begin

(operatori za izračun)

(operatori za izračun)

Kao što se može vidjeti iz popisa, kontrolnoj varijabli x u oba slučaja dodijeljena je početna vrijednost 1, obje petlje mijenjaju vrijednost x i, sukladno tome, uvjet petlje, s operatorom x:=x+1;, ali za ponavljanje petlje uvjet je "obrnut" ("sve dok x ne postane veći od 20"), a tijelo nije zatvoreno u operatorskim zagradama.

Često je poželjno koristiti jednu od petlji. Na primjer, obrada korisničkog unosa s tipkovnice praktičnija je uz korištenje ponavljanja (prvo korisnik mora pritisnuti tipku, zatim slijede provjere i obrada).

Kada algoritam treba izvršiti neku radnju nekoliko puta, koriste se petlje. U programiranju, petlja je opetovano ponavljanje određenih instrukcija. Petlje se sastoje od zaglavlja i tijela. Zaglavlje sadrži uvjete koji određuju rad petlje, a tijelo sadrži radnje koje se ponavljaju. U JAP Pascal Postoje tri vrste ciklusa:

petlja s parametrom;

petlja s preduvjetom;

petlja s postuvjetom.

Njihovi algoritmi izvršavanja su različiti, ali imaju i nešto zajedničko: nakon izvršenja tijela petlje, provjerava se uvjet i ovisno o tome petlja završava, ili se tijelo ponovno izvršava.

For - petlja s parametrom

Parametarska petlja, također poznata kao brojačka petlja, koristi se za poznati broj ponavljanja. Ima dva notna oblika:

  1. Za<счетчик>:=< начальное значение>Do<конечное значение>Čini<тело цикла>;
  2. Za<счетчик>:=<начальное значение>Do<конечное значение>Čini<тело цикла>;

Brojač je varijabla ordinalnog tipa. Početna i krajnja vrijednost moraju biti iste vrste kao i brojač. Tijelo se izvršava sve dok je uvjet istinit.

Gore prikazani obrasci za snimanje razlikuju se u riječima Do I Do. Ako koristite petlju s To, tada će se vrijednost brojača povećati za jedan sa svakim korakom, a ako s Downto, smanjit će se. Iz ovoga proizlazi da u prvoj opciji početna vrijednost ne bi trebala premašiti konačnu vrijednost, dok je u drugoj suprotno. U donjem programu, broj znakova koji odredi korisnik prikazat će znakove.

1
2
3
4
5
6
7
8
9
10

program za_primer;
koristi crt;
var i, x: cijeli broj;
početi
napisati('X=');
readln(x);
za i:= 1 do x do
napisati (#3, #6) ;
readkey;
kraj.

Ovdje tijelo petlje nije zatvoreno u Begin-End, budući da postoji samo jedna izjava. Ali ako ih ima više, tada su potrebne operatorske zagrade. Također je vrijedno napomenuti da brojač neće imati određenu vrijednost nakon izlaska iz petlje, ali ako petlja završi ranije od očekivanog, brojač će spremiti posljednju vrijednost koja mu je zapisana.

Dok – petlja s preduvjetom

Operater Dok– započinje opis ciklusa preduvjetom. Ova vrsta petlje je potrebna u onim algoritmima gdje je broj ponavljanja unaprijed nepoznat. Općenito to izgleda ovako:

Dok<выражение>Čini<тело цикла>;

Ako je izraz istinit, tada se tijelo izvršava, inače petlja završava. Stoga morate napisati kod tako da u nekoj iteraciji izraz postane lažan i da se petlja ne izvodi beskrajno.

Primjer programa napisanog pomoću while petlje:

U ovom kodu korišten je složeni Begin-End operator, budući da postoji nekoliko operatora u tijelu petlje.

Ponavljanje – petlja s postuvjetom

Glavna značajka petlje s postuvjetom (često se naziva DO petlja) je da se njezino tijelo izvršava barem jednom. To je zbog činjenice da je uvjet napisan na kraju i, prema tome, prvo će se izvršiti tijelo, a zatim će se provjeriti uvjet. Formalno, to izgleda ovako:

<тело цикла>

Do<условие>

Za razliku od dvije petlje o kojima smo ranije govorili, ova se prestaje izvršavati kada uvjet postane istinit, tj. da bi se iteracije nastavile, uvjet mora biti lažan. Pogledajmo rad petlje s postuvjetom na primjeru:

1
2
3
4
5
6
7
8
9
10
11
12

Operator petlje dok organizira izvođenje jedne naredbe (jednostavne ili složene) nepoznat broj puta.

Dok format petlje: dok (B)S;

Gdje B

S– tijelo ciklusa je operator (prost ili složen).

Prije svakog izvođenja tijela petlje analizira se vrijednost izraza B: ako je istinita, tada se tijelo petlje izvršava i kontrola se prenosi na ponovnu provjeru uvjeta B; ako je vrijednost B lažna, petlja završava i kontrola se prenosi na naredbu koja slijedi nakon naredbe S.

Ako je rezultat izraza B lažan na prvom testu, tada se tijelo petlje neće izvršiti niti jednom. Imajte na umu da ako se uvjet B ne promijeni tijekom petlje, tada je moguća situacija petlje, odnosno nemoguće je izaći iz petlje. Stoga unutar tijela moraju postojati izjave koje uzrokuju promjenu vrijednosti izraza B kako bi petlja mogla ispravno završiti.

Primjer:

n.

statička praznina Main()

Console.Write("N= ");

dok ja<= n) //dok je i manji ili jednak n

//prikaži i na ekranu, zatim ga povećaj za 1

Console.Write(" "+ i++);

Proizlaziti:

1 2 3 4 5 6 7 8 9 10

Petlja s postuvjetom

Operator petlje učiniti dok također organizira izvođenje jedne naredbe (jednostavne ili složene) nepoznat broj puta. Međutim, za razliku od while petlje, uvjet završetka petlje se provjerava nakon što se tijelo petlje izvrši.

do while format petlje: učiniti S dok (B);

Gdje U – izraz čija se istinitost provjerava (uvjet završetka ciklusa);

S– tijelo ciklusa je operator (jednostavan ili blok).

Prvo se izvršava operator S, a zatim se analizira vrijednost izraza B: ako je istinita, tada se kontrola prenosi na operator S, ako je lažna, petlja završava i kontrola se prenosi na operatora nakon uvjeta B. Budući da je uvjet B se provjerava nakon izvođenja tijela petlje, tada će se u svakom slučaju tijelo petlje izvršiti barem jednom.

U naredbi do while, kao iu naredbi while, moguća je situacija petlje ako uvjet B uvijek ostaje istinit.

Primjer:

Prikazuje cijele brojeve od 1 do n.

statička praznina Main()

Console.Write("N= "); int n=int.Parse(Console.ReadLine());

do Console.Write(" " + i++);

dok ja<= n); //пока i меньше или равно n

Petlja s parametrom

Petlja s parametrom ima sljedeću strukturu:

za (<инициализация>; <выражение>; <модификация>) <оператор>;

Inicijalizacija koristi se za deklariranje i/ili dodjeljivanje početnih vrijednosti vrijednostima koje se koriste u petlji kao parametri (brojači). U ovom dijelu možete napisati više izjava odvojenih zarezima. Opseg varijabli deklariranih u inicijalizacijskom dijelu petlje je petlja i ugniježđeni blokovi. Inicijalizacija se izvodi jednom na početku izvođenja petlje.

Izraz definira uvjet za izvođenje petlje: ako je njegov rezultat istinit, petlja se izvršava. Istinitost izraza provjerava se prije svakog izvođenja tijela petlje, pa se petlja s parametrom implementira kao petlja s preduvjetom. U bloku izraza možete napisati nekoliko logičkih izraza odvojenih zarezima, tada je zarez ekvivalentan logičkoj operaciji I (&&).

Izmjena se izvršava nakon svake iteracije petlje i obično služi za promjenu parametara petlje. U modifikacijskom dijelu možete napisati nekoliko izjava odvojenih zarezima.

Operater(jednostavna ili složena) predstavlja tijelo petlje.

Bilo koji dio operatera za(inicijalizacija, izraz, modifikacija, operator) može nedostajati, ali točka-zarez koji definira položaj preskočenog dijela mora biti ostavljen.

statička praznina Main()

Console.Write("N= ");

int n=int.Parse(Console.ReadLine());

za (int i=1; i<=n;) //блок модификации пустой

Console.Write(" " + i++);

Ugniježđene petlje

Petlje mogu biti jednostavne ili ugniježđene (višestruke, petlje unutar petlje). Ugniježđene petlje mogu biti bilo koje vrste: dok, dok, za. Svaka unutarnja petlja mora biti potpuno ugniježđena unutar svih vanjskih petlji. "Sjecišta" ciklusa nisu dopuštena.

Samo programiranje je prilično složeno. Za početak, sve radnje moraju biti ispisane korak po korak. Ali uz tu potrebu postoji i niz mogućnosti koje značajno olakšavaju postizanje zadatka koje programiranje mora izvršiti (Pascal, C, Assembler - bez obzira koji se jezik koristi). Jedan takav alat je stvaranje petlji.

Važnost petlji u programiranju

Što je ciklus? Zašto je to potrebno i koje prednosti ima programer kada ga koristi? Ciklus je važna strukturna komponenta programiranja, koja vam omogućuje automatiziranje izvršenja određenog niza radnji, pod uvjetom da se poštuju utvrđeni parametri. Dakle, najjednostavniji primjer kako petlja radi je dodavanje određenog broja na potenciju. Nema potrebe registrirati redove dok ih nema dovoljno, jer tehnologija sve može učiniti automatski uz njegovu pomoć. U praktičnoj primjeni, ciklusi vam također omogućuju uštedu vremena i rada, budući da pri korištenju ciklusa nema potrebe pisati programski kod svaki put i za sve radnje. Dovoljno je unijeti zamijenjene varijable i pokrenuti implementaciju. Ali kako je konstruiran dijagram ciklusa? Ili čak nekoliko? Postoji dosta mogućnosti za implementaciju ciklusa - ima dovoljno informacija za cijelu knjigu o programiranju, razmotrit ćemo "Pascal" ili "Assembler". Stoga, u čisto informativne svrhe, predlažemo analizu teorijske sheme rada dva najpopularnija u upotrebi:

  1. Petlja s postuvjetom.
  2. Petlja s preduvjetom.

Sve ostalo su u velikoj mjeri njihove varijacije i posebni slučajevi, te se stoga moraju razmatrati u određenim kontekstima i pri postizanju specifičnih ciljeva. Za sada pogledajmo one najpopularnije. Kako se ciklusi s preduvjetom i postuvjetom međusobno razlikuju? Ovako izgleda petlja s preduvjetom:

dok "uvjet" radi "programski kod"

Opća teorijska osnova ciklusa s postuvjetom

Ovo je oblik pisanja programskog koda kada se nakon tijela pojavljuje naredba petlje s postuvjetom izvršenja. Na prvi pogled može izgledati čudno: doista, zašto staviti uvjet izvršenja nakon programskog koda? Ali ovdje nema ništa čudno: osobitost ovog obrasca je da će se kod izvršiti bez obzira na to jesu li uvjeti izvršenja ispunjeni ili ne. Ali samo 1 put. Tada će ići provjere je li sve kako treba ili nije. A u nedostatku odgovarajućih uvjeta, tijelo petlje će biti zanemareno. Ovo je vrlo važna i korisna značajka koju ima petlja s postuvjetom. Kakav je to primjer dat i gdje se može vidjeti praktična primjena ovdje opisanog? Evo primjera petlje s postuvjetom:

"Programski kod"

do "Stanje"

Opće teorijske osnove ciklusa s preduvjetom

Ali najpopularnija opcija je ova. Njegova je posebnost da za izvršenje mora biti ispunjen uvjet; bez toga se kod nikada neće izvršiti. Obično je programski kod prilično velik, a njegovo aktiviranje negativno će utjecati na performanse računala. Stoga se koristi prilično lukav plan: većina dijelova koda smještena je u petlje ili čak zasebne klase, kojima se pristupa točno u pravim trenucima. Ostatak vremena ovaj kod postoji, ali ga računalo ne koristi. Ova shema omogućuje uštedu snage procesora za izvođenje samog programa ili drugih programa.

Praktična implementacija u različitim programskim jezicima

Nekoliko riječi o praktičnoj učinkovitosti ciklusa. Prije svega treba napomenuti da štedi vrijeme, kako korisniku tako i programeru. O drugom je već bilo riječi, zašto je to tako, pa treba reći nekoliko riječi o klijentu. Činjenica je da rastavljanje na odvojene dijelove omogućuje brže učitavanje i rad softvera, pa će stoga i sam korisnik rado koristiti takav softver. Štoviše, ovaj pristup, kada je kod pohranjen u petlji ili zasebnoj klasi (koje se često pozivaju iz tijela), omogućuje učinkovit rad. Osim toga, trebali biste zabilježiti brzinu snimanja u zasebne memorijske ćelije. Dakle, ako bi se sve moralo raditi ručno, tada biste morali proći kroz svaki i unijeti odgovarajući unos u njega. A ciklus vam omogućuje da smanjite potrebu da sve radite sami nekoliko puta ili čak desetke. I uklanja ljudski faktor koji može dovesti do provođenja sati u potrazi za problematičnim kodom.

Zaključak

Dakle, sumirajući sve što je napisano, možemo reći da vam petlja s postuvjetom ili preduvjetom omogućuje uštedu novca na najprikladniji način bez gubitka kvalitete. A kada piše složene programe, on je jedan od programerovih najboljih prijatelja, pomaže mu da kod bude lakši za izvođenje i lakši za čitanje. Stoga, kada pišete svoj kod, ne ustručavajte se koristiti petlju s postuvjetom ili preduvjetom - oni su posebno stvoreni kako bi olakšali proces stvaranja softvera, a to će biti rad protiv vas samih ako ne iskoristite ovu priliku.




Vrh