Vrsta varijabli za parametar for. §9 Instrukcija petlje s parametrom for

Petlje zauzimaju posebno mjesto u Turbo Pascalu. Počinju ih proučavati odmah nakon svladavanja vještina unosa i izlaza informacija na ekranu. Uostalom, većina problema se svodi na činjenicu da petlje s parametrom i drugim konstrukcijama pomažu u lakšem pisanju i funkcioniranju određenog bloka programa.

Vrste ciklusa

Postoje ukupno tri vrste:

  • s parametrom
  • uz preduvjet,
  • s postuvjetom.

Petlje s parametrom, inače se zovu For ... to ... do ili For ... downto .... učiniti, ponoviti određeni niz radnji mnogo puta. U principu, druge varijante se koriste za istu svrhu, samo je u for petlji broj koraka unaprijed poznat.

U druge dvije konstrukcije (While i Repeat), broj ponavljanja je inicijalno nepoznat. Stoga, kada proučavate zadatak, već je potrebno razumjeti koji će se ciklus koristiti.

Osnovne definicije o temi

Petlje s parametrima su ponovljene iteracije. Brojač je glavni indikator uz pomoć kojeg se izvodi određeni dizajn. Granice intervala pokazuju unutar kojih će se granica izvoditi određene iteracije. Usput, uopće nije potrebno da početna vrijednost bude jednaka 1. Korisnik samostalno postavlja obje granice intervala. Tijelo petlje je skup naredbi za koje je već određen broj ponavljanja.

Koncept "petlje s parametrima" znači da se u ovom dizajnu uvjet provjerava, nakon čega se izvodi niz ponavljanja. Brojač se povećava (ili smanjuje) i sve se ponavlja. Tijelo petlje će se izvršavati sve dok je uvjet istinit.

For ... to ... do: operativni algoritam, sintaksa

Kao što je već spomenuto, petlje s parametrom koriste se u zadacima koji određuju "interval" u kojem treba raditi. Dakle, ovo može biti niz brojeva, dana u tjednu, stihova pjesme itd.

Postoje 2 vrste dizajna: za povećanje brojača i za njegovo smanjenje. Prva konstrukcija bit će napisana na sljedeći način:

za originalna varijabla := granica 1 do granica 2čini

tijelo petlje;

Ovdje: ref. varijabla deklariran od strane korisnika na početku programa ili bloka; granica 1 i granica 2- početna i konačna vrijednost intervala; V tijelo ciklus propisan je niz radnji koje mora izvršiti program. Mora se upamtiti da ako tijelo petlje sadrži samo 1 naredbu, tada se operatorske zagrade begin...end mogu izostaviti. U ovoj verziji dizajna, pult, naime<исх.переменная>, povećavat će se u koracima od 1.

za originalna varijabla:= granica 1 do granica 2čini

tijelo petlje;

Ovdje je ref. varijabla će se smanjivati ​​u koracima od 1.

Dijagram rada petlje s parametrom For... to... do izgledat će ovako:

  • Postavlja se vrijednost gornje granice intervala, tj. granica 2.
  • Izvorna varijabla vrijednost parametra je dodijeljena granica 1.
  • Stanje se provjerava: izvorna varijabla ≤ granica 2.
  • Po primitku rezultata Pravi (Pravi) tijelo petlje se izvršava.
  • Brojač se povećava u koracima jednakim 1.
  • Koraci 3-5 se izvode točno dok uvjet nije istinit: izvorna varijabla > granica 2. Čim se to dogodi, petlja izlazi i kontrola se prenosi na naredbu koja slijedi ovu konstrukciju.

U For... downto... do, radni algoritam je sličan gornjem, uz iznimku nekih točaka:

  • U 3. stavku provjerava se uvjet: izvorna varijabla ≥ granica 2.
  • U 5. retku algoritma brojač se smanjuje za 1.
  • U 6. paragrafu, naredbe 3-5 će se izvršavati dok se ne zadovolji uvjet: originalna varijabla< граница 2.

Sve ostalo je isto u oba algoritma.

Blok dijagram ciklusa s parametrom

