Cyklus s parametrom sme už zvážili v časti "Algoritmus" v téme "Typy algoritmov".
Používa sa slučka s parametrom,keď je vopred známe, koľkokrát sa má cyklus vykonať.

Formát záznamu cyklu:

Tu pre, robiť, robiť- vyhradené slová (pre, pred, vykonať);

<пар. цикла> - parameter cyklu - premenný celé číslo typ (celočíselný typ);
<нач. знач.> - počiatočná hodnota - číslo alebo premennácelé číslo typ (celočíselný typ);
<кон. знач.> - koncová hodnota - číslo príp
premenlivýcelé číslo typ (celočíselný typ);
<оператор> je ľubovoľný operátor Pascal.

Príklad: Pre i:=1 až n urobte<оператор>
tu i je parameter slučky
1 - počiatočná hodnota
n - konečná hodnota
Ak sa v tele slučky použije niekoľko operátorov, potom sa použijú zátvorky operátora: begin ... end.
Pri vykonávaní príkazu for sa najskôr vyhodnotí výraz<нач.знач.>a priradenie jej hodnoty do premennej cyklu<пар.цикла> := <нач. знач.>. Ďalej sa porovnávajú<пар.цикла>a <кон.знач.>. Kým sa nezrovnajú, príkazy sa vykonajú. Hodnota premennej slučky<нач.знач>automaticky sa zvýši o jednu počas cyklu.Hneď je potrebné poznamenať, že v tomto operátore nie je možné nastaviť iný krok cyklu ako 1.
Príklad:
Možné sú nasledujúce príkazy cyklu:

1) pre i:= 1 až n do s1;

2) pre i:= 3 až 10 do s1;

3) pre i:= a až b do s1;

4) pre i:= a až b urobte
začať

s1;
s2;
...
sn

koniec;

Tu s1, s2, s3, ... sn sú slučkové operátory.

Príklad:
Napíšte program na zobrazenie čísel od 1 do 10.

Príklad:
Napíšte program na výpočet faktoriálu čísla n, teda n!. (0!=1)

Vysvetlenie programu:
Premenná n je pre číslo zadané používateľom, ktorého faktoriál sa má nájsť; f - premenná, v ktorej sa bude "akumulovať" hodnota faktoriálu čísla n; i - premenná slučky.
Počiatočná hodnota premennej f:= 1 je nastavená.
Potom začne cyklus. Premenná i je inicializovaná na 1; porovnáva sa s konečným - n (1<= n), если условие истинно, тогда выполняется оператор (в этой программе он один): f:= f*i, 1*1=1; значение переменной цикла увеличивается на 1, т. е. станет равным: i:= i + 1, 1 + 1 = 2 и цикл повторяется.
Keď sa hodnota i stane rovnou n, potom sa cyklus vykoná poslednýkrát, pretože ďalšia hodnota i bude n + 1, ktorá je väčšia ako konečná hodnota n, podmienka i<= n - ложно, цикл не выполняется.

Existuje iná forma príkazu cyklu For:
Formát záznamu cyklu:

Nahradenie rezervovaného slova za slovom downto znamená, že krok parametra slučky je (-1).
Zmena hodnoty parametra prechádza z väčšej hodnoty na menšiu, t.j.<нач. знач.> <кон. знач.>.

Príklad:
Možné sú nasledujúce príkazy cyklu:

1) pre i:= n až po 1 do s1;

2) pre i:= 10 až 3 do s1;

3) pre i:= b až po a do s1; (za predpokladu b>a)

4) pre i:= b až po do
začať

S1;
s2;
...
sn

koniec; (za predpokladu b>a)

Tu s1, s2, s3, ... sn sú slučkové operátory.

Príklad: Výpočtový program faktoriálčísla možno skladať pomocou tohto príkazu cyklu.


