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 je trojuholník „položený na bok“ – 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



Dobrý deň, milí čitatelia! Tu sa dostávame k štúdiu cyklov. Cykly v Pascale. Čo to je? Ako sa to používa? Na čo sú potrebné? Toto sú otázky, na ktoré dnes odpoviem.
Ak ste čítali, potom viete, že existujú tri typy algoritmov: lineárny, vetviaci a cyklický. Už vieme, ako implementovať algoritmy v Pascale. Začnime študovať posledný typ algoritmov.
V Pascale, rovnako ako vo väčšine programovacích jazykov, existujú tri typy konštrukcií cyklovania.

Každý cyklus pozostáva z tela a hlavičky. Telo cyklu je množina opakovaných príkazov a podmienka je logický výraz, v závislosti od výsledku, ktorého sa cyklus opakuje.

Zoberme si jeden problém, ktorý vyriešime pomocou rôznych typov cyklov.

Úloha 1. Zobrazte všetky čísla od 1 po číslo zadané z klávesnice.

Kým, alebo slučka s podmienkou

Ako ste už zrejme pochopili z názvu, zatiaľ čo je slučka, v ktorej stav prichádza pred telo. Telo cyklu sa navyše vykoná vtedy a len vtedy, ak je splnená podmienka pravda; akonáhle sa stav stane falošný

Kým má formát:

zatiaľ čo < условие> robiť<оператор 1>; (Ahoj...urob....)

Tento cyklus je vhodný len pre jeden príkaz, ak chcete v kóde použiť viacero príkazov, mali by ste ich uzavrieť do zátvoriek príkazu − začať a koniec;.

Riešenie problému.

Program example_while; var i, N: celé číslo; (deklarovanie premenných) begin i:= 1; (Nastav i na 1) readln(N); (Prečítajte si posledné číslo), kým i<= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

Opakujte alebo slučku s dodatočnou podmienkou

Opakujte- úplný opak zatiaľ čo. Opakujte je slučka, v ktorej je stav po tele. Okrem toho sa vykoná vtedy a len vtedy, ak je výsledkom podmienky falošný;akonáhle sa booleovský výraz stane pravda, slučka je ukončená.

Opakovanie má formát:

opakovať(opakovať...)
<оператор 1>;
< оператор 2>;

kým(predtým...) <условие>

Začať a koniec nevyžaduje sa.

Riešenie problému.

Program example_repeat; var i, N: integer;( deklarovať premenné) begin i:= 1; (Nastav i na 1) readln(N); ( Prečítať posledné číslo ) zopakovať ( po opakovaní netreba začiatok a koniec ) napísať (i, " "); (Zobraziť i) Inc(i); (Zvýšte i o jeden.) kým i = N + 1; (Napríklad i = 11 a N = 10. Cyklus sa zastaví, takže podmienka sa stane pravdivou.) end.

For, alebo slučka s parametrom

Pre je cyklus, v ktorom sa telo vykoná daný počet krát.

Existujú dva spôsoby, ako napísať túto slučku:

Prvá forma

pre<счетчик1> := <значение1>do<конечное_значение>robiť<оператор1>;

<счетчик1>zvýši o 1.

<значение1>je počiatočná hodnota počítadla. Môže to byť premenná alebo číslo.
<конечное_значение>: hneď ako hodnota<счетчик1>bude viac<конечное_значение>

Ak chcete do tela cyklu napísať niekoľko príkazov, použite začať a koniec.

A<счетчик1>, a<конечное_значение>, a<значение1>- premenné celá typu.

Najčastejšie sa ako počítadlo používa premenná i.

Druhá forma

pre<счетчик2> := <значение2>nadol<конечное_значение>robiť<оператор1>;

Po každej iterácii hodnota<счетчик2>zníži o 1.

<значение2>je počiatočná hodnota počítadla.
<конечное_значение>: hneď ako hodnota<счетчик2>bude menej<конечное_значение>, slučka je ukončená.

Dve dôležité poznámky:

  1. Cyklus sa opakuje, pokiaľ hodnota počítadla leží v segmente [hodnota; koncová_hodnota].
  2. Zmeňte hodnotu počítadla vo vnútri tela je zakázané! Tu je výstup kompilátora:

Riešenie problému:

Program example_for; var i, N: celé číslo; začať čítať (N); (predpokladajme, že sme zadali 10) for i:= 1 to N do write(i, " "); (počet opakovaní - 10 - 1 + 1 = 10) koniec.

Súhlasíte, tento kód je jednoduchší a stručnejší ako všetky predchádzajúce. A cyklovať pre- nie celkom obyčajný cyklus, nie je v ňom žiadna logická podmienka. Preto sa slučka s parametrom v programovaní nazýva syntaktický cukor. Syntaktický cukor sú doplnkami k syntaxi programovacieho jazyka, ktoré nepridávajú nové funkcie, ale robia jazyk príjemnejším pre ľudí.

Poďme vyriešiť pár problémov.

Pre 1. Sú dané celé čísla K a N (N > 0). Výstup N krát číslo K.