Ciklusi s parametrom imaju sljedeći blok dijagram (iako je već prikazan gore). Ovdje je također prikazana pojednostavljena organizacija dizajna.

Osnovni zahtjevi za ciklus s parametrom

Petlje s parametrima zahtijevaju određene vrste uvjeta.

  • Granice brojača i raspona (tj. izvorna varijabla, granica 1 i granica 2) moraju biti iste vrste podataka. Ako postoji samo kompatibilnost između početne i krajnje vrijednosti segmenta i izvorne varijable, tada se program može ponašati neispravno jer će se granice pretvoriti u tip podataka izvornog parametra.
  • Tip podataka kojem moraju pripadati vrijednosti parametra mora biti cijeli broj. Toplo se preporuča ne koristiti pravi tip.
  • Nije preporučljivo nasilno mijenjati vrijednost parametra originalne varijable u tijelu petlje. U suprotnom, korisnik će imati poteškoća u praćenju mogućih grešaka koje se mogu pojaviti.
  • Za razliku od drugih vrsta petlji, u For ... to ... do ili For ... downto ... do korak se ne može promijeniti prema parametru koji nije 1.

Turbo Pascal: kako izaći iz petlje

Često postoje problemi u kojima dolazi do petlji, tj. uvjet koji se provjerava je uvijek istinit. Procedura Break pomaže u izlasku iz petlji s preduvjetom, postuvjetom i parametrom. Odnosno, njihov rad se prekida prije roka.

Petlje s Pascal parametrima (čije programiranje pretpostavlja "vječnu" istinitost uvjeta) mogu se zaustaviti korištenjem Nastavi. Ovdje je rad organiziran na sljedeći način: trenutna iteracija završava svoje izvršenje prije rasporeda, kontrola se prenosi na sljedeću naredbu, ali bez izlaska iz petlje.

Exit procedura je neophodna kako bi se dovršio rad određenog bloka programski kod. Poziva se unutar procedure (funkcije) i istog trenutka se izvršavanje tog “komada” odmah zaustavlja. Ako je Exit u glavnom bloku programa, on prekida svoj rad.

Procedura Halt svodi princip rada na sljedeće: program se u potpunosti završava.

Primjeri zadataka s rješenjima

Bit će korisno da korisnik, nakon proučavanja teme "Petlje s parametrima u Pascalu", prvo prouči primjere, a zatim samostalno vježba pisanje koda. Jednostavni zadaci pomažu budućem programeru naučiti teoriju u praksi, a zatim je uspješno primijeniti. Na temu “Petlje s parametrom” mogu se pronaći jednostavni i složeni primjeri problema s rješenjima. Ovdje su 3 problema koji objašnjavaju algoritme i daju objašnjenja i komentare za svako rješenje.

Problem 1

Zadan je dvodimenzionalni niz prirodnih brojeva u rasponu , nasumično odabranih. Odredite broj svih dvoznamenkastih brojeva čiji je zbroj znamenki višekratnik broja 2.

Algoritam radnji:

  1. Napravite dvodimenzionalni niz.
  2. Provjerite svaki broj da vidite ispunjava li sljedeće uvjete:

a) ako je 9< Х < 100, то разделить его нацело на 10 посредством div;

b) odabrati drugu znamenku broja dijeljenjem putem mod;

c) zbrojite istaknute brojeve;

d) zadani iznos podijelite s 2 koristeći mod;

e) ako je rezultat 0, tada se brojač povećava za 1.

Problem 2

Dan jednodimenzionalni niz cjelobrojni elementi. Odredite broj pozitivnih brojeva.

Algoritam radnji:

  1. Stvorite niz cjelobrojnih elemenata stvorenih randomiziranjem.
  2. U petlju s parametrom umetnite IF koji će provjeriti usklađenost zadanog elementa s uvjetom: X>0.
  3. Ako je uvjet ispunjen, brojač se povećava za 1.
  4. Nakon ciklusa trebala bi se prikazati rezultirajuća vrijednost brojača.

Podaci navedeni u zagradama () su komentari. U retku 11 možete prikazati niz na zaslonu na dva načina: ostaviti razmak između brojeva ili dodijeliti određeni broj ćelija za svaki element (u u ovom slučaju ima ih 5).