Úlohy

  1. Vzhľadom na 10 čísel vytlačte tie, ktoré sú dokonalými štvorcami.
  2. Vzhľadom na 10 čísel nájdite ich produkt.Vytvorte blokovú schému a program.
  3. Zadaných 10 čísel nájdite súčet párnych čísel.Vytvorte blokovú schému a program.
  4. Zadaných 10 čísel nájdite počet záporných čísel.Vytvorte blokovú schému a program.
  5. Daných n reálnych čísel. Nájdite maximum a minimum.Vytvorte blokovú schému a program.
  6. Daných n reálnych čísel. Nájdite aritmetický priemer všetkých prvkov.Vytvorte blokovú schému a program.
  7. Daných n reálnych čísel. Nájdite aritmetický priemer negatívnych a pozitívnych prvkov.Vytvorte blokovú schému a program.
  8. Daných n prirodzených čísel. Nájdite súčet a súčin prvkov, ktoré sú násobkami 3 a 5.Vytvorte blokovú schému a program.
  9. Daných n prirodzených čísel. Odstúpiť tie čísla, ktorých hodnoty sú mocniny dvoch (1, 2, 4, 8, 16, ...).Vytvorte blokovú schému a program.
  10. Daných n prirodzených čísel. Odstúpiť tie čísla, ktorých hodnoty sú v segmente.Vytvorte blokovú schému a program.
  11. Daných n prirodzených čísel. Zobrazte tie čísla, ktorých hodnoty sú druhé mocniny nejakého čísla.Vytvorte blokovú schému a program.
  12. Dané prirodzené číslo n. Nájdite n 2.Vytvorte blokovú schému a program.
  13. Dané prirodzené čísla a, n. Nájdite n.Vytvorte blokovú schému a program.
  14. Dané prirodzené číslo n. Určte jeho kapacitu, zvýšte najvýznamnejšiu číslicu čísla o 2
  15. Dané prirodzené číslo n. Vymeňte prvú a poslednú číslicu čísla
  16. Dané prirodzené číslo n. Číslice čísla, ktoré sú násobkami 2, sa nahradia nulou.
  17. Dané prirodzené číslo n. Číslice čísla, ktoré sú násobkami 3, sú nahradené 1.
  18. Dané prirodzené číslo n. Vypočítajte súčin (2n-1)*(3n-1)*(4n-1)*...*(10n-1).Vytvorte blokovú schému a program.
  19. Vypočítajte súčet 2+4+6+...+100.Vytvorte blokovú schému a program.
  20. Dané prirodzené číslo n, reálne x. Vypočítajte súčin x+x/2+x/3+...+x/n.Vytvorte blokovú schému a program.
  21. Dané prirodzené číslo n. Vypočítajte P=(1-1/2)(1-1/3)...(1-1/n), kde n>2.Vytvorte blokovú schému a program.
  22. Dané prirodzené číslo n. Vypočítajte P=(1+x)/n+(2+x)/(n-1)+...+(n+x)/1.Vytvorte blokovú schému a program.
  23. Daných n prirodzených čísel. Vypočítajte súčet radu1+x/1!+x 2 /2!+x 3 /3!+ ...+x n/n!. Vytvorte blokovú schému a program.

Inštrukcia pre slučku implementuje algoritmickú štruktúru slučka s parametrom(alebo slučka s počítadlom). Cyklus for sa používa, keď sa v programe pred vykonaním pokynov cyklu stane známy (alebo vopred určený) počet krokov tohto cyklu. Vo vývojovom diagrame je príkaz for znázornený takto:

Syntax:

Pre ( inicializácia; stave; modifikácia) (Opakujte pokyny tela; )

Ak je v tele cyklu jedna inštrukcia, potom ( ) možno vynechať. Premenná parametra cyklu (počítadlo) môže byť ľubovoľného číselného typu. Vďaka tomu je cyklus for C++ rovnako všestranný ako cyklus while. V časti modifikácie sa najčastejšie používa operácia prírastku (alebo znižovania) prípony alebo predpony, ale možno použiť akýkoľvek priraďovací výraz, ktorý mení hodnotu parametra cyklu. Slučka funguje takto:

  • Na začiatku prebehne popis a inicializácia premennej čítača.
  • Ďalej skontrolujte podmienku: ak má výraz hodnotu pravda, dôjde k opakovaniu
  • Po vykonaní inštrukcií tela slučky sa hodnota počítadla upraví

Poznámka: v C++ je pravidlom urobiť popis premennej čítača v hlavičke cyklu. Nie je to však potrebné, najmä ak plánujete inicializovať niekoľko premenných v sekcii inicializácie, ako je implementované v programe 9.2. Použitie deklarácie premennej počítadla v hlavičke cyklu však vedie k deklarácii lokálnej premennej, ktorá sa po ukončení cyklu automaticky zničí. Preto, pokiaľ to nie je absolútne nevyhnutné, popis premennej čítača mimo cyklu for by sa nemal vykonávať.
Zatiaľ čo cyklus for beží, neodporúča sa meniť operandy vo výrazoch hlavičky cyklu - to povedie k najrôznejším chybám! Ale hodnoty premenných (alebo konštánt), vrátane meniteľné hodnoty(počítadlo), môžete použiť. Zvážte klasický príklad.