Zorganizujeme jednoduchý cyklus od 1 do požadovaného počtu.

Program pre 1; var K, N, i: celé číslo; začať čítať (K, N); pre i:= 1 až N do napíš(K, " "); (píšeme K oddelené medzerou) koniec.

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

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

Program pre 2; var A, B, i, počet: celé číslo; začať čítať (A, B); for i:= A to B do write(i, " "); (zapis cisla od najmensieho po najvacsie) pocet:= B - A + 1; (počítajte počet čísel) writeln; write("Pocet cisel - ", pocet); koniec.

Pre 9. Dané dve celé čísla A a B (A< B). Найти сумму квадратов всех целых чисел от A до B включительно.

Usporiadame rovnaký cyklus ako v predchádzajúcej úlohe, ale zároveň sčítame druhé mocniny všetkých čísel. Na výpočet štvorca použite funkciu.

Program pre 9; var A, B, i, S: celé číslo; začať čítať (A, B); S:= 0; (PascalABC to robí automaticky, ale ak máte iný kompilátor, odporúčame vám nastaviť premenné na nulu manuálne) for i:= A až B do S:= S + Sqr(i); (pridaj všetky štvorce) writeln; napíš("Súčet štvorcov - ", S); koniec.

Pre 13°. Je dané celé číslo N (> 0). Nájdite hodnotu výrazu 1,1 - 1,2 + 1,3 - ... (N členov, znamienka sa striedajú). Nepoužívajte podmienený operátor.

Aby sme zmenili znamienko, pri každej iterácii cyklu zmeníme hodnotu špeciálnej premennej na opačnú.

Program pre 13; var N, A, i: celé číslo; S: skutočné begin Zapis("N = "); readln(N); S: = 1,1; A:= 1; (Najskôr kladné) pre i:= 2 až N do (prvú iteráciu cyklu sme už urobili, takže začneme počítať od 2) begin A:= -A; (teraz záporné) S:= S + A * (1 + i / 10); (pridať) koniec; WriteIn(S:5:1); (Dajme jednu známosť pre zlomkovú časť) koniec.

Zatiaľ čo 1°. Sú uvedené kladné čísla A a B (A > B). Na segmente dĺžky A je umiestnený maximálny možný počet segmentov dĺžky B (bez presahov). Bez použitia násobenia a delenia nájdite dĺžku neobsadenej časti segmentu A.

Zakaždým odpočítajte B od A, kým A - B >= 0.

Program while1; var A, B: celé číslo; begin readln(A, B); pričom (A - B) >= 0 až A:= A - B; (Kým je rozdiel kladný, odčítame. Je potrebné poskytnúť variant s násobnosťou A a B, preto >=) napíšte(A); koniec.

Kým 4°.Je dané celé číslo N (> 0). Ak je to mocnina 3, potom výstup True, ak nie, výstup False.

Postupujeme takto: kým N je deliteľné 3, delíme N 3. Potom, ak N = 1, číslo je mocninou troch; ak N<>1, potom číslo nie je mocninou troch. Aby ste tento problém vyriešili, musíte vedieť, čo to je a ako fungujú.

Program while4; var N: celé číslo; begin readln(N); kým N mod 3 = 0 do N:= N div 3; (Pokiaľ je zvyšok delenia tromi nula, delte N 3) writeln(N = 1); (boolovský výraz) koniec.

To je na dnes všetko! Nezabudnite navštevovať našu stránku častejšie a kliknite na tlačidlá, ktoré sa nachádzajú pred komentármi.

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.

Operátor slučky s parametrom sa používa práve v prípadoch, keď je potrebné zorganizovať slučku s daným počtom opakovaní

pre <параметр_цикла>:=<начальное_знач> do <конечное_знач> robiť <оператор>;

pre <параметр_цикла>:=<конечное_знач> nadol <начальное_зна.> robiť <оператор>;

Príkaz, ktorý je telom cyklu, môže byť jednoduchý alebo zložený.

Parameter cyklu, ako aj rozsah jeho zmeny, môže byť len celočíselného alebo enumerovaného typu.

Parameter je opísaný spolu s ďalšími premennými.

Krok cyklu for je vždy konštantný a rovná sa "1" alebo "-1".

Zobrazte prvých desať kladných celých čísel

var i: celé číslo; //je zadané počítadlo

fori:=1to10do//keď je hodnota počítadla od 1 do 10, urobte nasledovné

writeln(i); //výstup hodnoty počítadla

vari,sucet:integer;

súčet:=0; //vynulovanie hodnoty premennej

fori:=10to99do//vyčíslenie dvojciferných kladných čísel

ak i mod 3=0 potom //násobnosť 3

sum:=sucet+i; //súčet predchádzajúcej hodnoty premennej a čísla zodpovedajúceho podmienke

Zobrazte súčin prvých desiatich kladných párnych čísel

vari,pr:integer;

pr:=1; //pri hľadaní produktu nie je počiatočná hodnota premennej 0, ale 1

pre i:=1 až 10 do

ak i mod 2=0 potom //určiť paritu