U retku 12, varijabla brojača također se može povećati na dva načina: dodavanjem 1 prethodnoj vrijednosti ili korištenjem standardne funkcije Inc.

Problem 3

Zadana je kvadratna matrica. Odredite broj pozitivnih elemenata koji se nalaze na glavnoj dijagonali.

Objašnjenja:

U nizu brojeva glavna dijagonala proteže se od gornjeg lijevog kuta do donjeg desnog. Njegova je osobitost činjenica da se indeksi retka i stupca podudaraju. Stoga je dovoljno organizirati 1 petlju za kretanje kroz linije bez nabrajanja preostalih elemenata.

Algoritam radnji:

  1. Napravite kvadratnu matricu.
  2. Dodijelite vrijednost "0" varijabli odgovornoj za brojanje pozitivnih elemenata.
  3. Stvorite ciklus za stvaranje kvadratne matrice.
  4. Organizirajte petlju za provjeru uvjeta: ako je broj na glavnoj dijagonali >0, tada se brojač povećava za 1.
  5. Nakon završetka petlje, prikazati vrijednost varijable koja pohranjuje broj pozitivnih elemenata.

Sučeljavanje dva programska jezika: C i Turbo Pascal

U pravilu, programer koji poštuje sebe zna nekoliko jezika. Na primjer, to može biti C++, Turbo Pascal, Delphi, Java itd. Suprotstavljanje između njih dvoje jasno je izraženo još 80-ih. (C i turbo pascal). Krajem dvadesetog stoljeća, ista borba se promatrala između C++ i Jave.

U virtualnom prostoru, među tri tuceta programskih jezika, mogu se razlikovati tri najsjajnija para, čije je sučeljavanje zadivilo najveće umove kibernetičkog prostora: ALGOL-60 i Fortran, Pascal i C, Java i C++. Naravno, ovi osjećaji su subjektivni, ali u jednom ili drugom trenutku jedan od para bio je vođa. To je objašnjeno zahtjevima industrije i potrebom za jednim ili drugim softverski proizvod. U 70-ima Fortran je "vladao svijetom", 80-ih - Turbo Pascal, 90-ih - C++. Naravno, nitko od njih nije "umro". Umjesto toga, transformirali su se u napredne softverske proizvode.

Kada učite programske jezike, možete primijetiti da neke teme imaju sličnu sintaksu. Stoga su petlje parametara u C-u slične sličnim konstrukcijama u Pascalu, s iznimkom nekih točaka.

Zanimljivo je da su programeri Turbo Pascala (Stari svijet) koristili rezultate razvoja američkih znanstvenika, dok su u Novom svijetu aktivno primjenjivali rezultate istraživanja europskih stručnjaka. U Europi programeri više zagovaraju čistoću i kompaktnost programskih jezika, dok su američki umovi skloniji korištenju novonastalih trendova kodiranja.

U većini programa postoji potreba za ponavljanim izvršavanjem određene naredbe (ili bloka naredbi). Operatori petlje mogu se koristiti za organiziranje ove vrste konstrukcije. Programski jezik Pascal koristi sljedeće vrste operatora petlje: for, while, repeat (PascalABC.NET također koristi operator za petlju svaki).

Blok naredbi koji se mora ponavljati naziva se tijelom petlje.

za operator u Pascalu

Ako broj ponavljanja tijela ciklus je unaprijed poznat, onda se koristi naredba za petlju, koji se često naziva i operator petlje s parametrom.

Naredba for sastoji se od dva dijela: tijela petlje i zaglavlja, koje je namijenjeno opisivanju početne i konačne vrijednosti parametra petlje, kao i opcije za njegovu promjenu.

Ovisno o smjeru promjene parametra petlje (povećanje - do ili smanjenje - dolje do) u jeziku Pascal, operator petlje for može se napisati u jednom od dva oblika:

  • za parametar := početna_vrijednost do krajnja_vrijednost do
  • operater;
  • za parametar := start_value downto end_value do
  • operater;

Varijabla parametra petlje može biti bilo kojeg ordinalnog tipa. U ovom slučaju, početna i konačna vrijednost moraju biti tipa kompatibilnog s tipom varijable parametra.