Program 9.1 Dané prirodzené číslo N. Vytlačte všetkých deliteľov tohto čísla.

#include << "N = "; cin >>N; pre (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

Použitie príkazu continue v slučke for

Pri použití príkazu continue v slučke for je potrebné vziať do úvahy zvláštnosti činnosti tejto slučky:

  • Vyjadrenia nasledujúce po pokračovaní budú preskočené
  • Potom sa počítadlo upraví.
  • Prechod na ďalšiu iteráciu (v opačnom prípade kontrola podmienky)

Ukážme si to na príklade: 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

Poznámka. Poznámka: aj keď sa výstup čísel podľa podmienky preskočí, počítadlo sa zvýši. Tento príklad slúži len na ilustračné účely, nemali by ste takto naprogramovať slučku! Tento problém je lepšie vyriešiť nasledujúcim spôsobom:

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

Viaceré výrazy v sekcii inicializácie a úprav

Ako sme už uviedli, v hlavičke vyhlásenia for by mali byť tri sekcie. Výrazy v týchto sekciách možno vynechať, ale ";" nemožno vynechať. . Koniec koncov, môžete len odísť; . Titul v tvare:

Pre (;;) ( ... )

je hlavička „nekonečnej“ slučky. (Výstup zo slučky musí byť naprogramovaný vo vnútri tela slučky).
C++ podporuje viacero výrazov v inicializačných a modifikačných častiach hlavičky príkazu for. V tomto prípade musí byť podmienka pokračovania cyklu jedna!
Napríklad. Úloha: Vypočítajte faktoriál čísla nepresahujúceho 20.
Program 9.2

#include pomocou menného priestoru std; int main() ( bez znamienka dlhé dlhé 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

Poznámka: všimnite si, že výstupný tok na riadku 12 sa nevzťahuje na telo slučky! (Na konci nadpisu - ;). Táto slučka má teda v tele prázdnu inštrukciu a všetky výrazy sa vyhodnocujú v hlavičke. Program 9.2 správne vypočíta faktoriál čísla od 0 do 20.

Slučka for založená na rozsahu

Ak chcete iterovať cez prvky poľa alebo kontajnera, musíte vykonať rovnaký typ akcií pri použití ťažkopádneho kódu. Na zjednodušenie práce s kontajnermi v C++ existuje špeciálna forma cyklu for – rozsahový for (loop pre na základe rozsahu alebo rozsah pre).
Syntax:

Pre ( inzerát : názov_sekvencie) loop_statement

Použitie na základe rozsahu na príklade C poľa:
Program 9.3

#include pomocou menného priestoru std; int main() ( int x ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); for (auto &s: x) ( cout<< s << " "; } return 0; }

Aby sa prvky poľa zmenili, premenná s musí byť referenčnou premennou (ako v príklade vyššie). Ak premenná nie je odkaz, údaje sa skopírujú. Na automatické odvodzovanie typu sa v tejto slučke používa automatický špecifikátor. rozsah založený na má obmedzenie pre prácu s dynamickými poľami: nepodporuje zmenu veľkosti poľa, pretože obsahuje pevný ukazovateľ konca poľa. Pri práci s poliami, ktoré majú pevnú veľkosť, je rozsah pre skvelú a bezpečnú alternatívu k bežnému pre .

Vnorené pre slučky

Rovnako ako ostatné príkazy cyklu, aj for podporuje štruktúru vnorených slučiek. Používanie vnorených slučiek for na organizáciu vstupu a výstupu dvojrozmerných polí je oveľa kompaktnejšie ako používanie cyklu while.
Pri prechádzaní takýchto polí by ste sa však mali vyhnúť použitiu príkazu if. Úlohu možno často implementovať racionálnejšie manipuláciou s indexmi (slučkové premenné i a j). To znamená, aby bola zmena jedného indexu závislá od hodnoty druhého. Uvažujme o dvoch príkladoch.
Program 9.4 Daná štvorcová matica veľkosti n, ktorej prvky sa rovnajú 0. Vyplňte prvky pod a na hlavnej uhlopriečke jednotkami.

#include pomocou menného priestoru std; int main() ( int n; cout<< "n = "; cin >>n; intmas[n][n]; // Doplňte nulami pre (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 Napíšte program, ktorý vyplní pole číslami Pascalovho trojuholníka a vypíše toto pole. Pascalov trojuholník vyzerá takto:


Tento trojuholník má navrchu a po stranách 1 (v programe 9.5 trojuholník „leží na jeho strane“ – strany trojuholníka: prvý stĺpec a hlavná uhlopriečka). Každé číslo sa rovná súčtu dvoch čísel nad ním. Čiary trojuholníka sú symetrické okolo vertikálnej osi a obsahujú binomické koeficienty.

#include pomocou menného priestoru std; int main() ( int n; cout<< "n = "; cin >>n; int pass[n][n]; pre (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

Otázky
  1. Môže byť príkaz cyklu for nahradený príkazom cyklu while v programe? Je to vždy možné?
  2. Kedy je lepšie použiť príkaz for na zacyklenie? kým?
  3. Sú v hlavičke príkazu for možné tieto výrazy: a) pre (;a > b && !(a % 2);) b) pre (a > b;;) c) pre (;;i = 0) d) pre (;i = 0;) e) pre (;;i++, --b) f) pre (--i;;) g) pre (b = 0; b != a;)?
  4. Premenná i je parameter vonkajšej slučky a j je parameter vnorenej slučky. Bude premenná j dostupná vo vonkajšej slučke? som vo vnorenej slučke?
Učebnica
Domáca úloha
  1. Zadné 29. Napíšte program, ktorý zadá prirodzené čísla a a b a na displeji sa zobrazia všetky prvočísla v rozsahu od a predtým b(nápad algoritmu Program 8.5)
  2. Zadné 30. Dokonalé číslo je číslo, ktoré sa rovná súčtu všetkých jeho deliteľov menších ako je ono (napríklad číslo 6 = 1 + 2 + 3). Napíšte program, ktorý vezme prirodzené číslo N a určí, či je N dokonalé.
  3. Napíšte program, ktorý zobrazí n x n štvorcovú číselnú tabuľku, ktorá vyzerá takto pre n = 10: 1 * * * * * * * * * * 2 * * * * * * * * * * 3 * * * * * * * * * * 4 * * * * * * * * * * 5 * * * * * * * * * * 6 * * * * * * * * * * * 7 * * * * * * * * * * * 8 * * * * * * * * * * 9 * * * * * * * * * * * 10
Literatúra
  1. Laforet R. Objektovo-orientované programovanie v C++ (4. vydanie). Peter: 2004
  2. Prata, Štefan. Programovací jazyk C++. Prednášky a cvičenia, 6. vyd.: Per. z angličtiny. - M.: I.D. William, 2012
  3. Lippman B. Stanley, Josy Lajoye, Barbara E. Moo. Programovací jazyk C++. Základný kurz. Ed. 5. M: LLC „I. D. Williams“, 2014
  4. Elline A. C++. Od lamera k programátorovi. Petrohrad: Peter, 2015
  5. Schildt G. C++: Základný kurz, 3. vyd. M.: Williams, 2010



Cykly zaujímajú v Turbo Pascal zvláštne miesto. Začínajú študovať ihneď po vypracovaní zručností vstupno-výstupných informácií na obrazovke. Väčšina úloh totiž spočíva v tom, že cykly s parametrom a ďalšie konštrukcie pomáhajú uľahčiť písanie a obsluhu určitého programového bloku.

Odrody cyklov

Celkovo existujú tri odrody:

  • s parametrom
  • s predpokladom
  • s postpodmienkou.

Slučky s parametrom, inak známym ako For ... to ... urobiť alebo For ... downto .... robiť, opakovane opakovať určitú postupnosť akcií. V zásade sa na rovnaký účel používajú iné odrody, iba v slučke for je vopred známy počet krokov.

V ďalších dvoch konštruktoch (While a Repeat) je počet iterácií spočiatku neznámy. Preto pri štúdiu úlohy je už potrebné pochopiť, ktorý cyklus sa použije.

Základné definície k téme

Slučky s parametrami sú viacnásobné iterácie. Počítadlo je hlavným ukazovateľom, s ktorým sa daná konštrukcia vykonáva. Hranice intervalu ukazujú hranice, v rámci ktorých sa budú vykonávať určité iterácie. Mimochodom, nie je absolútne nevyhnutné, aby sa počiatočná hodnota rovnala 1. Používateľ nezávisle nastavuje obe hranice intervalu. Telo slučky je súbor príkazov, pre ktoré už bol stanovený počet opakovaní.

Pojem "slučky s parametrami" znamená, že v tejto konštrukcii sa kontroluje podmienka, po ktorej sa vykoná súbor iterácií. Počítadlo sa zvyšuje (alebo znižuje) a všetko sa opakuje. Telo cyklu sa bude vykonávať, pokiaľ je podmienka pravdivá.

Pre ... robiť ... robiť: pracovný algoritmus, syntax