Dané dve celé čísla A a B (A< B). Вывести в порядке возрастания все целые числа, расположенные между A и B (в том числе A и B), a также количество N этих чисел .

var i,pr: celé číslo;

k:=0; //nula hodnotu premennej, čo znamená číslo

fori:=AtoBdo//vyčíslenie čísel z daného rozsahu

writeln(i); //výstup vo vzostupnom poradí

k:=k+1; // počítanie počtu čísel

writeln(k); //výstup sumy nastáva mimo cyklu, pretože vydané raz

Zadajte N rôznych čísel. Nájdite aritmetický priemer všetkých čísel.

Varn,i,a:integer;

Pre i:=1 až N do

Writeln("aritmetický priemer= ",s/n:4:2);

Príkaz Loop with while ... Do predbežnej podmienky

Príkaz while ... do je navrhnutý tak, aby implementoval slučky s podmienkou.

Pred začiatkom každého kroku sa kontroluje stav tela cyklu while. Preto, ak podmienka nie je splnená okamžite, telo slučky sa ignoruje a riadenie sa prenesie na operátora bezprostredne za telom slučky.

Kontaktovanie operátorazatiaľ čo... robiť sa prekladá ako „bye...to do“ a vyzerá takto:

zatiaľ čo <условие> robiť <оператор>

Cyklus while zahŕňa nasledujúci algoritmus: kým je podmienka pravdivá, vykonajú sa príkazy tela cyklu.

Samotná podmienka môže byť boolovská konštanta, premenná alebo boolovský výraz.

Pri písaní slučiek s podmienkou majte na pamäti nasledovné.

    na to, aby slučka mala niekedy šancu skončiť, obsah jej tela musí nevyhnutne ovplyvniť stav slučky.

    podmienka musí pozostávať z platných výrazov a hodnôt definovaných pred prvým spustením tela slučky.

Ak je podmienka cyklu nepravdivá, cyklus sa nikdy nevykoná!

Vo väčšine programov je potrebné opakovane vykonávať nejaký príkaz (alebo blok príkazov). Na organizáciu takýchto konštrukcií možno použiť príkazy slučky. Programovací jazyk Pascal používa nasledujúce typy príkazov slučky: for, while, repeat (PascalABC.NET používa aj operátor slučky foreach).

Blok príkazov, ktorý je potrebné vykonať opakovane, sa nazýva telo slučky.

pre výpis v Pascale

Ak počet opakovaní tela cyklus je známy vopred, potom sa použije príkaz for loop, ktorý sa tiež často označuje ako príkaz cyklu s parametrom.

Príkaz for pozostáva z dvoch častí: tela cyklu a hlavičky, ktorá je určená na popis počiatočných a konečných hodnôt parametra cyklu, ako aj možnosti jeho zmeny.

V závislosti od smeru zmeny parametra cyklu (zvýšenie - na alebo zníženie - nadol) v jazyku Pascal môže byť operátor cyklu for napísaný v jednej z dvoch foriem:

  • pre parameter := počiatočná_hodnota do koncovej_hodnoty do
  • operátor;
  • pre parameter := počiatočná_hodnota nadol po koncovú_hodnotu do
  • operátor;

Premenná parametra slučky môže mať akýkoľvek ordinálny typ. V tomto prípade počiatočné a konečné hodnoty musia mať typ kompatibilný s typom premennej parametra.

Uvažujme o práci cyklu for.

Pred začatím vykonávania príkazu cyklu sa vypočíta počiatočná hodnota priradená premennej parametra a konečná hodnota. Potom sa cyklicky vykonávajú nasledujúce operácie:

  1. Porovnáva aktuálnu hodnotu parametra s konečnou hodnotou.
  2. Ak je parameter podmienky end_value pravdivý, potom sa vykoná telo slučky, inak sa príkaz for ukončí a riadenie sa prenesie do príkazu nasledujúceho po slučke.

Pozor: v jazyku Pascal sa parameter slučky bez ohľadu na zvýšenie alebo zníženie zakaždým zmení o jeden.

Úloha. Zobrazte zoznam druhých mocnín celých čísel od 10 do 1.

Riešenie. V nastolenom probléme sa parameter cyklu znižuje.

(útržok kódu programu)

  • pre i:= 10 až 1 do
  • writeln(i:2, " ", i * i);

Pozor: ak je potrebné použiť viac ako jeden príkaz v tele cyklu, potom sa použije zložený príkaz (zátvorky operátora begin a end ).

Príklad 2. Známky žiadateľa v štyroch skúškach sú známe. Určte počet bodov, ktoré získali.

Úloha. Známky uchádzača v štyroch skúškach sú známe. Určte počet bodov, ktoré získali.

Riešenie. V programe použijeme operátor slučky s parametrami, keďže je známy počet opakovaní vykonaných akcií (žiadateľ dostal presne štyri známky)

(útržok kódu programu)

  • s:= 0;
  • pre i:= 1 až 4 do
  • začať
  • readln(označiť);
  • s:= s + značka;
  • writeln(y);