Pogledajmo kako radi petlja for.

Prije izvođenja naredbe petlje izračunavaju se početna vrijednost dodijeljena varijabli parametra i konačna vrijednost. Zatim se ciklički izvode sljedeće operacije:

  1. Trenutna vrijednost parametra se uspoređuje s konačnom vrijednošću.
  2. Ako je parametar uvjeta con_value istinit, tada se tijelo petlje izvršava, u protivnom naredba for završava svoj rad i kontrola se prenosi na operatora koji slijedi nakon petlje.

Pažnja: u jeziku Pascal, parametar petlje se, bez obzira na povećanje ili smanjenje, svaki put mijenja za jedan.

Zadatak. Prikaži popis kvadrata cijelih brojeva od 10 do 1.

Riješenje. U navedenom problemu, parametar ciklusa se smanjuje.

(fragment programskog koda)

  • za i:= 10 downto 1 do
  • writeln(i:2, " ", i * i);

Pažnja: ako je potrebno koristiti više od jednog operatora u tijelu petlje, tada se koristi složeni operator (operatorske zagrade počinju i završavaju).

Primjer 2. Poznate su ocjene pristupnika na četiri ispita. Odredite broj bodova koje je osvojio.

Zadatak. Poznate su ocjene pristupnika na četiri ispita. Odredite broj bodova koje je osvojio.

Riješenje. Koristit ćemo operator petlje s parametrima u programu, jer je poznat broj ponavljanja izvedenih radnji (pristupnik je dobio točno četiri boda)

(fragment programskog koda)

  • s:= 0;
  • za i:= 1 do 4 učiniti
  • početi
  • readln(oznaka);
  • s:= s + oznaka;
  • writeln(s);

Naredba for petlje implementira algoritamsku strukturu petlja s parametrom(ili petlja s brojačem). Petlja for se koristi kada u programu, prije izvođenja instrukcija petlje, broj koraka u ovoj petlji postane poznat (ili je unaprijed određen). U blok dijagramu, naredba for predstavljena je na sljedeći način:

Sintaksa:

za ( inicijalizacija; stanje; izmjena) (Upute za tijelo petlje; )

Ako postoji jedna instrukcija u tijelu petlje, tada se ( ) može izostaviti. Varijabla parametra petlje (brojač) može biti bilo kojeg numeričkog tipa. Ovo čini C++ for petlju svestranom kao i while petlju. Odjeljak modifikacije najčešće koristi operaciju povećanja (ili smanjenja) postfiksa ili prefiksa, ali se može koristiti bilo koji izraz dodjele koji mijenja vrijednost parametra petlje. Ciklus funkcionira ovako:

  • Na početku se opisuje i inicijalizira varijabla brojača
  • Zatim provjerite uvjet: ima li izraz vrijednost pravi, ponovit će se
  • Nakon izvršavanja instrukcija tijela petlje, vrijednost brojača se mijenja

Bilješka: U C++-u pravilo je deklarirati varijablu brojača u glavi petlje. Ali to nije potrebno, pogotovo ako planirate inicijalizirati nekoliko varijabli u odjeljku za inicijalizaciju kao što je implementirano u programu 9.2. Međutim, korištenje deklaracije varijable brojača u zaglavlju petlje rezultira deklaracijom lokalne varijable koja se automatski uništava kada petlja završi. Stoga, osim ako je apsolutno neophodno, ne biste trebali definirati varijablu brojača izvan for petlje.
Dok je petlja for pokrenuta, ne preporučuje se mijenjanje operanda u izrazima zaglavlja petlje - to će dovesti do raznih grešaka! Ali vrijednosti varijabli (ili konstanti), uključujući promjenjive vrijednosti (brojač), mogu se koristiti. Pogledajmo klasičan primjer.

Program 9.1 Zadan je prirodni broj N. Ispiši sve djelitelje tog broja.

#uključi << "N = "; cin >> N; za (int i = 2; i< N / 2; i++) { if (N % i == 0) cout << i << " "; } return 0; } N = 16000 2 4 5 8 10 16 20 25 32 40 50 64 80 100 125 128 160 200 250 320 400 500 640 800 1000 1600 2000 3200 4000