Ako už bolo spomenuté, cykly s parametrom sa používajú v úlohách, v ktorých je uvedený „interval“, v ktorom sa má pracovať. Takže to môže byť pole čísel, dní v týždni, riadkov básne atď.

Existujú 2 typy dizajnu: na zvýšenie počítadla a na jeho zníženie. Prvá štruktúra bude napísaná takto:

pre odchádzajúca premenná := hranica 1 do hranica 2 robiť

telo slučky;

Tu: ref. premenlivý deklarované používateľom na začiatku programu alebo bloku; hranica 1 a hranica 2- počiatočná a konečná hodnota intervalu; v telo cyklu určuje množinu akcií, ktoré má program vykonať. Je potrebné si uvedomiť, že ak telo cyklu obsahuje iba 1 príkaz, potom zátvorky operátora begin ... end možno vynechať. V tejto verzii dizajnu je počítadlo, a to<исх.переменная>, sa bude zvyšovať v prírastkoch 1.

pre odchádzajúca premenná:= hranica 1 nadol hranica 2 robiť

telo slučky;

Tu je ref. premenná sa bude znižovať v prírastkoch po 1.

Schéma cyklu s parametrom For ... to ... do bude vyzerať takto:

  • Nastaví sa hodnota hornej hranice intervalu, t.j. hranica 2.
  • Zdrojová premenná je priradená hodnota parametra hranica 1.
  • Podmienka sa kontroluje: nespracovaná premenná ≤ limit 2.
  • Po prijatí výsledku Pravda (Pravda) telo slučky sa vykoná.
  • Počítadlo sa zvýši o 1.
  • Kroky 3-5 sa vykonávajú presne, kým podmienka nie je pravdivá: zdrojová premenná > limit 2. Hneď ako sa to stane, slučka sa ukončí a riadenie sa prenesie na príkaz nasledujúci po tejto konštrukcii.

V For ... downto ... do je algoritmus práce podobný vyššie uvedenému, s výnimkou niektorých bodov:

  • V treťom odseku sa kontroluje podmienka: zdrojová premenná ≥ limit 2.
  • V piatom riadku algoritmu sa počítadlo zníži o 1.
  • V 6. odseku sa príkazy 3-5 budú vykonávať, kým nebude splnená podmienka: odchádzajúca premenná< граница 2.

Všetko ostatné je podobné v oboch pracovných algoritmoch.

Bloková schéma slučky s parametrom

Slučky s parametrom majú nasledujúcu formu blokového diagramu (hoci to už bolo uvedené vyššie). Je tu znázornená aj zjednodušená organizácia dizajnu.

Základné požiadavky na cyklus s parametrom

Slučky s parametrami vyžadujú určité druhy podmienok.

  • Počítadlo a hranice rozsahu (t. j. zdrojová premenná, hranica 1 a hranica 2) musia byť rovnakého typu údajov. Ak existuje iba kompatibilita medzi počiatočnými a koncovými hodnotami intervalu a pôvodnou premennou, program sa môže správať nesprávne, pretože hranice budú prevedené podľa typu údajov pôvodného parametra.
  • Typ údajov, ku ktorým musia patriť hodnoty parametrov, musí byť celé číslo. Dôrazne sa neodporúča používať skutočný typ.
  • Je nežiaduce meniť hodnotu počiatočného parametra premennej v tele slučky. V opačnom prípade bude používateľ sotva schopný sledovať možné chyby, ktoré sa objavili.
  • Na rozdiel od iných druhov slučiek sa pri For … to … do alebo For … down to … to krok nemôže zmeniť na iný parameter ako 1.

Turbo Pascal: ako sa dostať zo slučky

Pomerne často sa vyskytujú problémy, pri ktorých dochádza k zacykleniu, t. j. kontrolovaná podmienka je vždy pravdivá. Procedúra Break pomáha opustiť slučky s predbežnou podmienkou, dodatočnou podmienkou, parametrom. To znamená, že ich práca je ukončená v predstihu.

Slučky parametrov Pascal (ktorých programovanie predpokladá "večnú" pravdivosť podmienky) je možné zastaviť pomocou Continue. Tu je práca nastavená nasledovne: aktuálna iterácia ukončí svoju realizáciu v predstihu, riadenie sa prenesie na nasledujúci príkaz, ale bez opustenia cyklu.

Procedúra Exit je potrebná na dokončenie práce konkrétneho bloku v programovom kóde. Volá sa vo vnútri procedúry (funkcie) a v tom istom momente sa vykonávanie tohto „kúsku“ okamžite zastaví. Ak je Exit v hlavnom bloku programu, ukončí svoju prácu.

Postup zastavenia redukuje princíp činnosti na nasledujúci: program sa úplne ukončí.

Príklady úloh s riešením

Po preštudovaní témy „Slučky s parametrom v jazyku Pascal“ bude pre používateľa užitočné najprv si preštudovať príklady a potom sa naučiť písať kód samostatne. Jednoduché úlohy pomáhajú budúcemu programátorovi naučiť sa teóriu v praxi a potom ju úspešne aplikovať. Na tému „Slučky s parametrom“ možno nájsť príklady problémov s riešením ako jednoduché, tak aj zložité. Tu sú 3 úlohy, v ktorých sa analyzujú algoritmy práce a ku každému riešeniu sú uvedené vysvetlenia a komentáre.

Úloha 1

Dané je dvojrozmerné pole prirodzených čísel v rozsahu , vybraných náhodne. Nájdite počet všetkých dvojciferných čísel, ktorých súčet číslic je násobkom 2.

Akčný algoritmus:

  1. Vytvorte dvojrozmerné pole.
  2. Skontrolujte, či každé číslo spĺňa podmienky:

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

b) extrahujte druhú číslicu čísla vydelením cez mod;

c) sčítajte zvýraznené čísla;

d) vydeľte modom daný súčet 2;

e) ak je výsledok 0, počítadlo sa zvýši o 1.

Úloha 2

Dané jednorozmerné pole celočíselných prvkov. Nájdite počet kladných čísel.

Akčný algoritmus:

  1. Vytvorte pole celočíselných prvkov generovaných náhodným výberom.
  2. K slučke pripojíme IF parametrom, ktorý skontroluje, či daný prvok spĺňa podmienku: X>0.
  3. Ak je podmienka splnená, počítadlo sa zvýši o 1.
  4. Po slučke by sa výsledná hodnota počítadla mala zobraziť na obrazovke.

Údaje v zátvorkách () sú komentáre. V riadku 11 môžete pole zobraziť na obrazovke dvoma spôsobmi: ponechať medzeru medzi číslami alebo prideliť každému prvku určitý počet buniek (v tomto prípade je ich 5).

V riadku 12 je možné zvýšiť aj premennú počítadla dvoma spôsobmi: buď pridajte 1 k predchádzajúcej hodnote, alebo použite štandardnú funkciu Inc.

Úloha 3

Daná štvorcová matica. Nájdite počet kladných prvkov na hlavnej diagonále.

vysvetlenia:

V rade čísel sa hlavná uhlopriečka tiahne od ľavého horného rohu k pravému dolnému rohu. Jeho zvláštnosťou je skutočnosť, že riadkové a stĺpcové indexy sú rovnaké. Preto stačí zorganizovať 1 cyklus, aby ste prešli riadkami bez iterovania zostávajúcich prvkov.

Akčný algoritmus:

  1. Vytvorte štvorcovú maticu.
  2. Nastavte premennú zodpovednú za počítanie kladných prvkov na "0".
  3. Urobte cyklus na vytvorenie štvorcovej matice.
  4. Zorganizujte slučku na kontrolu stavu: ak je číslo na hlavnej uhlopriečke >0, potom sa počítadlo zvýši o 1.
  5. Po skončení cyklu zobrazte na obrazovke hodnotu premennej, ktorá ukladá počet kladných prvkov.

Konfrontácia dvoch programovacích jazykov: C a Turbo Pascal

Sebavedomý programátor spravidla pozná niekoľko jazykov. Môže to byť napríklad C++, Turbo Pascal, Delphi, Java atď. Opozícia medzi nimi bola jasne vyjadrená už v 80. rokoch. (C a turbo pascal). Na konci 20. storočia bol rovnaký boj pozorovaný medzi C++ a Java.

Vo virtuálnom priestore možno medzi tromi desiatkami programovacích jazykov rozlíšiť tri z najjasnejších párov, ktorých opozícia ohromila najväčšie mysle kyberpriestoru: Algol-60 a Fortran, Pascal a C, Java a C++. Samozrejme, tieto pocity sú subjektívne, ale v tom či onom čase bol jeden z dvojice vodcom. Bolo to spôsobené požiadavkami odvetvia a potrebou konkrétneho softvérového produktu. V 70. rokoch. Fortran "vládol svetu", v 80. rokoch - Turbo Pascal, v 90. rokoch - C ++. Samozrejme, nikto z nich „nezomrel“. Skôr sa vyvinuli do vylepšených softvérových produktov.