Korištenje naredbe continue u for petlji

Kada koristite naredbu continue u for petlji, morate uzeti u obzir osobitosti rada ove petlje:

  • Izjave nakon nastavaka bit će preskočene
  • Zatim se brojač modificira
  • Prelazak na sljedeću iteraciju (u suprotnom, provjera uvjeta)

Pokažimo to na primjeru: int main() ( for (int i = 1; i< 20; i++) { if (i % 2 == 0) continue; cout << i << " "; } 1 3 5 7 9 11 13 15 17 19

Bilješka. Imajte na umu: iako se izlaz brojeva po uvjetu preskače, brojač se povećava. Ovaj primjer je samo u ilustrativne svrhe; to nije način programiranja petlje! Ovaj problem je bolje riješiti na sljedeći način:

Int main() ( for (int i = 1; i< 20; i += 2) cout << i << " ";

Nekoliko izraza u odjeljku za inicijalizaciju i modifikaciju

Kao što smo ranije napomenuli, glava izjave mora imati tri odjeljka. Izrazi u ovim odjeljcima se mogu izostaviti, ali ";" se ne može izostaviti. . Na kraju se može samo otići; . Naslov u obliku:

Za (;;) ( ... )

je zaglavlje "beskonačne" petlje. (Izlaz iz petlje mora biti programiran unutar tijela petlje.)
C++ podržava nekoliko izraza u odjeljcima za inicijalizaciju i modifikaciju glave naredbe for. U ovom slučaju uvjet za nastavak ciklusa mora biti jedan!
Na primjer. Izjava problema: Izračunajte faktorijel broja koji ne prelazi 20.
Program 9.2

#uključi korištenje imenskog prostora std; int main() (unsigned long long n; int i, k; cout<< "k = "; cin >>k; // 0<= k <= 20 for(n = 1, i = 1; i <= k; n *= i, ++i); cout << k << "! = " << n << endl; return 0; } k = 20 20! = 2432902008176640000

Bilješka: Imajte na umu da izlazni tok na liniji 12 nije dio tijela petlje! (Na kraju naslova - ;). Dakle, ova petlja ima praznu instrukciju u tijelu, a svi izrazi se procjenjuju u zaglavlju. Program 9.2 ispravno izračunava faktorijel broja od 0 do 20.

petlja for na temelju raspona

Da biste iterirali kroz elemente niza ili spremnika, morate izvršiti istu vrstu radnji i koristiti glomazan kod. Kako bi se pojednostavio rad sa spremnicima u C++-u, postoji poseban oblik for petlje - baziran na rasponu for (petlja na temelju raspona ili raspon za).
Sintaksa:

za ( Obavijest : naziv_sekvence) naredba_petlje

Korištenje na temelju raspona za korištenje C niza kao primjer:
Program 9.3

#uključi korištenje imenskog prostora std; int main() ( int x ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); za (auto & s: x) ( cout<< s << " "; } return 0; }

Da bi se elementi niza mogli promijeniti, varijabla s mora biti referentna varijabla (kao u gornjem primjeru). Ako varijabla nije referenca, podaci će se kopirati. Za automatsko zaključivanje tipa, ova petlja koristi auto specifikator. range-based for ima ograničenje pri radu s dinamičkim nizovima: ne podržava promjenu veličine niza budući da sadrži fiksni pokazivač na kraj niza. Kada radite s nizovima koji imaju fiksnu veličinu, raspon za izvrsna je i sigurna alternativa uobičajenom za .

Ugniježđene for petlje

Kao i druge izjave petlje, for podržava ugniježđenu strukturu petlje. Korištenje ugniježđenih for petlji za organiziranje ulaza i izlaza dvodimenzionalnih nizova mnogo je kompaktnije od korištenja while petlje.
Međutim, pri rješavanju problema obilaženja takvih nizova potrebno je izbjegavati korištenje uvjetne if naredbe. Često se zadatak može racionalnije implementirati manipuliranjem indeksima (varijablama petlje i i j). Odnosno, učiniti promjenu jednog indeksa ovisnom o vrijednosti drugog. Pogledajmo dva primjera.
Program 9.4 Dana je kvadratna matrica veličine n čiji su elementi jednaki 0. Elemente koji leže ispod i na glavnoj dijagonali ispunite jedinicama.

#uključi korištenje imenskog prostora std; int main() ( int n; cout<< "n = "; cin >>n; int mas[n][n]; // Ispuni nulama for(int i = 0; i< n; i++) for(int j = 0; j < n; j++) mas[i][j] = 0; // Реализация for(int i = 0; i < n; i++) for(int j = 0; j <= i; j++) mas[i][j] = 1; // Вывод for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout.width(2); cout << mas[i][j]; } cout << "\n"; } return 0; } n = 10 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

Program 9.5 Napišite program za popunjavanje niza brojevima iz Pascalovog trokuta i ispis tog niza. Pascalov trokut izgleda ovako:


U ovom trokutu postoje one na vrhu i na stranicama (u programu 9.5 trokut je “položen na bok” - stranice trokuta su: prvi stupac i glavna dijagonala). Svaki broj jednak je zbroju dvaju brojeva iznad njega. Redovi trokuta su simetrični oko okomite osi i sadrže binomne koeficijente.

#uključi korištenje imenskog prostora std; int main() ( int n; cout<< "n = "; cin >>n; int pas[n][n]; za (int i = 0; i< n; i++) for (int j = 0; j < n; j++) pas[i][j] = 0; pas = 1; for (int i = 1; i < n; i++) { pas[i] = 1; for (int j = 1; j <= i; j++) { pas[i][j] = pas + pas[j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { cout.width(4); cout << pas[i][j]; } cout << "\n"; } return 0; } n = 12 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1

Pitanja
  1. Može li se instrukcija petlje for u programu zamijeniti instrukcijom petlje while? Može li se to uvijek učiniti?
  2. Kada je prikladnije koristiti naredbu for za organiziranje petlji? dok?
  3. Jesu li sljedeći izrazi mogući u zaglavlju naredbe for: a) for (;a > b && !(a % 2);) b) for (a > b;;) c) for (;;i = 0) d) za ( ;i = 0;) e) za (;;i++, --b) f) za (--i;;) g) za (b = 0; b != a;) ?
  4. Varijabla i je parametar vanjske petlje, a varijabla j je parametar ugniježđene petlje. Hoće li varijabla j biti dostupna u vanjskoj petlji? ja u ugniježđenoj petlji?
Udžbenik
Domaća zadaća
  1. Stražnji 29. Napišite program koji upisuje prirodne brojeve a I b, a zaslon prikazuje sve proste brojeve u rasponu od a prije b(ideja algoritma Program 8.5)
  2. Stražnji 30. Broj se naziva savršenim ako je jednak zbroju svih svojih djelitelja koji su manji od njega samog (npr. broj 6 = 1 + 2 + 3). Napišite program koji unosi prirodni broj N i utvrđuje je li N savršen broj.
  3. Napišite program koji prikazuje kvadratnu tablicu brojeva veličine n x n, koja ima sljedeći oblik za n = 10: 1 * * * * * * * * * * 2 * * * * * * * * * * 3 * * * * * * * * * * 4 * * * * * * * * * * 5 * * * * * * * * * * 6 * * * * * * * * * * 7 * * * * * * * * * * * 8 * * * * * * * * * * 9 * * * * * * * * * * 10
Književnost
  1. Laforet R. Objektno orijentirano programiranje u C++ (4. izdanje). Petar: 2004
  2. Prata, Stjepan. C++ programski jezik. Predavanja i vježbe, 6. izd.: Trans. iz engleskog - M.: LLC “I.D. William", 2012
  3. Lippman B. Stanley, Josie Lajoie, Barbara E. Mu. C++ programski jezik. Osnovni tečaj. ur. 5. M: DOO “I. D. Williams”, 2014
  4. Elline A. C++. Od lamera do programera. Sankt Peterburg: Peter, 2015
  5. Shildt G. C++: Osnovni tečaj, 3. izdanje. M.: Williams, 2010