Pri štúdiu programovacích jazykov si všimnete, že v niektorých témach je syntax podobná. Takže slučky s parametrom v C sú podobné podobným konštrukciám v Pascale, s výnimkou niektorých bodov.

Je zaujímavé, že vývojári Turbo Pascal (Starý svet) využili výsledky vývoja amerických vedcov, zatiaľ čo v Novom svete aktívne aplikovali výsledky výskumu európskych špecialistov. V Európe vývojári viac obhajujú čistotu a kompaktnosť programovacích jazykov, zatiaľ čo americké mysle majú tendenciu používať nové trendy v písaní kódu.

Slučka s parametrom má nasledujúci formát:

pre (inicializácia; výraz; modifikácie) príkaz;

Inicializácia sa používa na deklarovanie a priradenie počiatočných hodnôt k hodnotám použitým v slučke. V tejto časti môžete napísať niekoľko príkazov oddelených čiarkou (operácia „sekvenčné vykonávanie“), napríklad takto:

for (int i = 0, j = 2; ...

pre (k=1, m=0; ...

Rozsah premenných deklarovaných v časti inicializácie slučky je slučka 1 . Inicializácia sa vykoná raz na začiatku vykonávania cyklu.

Výraz definuje podmienku vykonania cyklu: ak je jeho výsledok, odovzdaný na bool , pravdivý, cyklus sa vykoná. Cyklus s parametrom je implementovaný ako cyklus s podmienkou.

Úpravy sa vykonávajú po každej iterácii cyklu a zvyčajne sa používajú na zmenu parametrov cyklu. V modifikačnej časti môžete napísať niekoľko operátorov oddelených čiarkami. Jednoduché alebo zložené operátor je telo slučky. Akákoľvek časť príkazu for môže byť vynechaná (bodkočiarky však musia zostať na mieste!).

Príklad (operátor, ktorý vypočítava súčet čísel od 1 do 100):

pre (Int i = 1, s = 0; 1<=100; i++) s += i;

Príklad (program vypíše tabuľku funkčných hodnôt y \u003d x 2 +1 v zadanom rozsahu):

#include

plavák Xn, Xk, Dx, X;

printf("Zadajte rozsah a prírastok argumentu: ");

scanf("%f%f%f", &Xn, &Xk, &Dx);

printf("|X|Y|\n");

pre (X = Xn; X<=Xk; X+=Dx)

printf (" | %5.2f | %5.2f |\n", X*X + 1);

Príklad (program nájde všetkých deliteľov kladného celého čísla):

#include int main()(

int num, polovica, div;

cout<< “\n Введите число: "; cin >>num;

pre (polovica = číslo / 2, div = 2; div<= half; div++)

if (!(num %div))cout<< div <<"\n";

Posledné dva príklady vykonávajú rovnaké akcie ako príklady pre cyklus s podmienkou, ale sú napísané kompaktnejšie a prehľadnejšie: všetky akcie súvisiace s riadením cyklu sú lokalizované v jeho hlavičke.

Ľubovoľnú slučku while možno preniesť na ekvivalentnú slučku for a naopak, a to takto:

pre (b1: b2; b3) operátor b1;

while (b2)( vyhlásenie; b3;)

Spoločné chyby pri programovacích cykloch - použitie neinicializovaných premenných v tele cyklu a nesprávne zadanie výstupnej podmienky z cyklu.

q skontrolujte, či všetky premenné nachádzajúce sa na pravej strane príkazov priradenia v tele cyklu boli predtým priradené počiatočné hodnoty (a tiež či je možné vykonať ďalšie príkazy);


q skontrolovať, či sa aspoň jedna premenná, ktorá je zahrnutá v podmienke ukončenia slučky, zmení v slučke;

q zabezpečiť núdzový východ zo slučky po dosiahnutí určitého počtu opakovaní;

q a samozrejme nezabudnite, že ak potrebujete vykonať viac ako jeden príkaz v tele cyklu, musíte ich uzavrieť do zložených zátvoriek.

Príkazy cyklu sú zameniteľné, ale niektoré odporúčania výber toho najlepšieho v každom prípade.

Príkaz do while sa zvyčajne používa, keď sa cyklus musí vykonať aspoň raz (napríklad, ak sú v slučke zadané údaje).

Operátor while je vhodnejšie použiť v prípadoch, keď počet iterácií nie je vopred známy, neexistujú žiadne zrejmé parametre slučky, alebo je vhodnejšie zapísať úpravu parametra nie na koniec tela slučky.

Vo väčšine ostatných prípadov je vhodnejší príkaz for (určite - na organizovanie cyklov s počítadlami).

Vo všeobecnosti sa dnes o každom z cyklov v Pascale dozvieme podrobnejšie a uvidíme, ako sú nastavené. Rozoberieme while loop s predpokladom, slučka for s parametrom a opakujte - do slučky s následnou podmienkou.

1. Slučka s parametrom v Pascale - FOR

Slučka FOR nastavuje určitú podmienku, podľa ktorej bude program pracovať, kým sa nespustí, povedzme, že potrebujeme program 5 (alebo n) cyklovať, potom je to jednoduché pomocou tejto slučky. Slučka FOR má charakteristickú vlastnosť - počítadlo, ktoré sa zvyčajne označuje písmenom i alebo j.

Vzhľad cyklu s parametrom v pascal:

for i:= 1 až n do // priraďte i najprv k jednej, potom dvom, trom, ..., n

Po 1. priechode priradíme 1 premennej i, po druhom priechode priraďujeme 2 atď., až kým nedosiahneme n. do je až do .. vo vzostupnom poradí, existuje aj zostupne do - až do .. v zostupnom poradí.

Bloková schéma cyklu s parametrom:

2. Slučka s predpokladom v Pascale - WHILE

Operátor slučky s predbežnou podmienkou vykoná akcie neznámy počet krát. Cyklus sa ukončí, ak je nejaký logický výraz alebo jeho výsledok nepravdivý. Keďže platnosť logického výrazu sa kontroluje na začiatku, telo cyklu sa nemusí vykonať ani raz.

Slučková štruktúra s predpokladom:

WHILE DO begin end;

Booleovský výraz, ktorého pravdivosť sa kontroluje na začiatku vykonávania cyklického operátora;

Akékoľvek príkazy v spustiteľnom jazyku.

Poradie vykonania cyklu:

Kým je podmienka pravdivá, telo cyklu sa vykoná. Akonáhle sa podmienka stane nepravdivou, cyklus sa ukončí.

Bloková schéma cyklu s podmienkou:


Poznámka: obdĺžnikové bloky zobrazujú akúkoľvek akciu, ktorá sa vykonáva v cykle alebo po ňom (krok cyklu), ovály znázorňujú začiatok alebo koniec celého programu alebo jeho časti. Hlavnú úlohu v tomto blokovom diagrame zohráva jeho centrálna časť.

Príklad:

Úloha: vypočítajte súčet sérií 1+1,5+2+2,5+3+3,5+ .. + 30

programový príklad-pričom;

varsum:real; n:skutočné; ZAČIATOK súčet:=0; n:=1; kým n

3. Slučka s následnou podmienkou - Opakujte - do.

Tento operátor je podobný operátorovi slučky s predbežnou podmienkou, ale líši sa od neho tým, že podmienka sa kontroluje po vykonaní tela (akcií) cyklu. To zaisťuje, že sa vykoná aspoň raz, na rozdiel od predtým analyzovaných slučiek.

Upozorňujeme, že tento príkaz cyklu predpokladá prítomnosť niekoľkých príkazov v tele cyklu, to znamená, že môžete vykonať niekoľko akcií, takže servisné slová Začiatok a Koniec nie sú potrebné.

Postupnosť príkazov obsiahnutých v tele cyklu sa vykoná raz, potom sa skontroluje podmienka zapísaná za servisným slovom Until. Ak podmienka nie je splnená, cyklus sa skončí. V opačnom prípade sa telo slučky zopakuje ešte raz, potom sa podmienka znova skontroluje.

Bloková schéma cyklu s dodatočnou podmienkou:

Formát záznamu, štruktúra cyklu:
OPAKOVAŤ DO ;

Príklad:

Test programu2; Varb:Real; Začiatok b:=100; Opakujte b:=b/2; do b

Závery:

1. Slučka s parametrom používa premennú nazývanú parameter slučky alebo čítač. Pred vykonaním cyklu sa parameter (počítadlo) nastaví na počiatočnú hodnotu. Po vykonaní kroku slučky sa hodnota parametra zvýši o jednu. Cyklus pokračuje, kým parameter nedosiahne svoju konečnú hodnotu, ktorá je špecifikovaná za to (downto).

2. Cyklus s predbežnou podmienkou sa vykonáva, kým sa podmienka vykonania nestane falošnou, a pokračuje, ak je podmienka pravdivá.

3. Cyklus s postcondition sa vykonáva, kým sa podmienka nestane pravdivou, ak je podmienka nepravdivá, cyklus pokračuje.