Pozdrav, dragi čitatelji! Ovdje dolazimo do proučavanja ciklusa. Ciklusi u Pascalu. Što je? Kako ga koristiti? Za što su oni potrebni? Ovo su pitanja na koja ću odgovoriti danas.
Ako ste čitali, onda znate da postoje tri vrste algoritama: linearni, granajući i ciklički. Vi i ja već znamo kako implementirati algoritme u Pascalu. Počnimo proučavati posljednju vrstu algoritama.
U Pascalu, kao iu većini programskih jezika, postoje tri vrste konstrukcija petlje.

Svaka petlja se sastoji od tijela i zaglavlja. Tijelo petlje je skup ponovljenih iskaza, a uvjet je logički izraz, ovisno o rezultatu kojeg se petlja ponavlja.

Uzmimo jedan problem koji ćemo riješiti koristeći različite vrste petlji.

Zadatak 1. Ispišite sve brojeve od 1 do broja unesenog s tipkovnice.

Dok, ili petlja s preduvjetom

Kao što ste vjerojatno već shvatili iz naslova, dok je ciklus u kojem stanje dolazi ispred tijela. Štoviše, tijelo petlje se izvršava ako i samo ako je uvjet pravi; čim stanje postane lažno

Iako ima format:

dok < условие> čini<оператор 1>; (Ćao...radi....)

Ova je petlja prikladna samo za jednu naredbu, ali ako želite koristiti više naredbi u svom kodu, trebali biste ih staviti u zagrade naredbi − početi I kraj;.

Rješenje problema.

Program example_while; var i, N: cijeli broj; (deklarirati varijable) begin i:= 1; ( Postavi i na 1 ) readln(N); (Pročitajte posljednji broj) dok i<= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

Ponavljanje ili petlja s postuvjetom

Ponoviti- potpuna suprotnost dok. Ponoviti je petlja u kojoj stanje dolazi nakon tijela. Štoviše, ispunjen je ako i samo ako je rezultat uvjeta lažno;čim logički izraz postaje pravi, izvođenje petlje se zaustavlja.

Ponavljanje ima format:

ponoviti(ponovi…)
<оператор 1>;
< оператор 2>;

do(prije…) <условие>

Početi I kraj nije obavezno.

Rješenje problema.

Program example_repeat; var i, N: integer;( deklariraj varijable ) begin i:= 1; ( Postavi i na 1 ) readln(N); ( Pročitaj zadnji broj ) ponovi (početak i kraj nisu potrebni nakon ponavljanja) write(i, " "); (Izlaz i) Inc(i); (povećajte i za jedan.) sve dok i = N + 1; (Na primjer, i = 11 i N = 10. Petlja će se zaustaviti, pa uvjet postaje istinit.) kraj.

Za, ili petlja s parametrom

Za je petlja u kojoj se tijelo izvršava određeni broj puta.

Postoje dva oblika snimanja ovog ciklusa:

Prvi oblik

za<счетчик1> := <значение1>do<конечное_значение>čini<оператор1>;

<счетчик1>će se povećati za 1.

<значение1>je početna vrijednost brojača. Može biti varijabla ili broj.
<конечное_значение>: čim vrijednost<счетчик1>bit će ih još<конечное_значение>

Ako trebate napisati nekoliko naredbi u tijelu petlje, koristite početi I kraj.

I<счетчик1>, I<конечное_значение>, I<значение1>- varijable cjelina tip.

Najčešće se varijabla i koristi kao brojač.

Drugi oblik

za<счетчик2> := <значение2>do<конечное_значение>čini<оператор1>;

Nakon svake iteracije vrijednost<счетчик2>smanjit će se za 1.

<значение2>je početna vrijednost brojača.
<конечное_значение>: čim vrijednost<счетчик2>postat će manji<конечное_значение>, izvođenje petlje će se zaustaviti.

Dvije važne napomene:

  1. Ciklus se ponavlja sve dok se vrijednost brojača nalazi u intervalu [vrijednost; konačna_vrijednost].
  2. Promijenite vrijednost brojača unutar tijela Zabranjeno je! Ovo je ono što kompajler ispisuje:

Rješenje problema:

Program example_for; var i, N: cijeli broj; započeti čitanje(N); (pod pretpostavkom da smo unijeli 10) za i:= 1 do N do write(i, " "); (broj ponavljanja - 10 - 1 + 1 = 10) kraj.

Slažem se, ovaj kod je jednostavniji i koncizniji od svih prethodnih. I ciklus za nije sasvim obična petlja; nema logičan uvjet. Zato se petlja s parametrom u programiranju naziva sintaktičkim šećerom. Sintaktički šećer dodaci su sintaksi programskog jezika koji ne dodaju nove značajke, ali čine jezik praktičnijim za korištenje.

Riješimo par problema.

Za1. Zadani su cijeli brojevi K i N (N > 0). Ispiši broj K N puta.

Organiziramo jednostavan ciklus od 1 do traženog broja.

Program za1; var K, N, i: cijeli broj; početi čitati (K, N); za i:= 1 do N do write(K, " "); (K pišemo odvojeno razmakom) kraj.

Za2. < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

Budući da je A< B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

Program za2; var A, B, i, broj: cijeli broj; početi čitati (A, B); for i:= A do B do write(i, " "); (zapisujemo brojeve od najmanjeg prema najvećem) brojimo:= B - A + 1; (brojiti broj brojeva) writeln; write("Broj brojeva - ", broj); kraj.

Za9. Dana su dva cijela broja A i B (A< B). Найти сумму квадратов всех целых чисел от A до B включительно.

Organiziramo isti ciklus kao u prethodnom zadatku, ali u isto vrijeme zbrajamo kvadrate svih brojeva. Za izračun kvadrata upotrijebite funkciju.

Program za9; var A, B, i, S: cijeli broj; početi čitati (A, B); S:= 0; (PascalABC to radi automatski, ali ako imate drugi prevodilac, preporučujemo da ručno resetirate varijable) za i:= A do B do S:= S + Sqr(i); (sabrati sve kvadrate) writeln; write("Zbroj kvadrata - ", S); kraj.

Za 13°. Zadan je cijeli broj N (> 0). Odredite vrijednost izraza 1,1 – 1,2 + 1,3 – … (N članova, predznaci se izmjenjuju). Nemojte koristiti uvjetni operator.

Kako bismo promijenili predznak, u svakoj iteraciji petlje mijenjamo vrijednost posebne varijable u suprotnu.

Program za13; var N, A, i: cijeli broj; S: pravi; begin Write("N = "); readln(N); S: = 1,1; A:= 1; (Prvo pozitivno) for i:= 2 do N do (već smo završili prvu iteraciju petlje, pa počinjemo brojati od 2) begin A:= -A; (Sada negativno) S:= S + A * (1 + i / 10); (Dodaj) end; Zapiši(S:5:1); (Dajmo jedno mjesto za razlomački dio) kraj.

Dok je 1°. Zadani su pozitivni brojevi A i B (A > B). Segment duljine A sadrži najveći mogući broj segmenata duljine B (bez preklapanja). Ne koristeći operacije množenja i dijeljenja, pronađite duljinu slobodnog dijela segmenta A.

Svaki put kada oduzmemo B od A sve dok je A - B >= 0.

Program dok1; var A, B: cijeli broj; započeti čitanje(A, B); dok (A - B) >= 0 do A:= A - B; (Sve dok je razlika pozitivna, oduzimamo. Potrebno je dati opciju s višekratnikom A i B, dakle >=) write(A); kraj.

Dok je 4°.Zadan je cijeli broj N (> 0). Ako je potencija broja 3, ispišite True; ako nije, ispišite False.

Postupamo na sljedeći način: dok je N djeljiv s tri, N podijelimo s cijelim. Zatim, ako je N = 1, broj je potencija broja tri; ako N<>1, tada broj nije potencija broja tri. Kako biste riješili ovaj problem, morate znati što je to i kako funkcionira.

Program dok4; var N: cijeli broj; započeti čitanje(N); dok je N mod 3 = 0 do N:= N div 3; (Sve dok je ostatak dijeljenja s tri nula, podijeli N s cijelim) writeln(N = 1); (boolean izraz) kraj.

To je sve za danas! Ne zaboravite često posjećivati ​​našu web stranicu i klikati na gumbe koji se nalaze prije komentara.