Dělejte příklady. Cykly. Operátory smyčky pro, while, do...while

dělat smyčky while a foreach

udělat smyčku . . zatímco

do...během smyčka v C# je to verze while s kontrolou post-condition. To znamená, že stav smyčky je zkontrolován po provedení těla smyčky. Cykly do...while jsou proto užitečné v situacích, kdy musí být blok příkazů proveden alespoň jednou. Následuje obecná forma příkazu cyklu do-while:

do (operátory; ) while (podmínka);

Pokud existuje pouze jeden operátor, jsou složené závorky v této formě zápisu volitelné. Často se však používají k tomu, aby byl konstrukt do-while čitelnější a neměly by být zaměňovány s konstrukcí cyklu while. Cyklus do-while běží, dokud je podmíněný výraz pravdivý. Příkladem použití cyklu do-while je následující program, který vypočítá faktoriál čísla:

Použití systému; pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; jmenný prostor ConsoleApplication1 ( class Program ( static void Main(string args) ( try ( // Výpočet faktoriálu čísla int i, výsledek = 1, num = 1; Console.WriteLine("Zadejte číslo:"); i = int .Parse(Console .ReadLine());

foreach smyčka

foreach smyčka slouží pro cyklický přístup k prvkům kolekce, což je skupina objektů. C# definuje několik typů kolekcí, z nichž každý je pole. Následuje obecná forma příkazu cyklu foreach:

foreach (napište do kolekce název_proměnné smyčky) příkaz;

Zde zadejte název_proměnné_cyklu označuje typ a název řídicí proměnné smyčky, která přijímá hodnotu dalšího prvku kolekce v každém kroku smyčky foreach. A kolekce označuje cyklicky dotazovanou kolekci, která dále představuje pole. Proto typ proměnné smyčky musí odpovídat typu prvku pole. Kromě toho lze typ označit klíčovým slovem var. V tomto případě kompilátor určí typ proměnné smyčky na základě typu prvku pole. To může být užitečné pro práci s určitými typy dotazů. Ale zpravidla je typ specifikován explicitně.

Příkaz foreach loop funguje následovně. Když se smyčka spustí, vybere se první prvek pole a přiřadí se proměnné smyčky. V každém následujícím kroku iterace je vybrán další prvek pole a uložen do proměnné smyčky. Smyčka končí, když jsou vybrány všechny prvky pole.

Smyčka foreach vám umožňuje procházet každým prvkem kolekce (objekt, který představuje seznam dalších objektů). Technicky vzato, aby bylo něco považováno za kolekci, musí podporovat rozhraní IEnumerable. Příklady kolekcí zahrnují pole C#, třídy kolekcí z oboru názvů System.Collection a vlastní třídy kolekcí.

Smyčky se používají k opakování částí kódu znovu a znovu. Schopnost opakovat určité fragmenty kódu je jedním z hlavních a zároveň důležitých úkolů, které musí programátor vyřešit. Většina programů nebo webových stránek používá smyčky, například k zobrazení informací o novinkách nebo oznámení. To znamená, že v takových úlohách je nutné neustále provádět operace čtení a zápisu, a aby nedošlo k duplikování stejného kódu, na záchranu přicházejí smyčky. Smyčky lze poměrně snadno deklarovat v kódu, ale plní složité úkoly pouhým jednoduchým opakováním.

Chcete-li se začít učit o smyčkách, ujistěte se, že dobře rozumíte konceptu v programovacím jazyce C. Protože to bude důležité při používání cyklů, protože v cyklech, stejně jako v cyklech, existují podmíněné výrazy. V jazyce C existují tři typy cyklů: for, while, do while. Každý z nich má své specifické aplikace. Všechny jsou popsány níže.

Nejčastěji používanou smyčkou je smyčka for, jejíž struktura je uvedena níže:

For (/*inicializace proměnné; podmínka; změna hodnoty proměnné*/) ( // tělo cyklu (zde je kód, který se bude opakovat) )

Inicializace proměnných umožňuje buď deklarovat proměnnou a přiřadit jí hodnotu, nebo přiřadit hodnotu existující proměnné. Za druhé, hodnota této proměnné říká programu, zda je podmínka smyčky pravdivá nebo nepravdivá. A dokud je podmínka smyčky pravdivá, měla by se smyčka nadále opakovat. Řídicí proměnná se musí nějak změnit, jinak bude smyčka nekonečná, můžete ji aktualizovat například takto: i++, i = i + 2, nebo dokonce i = random(5) . Vezměte prosím na vědomí, že každá sekce v záhlaví smyčky je oddělena středníkem, což je velmi důležité. Všimněte si také, že každá z sekcí může být prázdná, ačkoli středníky by tam měly být. Pokud podmínka není prázdná, vyhodnotí se jako pravdivá a smyčka se bude provádět, dokud něco neučiní podmínku smyčky nepravdivou. Podívejme se na jednoduchý příklad použití cyklu for.

#zahrnout int main() ( int i; /* Cyklus poběží, dokud i< 10, при этом после каждой итерации переменная i будет инкрементироваться(увеличиваться на 1)*/ for (i = 0; i < 10; i++) { /* Имейте ввиду что условие проверяется перед каждым повторением, то есть работа цикла остановится когда переменная i будет равна 10*/ printf("%d\n", i); } getchar(); }

Ve skutečnosti výsledek programu:

0 1 2 3 4 5 6 7 8 9

Tento program je velmi jednoduchým příkladem použití smyčky. proměnné i je přiřazena nula, a když je i menší než 10, na obrazovce se vytiskne hodnota proměnné i, načež se k proměnné i přidá jednička a vše se opakuje, dokud se podmínka nestane nepravdivou. Mějte na paměti, že hodnota proměnné i se zvýší po prvním spuštění kódu v těle cyklu.

Smyčka while je velmi jednoduchá smyčka, zde je její struktura:

While (/*podmínka*/) ( // tělo smyčky – zde je kód, který je třeba opakovat)

Tělo smyčky se spustí, pokud je podmínka smyčky pravdivá. Podmínkou je booleovský výraz, například x == 1 nebo x! = 7 (x se nerovná 7). To znamená, že podmínkou může být naprosto cokoliv – jakákoliv kombinace logických výrazů. Zde je příklad složené podmínky - x == 3 || x > 10 , tato podmínka bude pravdivá, pokud se x rovná třem nebo x je větší než 10. Všimněte si, že zatímco má sekci inicializace nebo sekci modifikace řízené proměnné, takže před použitím této smyčky musíte nejprve deklarovat proměnnou, která bude testován v podmínkové smyčce a v těle smyčky změňte hodnotu této proměnné. Ve skutečnosti se podívejme na jednoduchý příklad pomocí while cyklu:

#zahrnout int main() ( int var = 0; /* nezapomeňte nejprve deklarovat proměnnou */ while (var< 10) { /* пока значение переменной var меньше 10 */ printf("%d\n", var); var++; /* обновляем значение в переменной var(если этого не делать, то условие цикла всегда будет истинным, тогда цикл будет - бесконечным) */ } getchar(); }

Podívali jsme se tedy na další příklad použití smyček a jak vidíte, v tomto příkladu není nic složitého. Jen si představte, že smyčka vždy začne opakovat kód, který je v těle smyčky. Jakmile je proveden poslední příkaz v těle smyčky, zkontroluje se podmínka smyčky. Pokud je podmínka stále pravdivá, smyčka pokračuje v práci, a pokud je podmínka nepravdivá, smyčka se opustí.

Existuje další typ smyčky - do while. Tato smyčka je užitečná, když potřebujete provést kód alespoň - 1krát. Podívejme se na jeho strukturu:

Proveďte ( // tělo smyčky ) while (/*podmínka*/);

Struktura je velmi jednoduchá, jak vidíte, podmínka je na konci smyčky a podle toho bude podmínka zkontrolována po provedení kódu v těle smyčky. Všimněte si, že podmínka je testována na konci cyklu, nikoli na začátku, takže blok kódu v těle cyklu bude proveden alespoň jednou. Pokud je podmínka pravdivá, cyklus skočí zpět na začátek a provede jej znovu. Cyklus do while je téměř stejný jako cyklus while, kromě toho, že je zaručeno, že tělo cyklu bude alespoň jednou vykonáno. Cyklus while nejprve zkontroluje podmínku a poté provede blok kódu v těle, pokud je podmínka samozřejmě pravdivá, zatímco smyčka do while nejprve provede kód v těle cyklu a poté zkontroluje podmínku, a pokud je pravda, pak pokračuje v běhu . Příklad smyčky do while je uveden níže:

#zahrnout int main() ( int i = 0; do ( /* Vytiskne zprávu a skončí */ printf("Ahoj! Dělám smyčku while\n"); ) while (i != 0); getchar() ;

Všimněte si středníku na konci smyčky, středník byste měli vždy umístit jako ve výše uvedeném příkladu. Velmi často tento středník není zahrnut, což vede k chybě kompilace. Pouze tento cyklus končí středníkem, ostatní cykly nemají na konci nic kromě uzavírací závorky. Všimněte si, že ve výše uvedeném příkladu bude tato smyčka provedena jednou, protože zpráva se nejprve vytiskne a poté se zkontroluje stav smyčky.

Často je při programování úloh nutné, aby stejná sekvence příkazů byla provedena několikrát. Tento proces se nazývá cyklický. Algoritmus, ve kterém se určitá sekvence příkazů několikrát opakuje s novými vstupními daty, se nazývá cyklický.

K implementaci cyklického procesu používají programovací jazyky smyčky. Programovací jazyk C/C++ má snadno použitelné operátory smyček.

2. Typy smyčkových operátorů v C++

V C++ existují 3 typy operátorů smyček:

  • pro smyčku;
  • while smyčka s předpokladem;
  • do... while smyčka s postcondition.

Každý z operátorů smyčky má své vlastní aplikační funkce. Kterýkoli z výše uvedených příkazů smyčky může být nahrazen jiným.

3. Pro smyčku. Obecná forma příkazu cyklu for

V C++ může mít cyklus for velmi širokou implementaci a aplikaci. Smyčce for se také říká smyčka s parametrem.

Obecná forma příkazu cyklu for je:

pro ( inicializace ; výraz ; zvýšení ) { // ... }
  • inicializace – operace přiřazení, ve které se nastavuje počáteční hodnota proměnné smyčky. Tato proměnná je čítač, který řídí činnost smyčky. Počet proměnných řídících cyklus for může být dvě nebo více;
  • výraz– podmíněný výraz, který kontroluje hodnotu proměnné smyčky. V této fázi je určeno další provedení cyklu;
  • zvýšení– určuje, jak se změní hodnota proměnné cyklu po každé iteraci.

Cyklus for běží až do hodnoty výraz rovná se pravda.

Jakmile se hodnota výrazu stane nepravdivou, cyklus zastaví provádění a provede se příkaz, který následuje po cyklu for.

4. Příklady použití operátoru smyčky for Příklad 1

Najděte součet všech celých čísel od 100 do 300.// součet čísel od 100 do 300<=300; i++) sum = sum + i; // sum = 40200

int součet; int i; součet = 0; pro (i = 100; i Příklad 2 Dané přirozené číslo n

. Vypočítejte částku:

Fragment kódu, který řeší tento problém.// s = 1 + 1/2 + 1/3 + ... + 1/n int n; plovoucí s = 0; int i;// zadejte hodnotu n<=n; i++) s = s + 1.0/i; // s = 2.08333

n = 4; pro (i = 1; i

V tomto příkladu se pro získání reálné hodnoty zadá místo čísla 1 (celočíselný typ) číslo 1.0 (reálný typ). Provoz divize

dává skutečný výsledek. Příklad 3

. Vypočítejte částku:

Vypočítat součet

plovák s; int i; s = 0; for (i=50; i>=1; i--) s = i + Math::Sqrt(s); s = Math::Sqrt(s); // s = 1,7579 V tomto příkladu hodnota čítače i

ve smyčce for se mění v sestupném pořadí. Tato hodnota se sníží o 1 každou iteraci cyklu. Při řešení takových problémů se musí hodnota čítače smyčky změnit z poslední na první hodnotu. V tomto případě od 50 do 1.

Při výpočtech byla použita funkce Sqrt() z knihovny Math.

5. Jaké možnosti existují pro implementaci cyklu for?

Smyčce for může chybět některý z prvků záhlaví smyčky:

  • inicializace;
  • výraz;
  • růst

Příklad operátor smyčky for, který má 2 řídicí proměnné. Najděte významy produktu:

D = (1 + cos(9)) (2 + cos(8)) … (9 + cos(1))

. Vypočítejte částku:

// D = (1 + cos(9))*(2 + cos(8))* ... *(9 + cos(1)) int i, j; plovák d; d = 1; pro (i = 1, j = 9; i<=9; i++, j--) d = d * (i + Math::Cos(j));

Ve výše uvedeném fragmentu kódu používá cyklus for dvě proměnné, které mění jejich hodnotu ( V tomto příkladu hodnota čítače , j ).

6. Zatímco smyčka. Obecná forma

Cyklus while se nazývá smyčka předpokladů. Obecná forma while smyčky je následující:

zatímco ( výraz ) { // sekvence operátorů // ... }

Kde výraz– jakýkoli platný výraz v C++. Posloupnost příkazů se provádí až do podmíněného výraz vrací true . Jakmile výraz se rovná false , provádění cyklu while je ukončeno a řízení je přeneseno na další příkaz po cyklu while.

7. Příklady použití operátoru smyčky while

4. Příklady použití operátoru smyčky for Vzhledem k reálnému číslu A. Najděte nejmenší Dané přirozené číslo, při kterém

Úvahy. Na začátku je hodnota součtu menší než hodnota A. Jak každá iterace prochází, hodnota součtu se postupně zvyšuje. V určitém okamžiku (v určité hodnotě Dané přirozené číslo) tato částka bude vyšší než hodnota A. Tento okamžik (tj Dané přirozené číslo) je třeba opravit. K výpočtu Dané přirozené číslo, smyčka while je vhodná.

. Vypočítejte částku:

plovák a; int n; plovoucí součet; // zadejte hodnotu a a = 2,2; n = 1; součet = 1,0/n; zatímco (součet< a) { n++; sum = sum + 1.0/n; } // n = 5; sum = 2.283334

int součet; int i; součet = 0; pro (i = 100; i Je dáno přirozené číslo. Určete v něm počet číslic 3.

. Vypočítejte částku:

// počet číslic 3 v čísle int n; // dané přirozené číslo int k; // počet číslic 3 v čísle int t, d; // další proměnné int n; plovoucí s = 0; int i; n = 12343; t = n; // vytvořit kopii n k = 0; zatímco (t>0) (d = t % 10; // výběr poslední číslice if (d == 3) k++; t = t/10;// snížení bitové hloubky čísla

) // k = 2

V tomto příkladu bude hodnota původního čísla při každé iteraci vydělena 10. Bitová hloubka čísla se tak sníží. Při každé iteraci se pomocí % operace jazyka C++ vezme zbytek dělení 10, to znamená, že se určí poslední číslice čísla. Pokud je tato číslice 3, pak se počítadlo k zvýší o 1.

8. Obecná forma operátoru smyčky do...while

Smyčku do...while je vhodné použít v případech, kdy je potřeba provést iteraci alespoň jednou. Na rozdíl od cyklů for a while je ve smyčce do...while podmínka kontrolována při opuštění smyčky (nikoli při vstupu do smyčky). Smyčka do...while se také nazývá smyčka postcondition.

Obecná forma příkazu cyklu do...while je: // sekvence operátorů dělat ( výraz );

Kde výraz– podmíněný výraz, který kontroluje hodnotu proměnné smyčky. V této fázi je určeno další provedení cyklu.

Složené závorky v této smyčce jsou volitelné.

Cyklus funguje následovně. Nejprve se provede tělo smyčky. Poté se hodnota zkontroluje výraz(podmíněný výraz). Pokud je hodnota výraz je true (pravda), tělo smyčky se provede znovu. Jednou hodnotu výraz stane false , provádění smyčky se zastaví

9. Příklady použití operátoru smyčky do...while

Příklad. Pomocí cyklu do...while najděte hodnotu součtu:

S = 1 + 3 + … + 99

. Vypočítejte částku:

// s = 1 + 3 + ... + 99 int t; int s; s = 0; t = 1; do ( s = s + t; t = t + 2; ) zatímco (t<=99); // s = 2500
10. Vnořené smyčky. Příklady použití

Vnořené smyčky lze použít například při práci s dvojrozměrnými (vícerozměrnými) poli (nulování pole, počítání součtů, součinů atd.).

4. Příklady použití operátoru smyčky for Vypočítat produkt

D = 1 · (1 + 2) · (1 + 2 + 3) · … · (1 + 2 + … + 9)

. Vypočítejte částku:

// D = 1 * (1+2) * (1+2+3) * ... * (1+2+...+9) plovák d; // výsledkem je produkt int i, j; // čítače smyček int s; // další proměnná d = 1; pro (i = 1; i<=9; i++) { s = 0; for (j = 1; j<=i; j++) s = s + j; d = d * s; } // d = 2.571912E+09

V tomto příkladu ve smyčce for s čítačem V tomto příkladu hodnota čítače běžící smyčka for s čítačem j .

int součet; int i; součet = 0; pro (i = 100; i Je dáno dvourozměrné pole celých čísel o velikosti 6x9. Zapište hodnotu 5 do všech prvků pole.

int M; // dvourozměrné pole celých čísel int i, j; pro (i=0; i<6; i++) for (j=0; j<9; j++) M[i][j] = 5;
11. Co je to nekonečná smyčka?

Nekonečná smyčka je smyčka, která nikdy nekončí.

Při programování cyklických procesů může programátor omylem napsat kód smyčky, který nikdy nekončí.

Navíc někdy chcete, aby smyčky obsahovaly speciální ukončovací kód pomocí příkazu break.

4. Příklady použití operátoru smyčky for Nekonečná smyčka s příkazem for:

pro (; ;) ( // sekvence operátorů C++. Prohlášení o výběru přepínače

Štítky: C cykly. C smyčky. Smyčka s dodatečnou podmínkou. Smyčka s předpokladem. Cyklujte s písařem. zatímco. dělat chvíli. pro. přerušení. pokračovat

Zavedení. Smyčky s předpokladem.

Při řešení praktických problémů neustále vyvstává potřeba opakovat akci stanovený početkrát, nebo dokud není dosaženo určité podmínky. Například zobrazení seznamu všech uživatelů, dlaždice roviny s texturou, provádění výpočtů na každém prvku pole dat atd. V C se pro tyto účely používají tři typy smyček: s předpoklad, post-stav a cyklus pro s počítadlem (ačkoli se jedná o podmíněný název, protože počítadlo nemusí být).

Libovolná smyčka se skládá z těla a kontroly podmínky, za které by měla být tato smyčka ukončena. Tělo smyčky je sada instrukcí, které se musí opakovat. Každé opakování cyklu se nazývá iterace.

Zvažte smyčku s podmínkou.

Int i = 0; zatímco (tj< 10) { printf("%d\n", i); i++; }

Tato smyčka běží tak dlouho, dokud platí podmínka zadaná po klíčovém slově while. Tělo smyčky je dvouřádkové, jeden vytiskne číslo, druhý jej změní. Tato smyčka bude samozřejmě provedena 10krát a zobrazí se
0
1
2
3
a tak dále až do 9.

Je velmi důležité, aby byla v určitém okamžiku splněna podmínka pro opuštění smyčky, jinak dojde ke smyčce a program se nedokončí. Například

Int i = 0; zatímco (tj< 10) { printf("%d\n", i); }

Tato smyčka nemění proměnnou i, která se používá k určení podmínky zastavení, takže smyčka neskončí.

Int i = 0; while (i > 0) ( printf("%d\n", i); i++; )

V tomto programu se smyčka samozřejmě ukončí, ale kvůli nesprávné akci se provede mnohem více než 10krát. Protože C nemonitoruje přetečení proměnné, budete muset počkat, dokud proměnná přeteče a nebude menší než nula.

Int i; zatímco (tj< 10) { printf("%d\n", i); i++; }

Tento příklad má nedefinované chování. Protože proměnná i není inicializována předem, ukládá odpadky, předem neznámou hodnotu. S různým obsahem proměnné i se chování změní.

Pokud tělo cyklu while obsahuje jeden příkaz, lze složené závorky vynechat.

Int i = 0; zatímco (tj< 10) printf("%d\n", i++);

Zde inkrementujeme proměnnou i, když zavoláme funkci printf. Tomuto stylu kódování je třeba se vyhnout. Absence složených rovnátek, zejména na začátku tréninku, může vést k chybám. Kód je navíc hůře čitelný a závorky navíc výpisy příliš nenadýmají.

Smyčky s dodatečnými podmínkami.

Smyčka postcondition se liší od smyčky while v tom, že podmínka je zkontrolována po dokončení smyčky, což znamená, že smyčka se bude opakovat alespoň jednou (na rozdíl od smyčky while, která nemusí být provedena vůbec). Syntaxe smyčky

Do (tělo smyčky) while(podmínka);

Předchozí příklad s použitím smyčky do by vypadal takto

Int i = 0; do ( printf("%d\n", i); i++; ) while(i< 10);

Podívejme se na příklad použití smyčky s postcondition a precondition. Předpokládejme, že potřebujeme integrovat funkci.

Rýže. 1 Numerická integrace funkce∫ a b f x d x

Integrál je součet infinitezimálů. Můžeme reprezentovat integrál jako součet a jednoduše nahradit nekonečně malé hodnoty malými hodnotami.

∫ a b f x d x = ∑ i = a b f i h

Vzorec ukazuje, že jsme vlastně rozdělili plochu pod grafem na mnoho obdélníků, kde výška obdélníku je hodnota funkce v bodě a šířka je náš krok. Sečtením ploch všech obdélníků tak získáme hodnotu integrálu s určitou chybou.

left rectangles" src="/images/c_loop_rectangles_left.png" alt="Numerická integrace funkce metodou
levé obdélníky"> Рис. 2 Численное интегрирование функции методом!}
levé obdélníky

Nechť požadovaná funkce je x 2 . Budeme potřebovat následující proměnné. Nejprve sumární akumulátor pro uložení integrálu. Za druhé, levá a pravá hranice aab, zatřetí, krok h. Potřebujeme také aktuální hodnotu argumentu funkce x.

K nalezení integrálu je nutné vycházet A na b s některými kroky h a přičtěte k součtu plochu obdélníku se stranami f(x) A h.

#zahrnout #zahrnout int main() ( dvojitý součet = 0,0; dvojitý a = 0,0; dvojitý b = 1,0; dvojitý h = 0,01; dvojitý x = a; while (x< b) { sum += x*x * h; x += h; } printf("%.3f", sum); getch(); }

Výstup programu 0,328.

∫ 0 1 x 2 d x = x 3 3 |

0 1 = 1 3 ≈ 0,333

Když se podíváte na graf, můžete vidět, že pokaždé, když najdeme hodnotu funkce v levém bodě. Proto se tato metoda numerické integrace nazývá metoda levého obdélníku. Podobně můžete vzít správnou hodnotu. Pak to bude správná metoda obdélníků.< b) { x += h; sum += x*x * h; } Zatímco (x
pravé obdélníky" src="/images/c_loop_rectangles_right.png" alt="Numerická integrace funkce metodou"> Рис. 3 Численное интегрирование функции методом!}
pravé obdélníky" src="/images/c_loop_rectangles_right.png" alt="Numerická integrace funkce metodou

pravé obdélníky

Částka se v tomto případě bude rovnat 0,338. Metoda levého a pravého obdélníku není příliš přesná. Vlastně jsme aproximovali hladký graf monotónně rostoucí funkce pomocí histogramu. Pokud trochu přemýšlíte, pak lze aproximaci provést nejen sečtením obdélníků, ale také sečtením lichoběžníků.
trapezium" src="/images/c_loop_integral_trapezium.png" alt="Numerická integrace funkce metodou"> Рис. 4 Численное интегрирование функции методом!}
trapezium" src="/images/c_loop_integral_trapezium.png" alt="Numerická integrace funkce metodou

lichoběžník

Lichoběžníková aproximace je vlastně dílčí aproximace křivkami prvního řádu (ax+b). Body na grafu spojujeme pomocí úseček. Můžete to zkomplikovat tím, že body spojíte nikoli segmenty, ale kousky paraboly, pak to bude Simpsonova metoda. Pokud věci ještě zkomplikujeme, dojdeme k interpolaci spline, ale to je další, velmi dlouhý rozhovor.

Vraťme se k našim ovečkám. Uvažujme 4 cykly.< 3) { printf("%d ", i); } int i = 0; while (++i < 3) { printf("%d ", i); } int i = 0; do { printf("%d ", i); } while(i++ < 3); int i = 0; do { printf("%d ", i); } while(++i < 3);

Int i = 0; zatímco (i++

Často se stává, že potřebujeme opustit smyčku, aniž bychom čekali na vyvolání příznaku nebo na změnu hodnoty proměnné. K těmto účelům slouží operátor přerušení což způsobí, že program opustí aktuální smyčku.

Pojďme vyřešit jednoduchý problém. Uživatel zadává čísla, dokud není zadáno číslo 0, po kterém se zobrazí největší zadané. Je v tom háček. Není známo, kolik čísel uživatel zadá. Vytvoříme tedy nekonečnou smyčku a pomocí operátoru ji opustíme přerušení. Uvnitř smyčky obdržíme data od uživatele a vybereme maximální počet.

#zahrnout #zahrnout int main() ( int num = 0; int max = num; printf("Chcete-li skončit, zadejte 0\n"); /*nekonečná smyčka*/ while (1) ( printf("Zadejte prosím číslo: "); scanf("%d", &num /*podmínka pro ukončení smyčky*/ if (num == 0) ( break; ) if (num > max) ( max = num; ) ) printf("max počet byl %); d ", max); getch(); )

Dovolte mi připomenout, že v C není žádný speciální booleovský typ. Místo toho se používají čísla. Nula je nepravda, všechny ostatní hodnoty jsou pravdivé. Cyklus while(1) poběží navždy. Jediným výstupním bodem z něj je podmínka

If (počet == 0)

V tomto případě opustíme smyčku pomocí přerušení; Pro začátek nastavíme 0 jako maximum Uživatel zadá číslo, po kterém zkontrolujeme, zda je nula nebo ne. Pokud není nula, pak ji porovnáme s aktuálním maximem.

Nekonečné smyčky se používají poměrně často, protože vstupní data nejsou vždy známa předem, nebo se mohou za běhu programu měnit.

Když potřebujeme přeskočit tělo smyčky, ale pokračovat v provádění smyčky, použijeme operátor pokračovat. Jednoduchý příklad: uživatel zadá deset čísel. Najděte součet všech kladných čísel, která zadal.

#zahrnout #zahrnout int main() ( int i = 0; int positiveCnt = 0; float sum = 0,0f; float input; printf("Zadejte 10 čísel\n"); while (i< 10) { i++; printf("%2d: ", i); scanf("%f", &input); if (input <= 0.0) { continue; } sum += input; positiveCnt++; } printf("Sum of %d positive numbers = %f", positiveCnt, sum); getch(); }

Příklad se zdá poněkud přitažený za vlasy, i když obecně odráží význam operátora pokračovat. V tomto příkladu proměnná pozitivníCnt je počítadlo kladných čísel, součetčástka, a vstup- dočasná proměnná pro zadávání čísel.

Zde je další příklad. Je nutné, aby uživatel zadal celé číslo větší než nula a menší než 100. Dokud nebude zadáno požadované číslo, bude program pokračovat v dotazování.

Proveďte ( printf("Zadejte prosím číslo: "); scanf("%d", &n); if (n< 0 || n>100) ( printf("špatné číslo, zkuste to znovu\n"); pokračovat; ) else ( break; ) ) while (1);

pro smyčku

Jednou z nejčastěji používaných je smyčka čítače. pro. Jeho syntaxe

Pro (<инициализация>; <условие продолжения>; <изменение счётчика>){ <тело цикла> }

Vytiskněme například druhé mocniny prvních sta čísel.

Int i; pro (i = 1; i< 101; i++) { printf("%d ", i*i); }

Jednou ze skvělých věcí na smyčce for je, že může pracovat s více než jen s celými čísly.

číslo plováku; for (num = 5,3f; num > 0f; num -= 0,2) ( printf("%.2f ", num); )

Tato smyčka vytiskne čísla od 5,3 do 0,1. Smyčce for mohou chybět některé „bloky“ kódu, jako je chybějící inicializace, testování (pak se smyčka stane nekonečnou) nebo změna čítače. Zde je příklad s integrálem realizovaným pomocí čítače pro

#zahrnout #zahrnout int main() ( dvojitý součet = 0,0; dvojitý a = 0,0; dvojitý b = 1,0; dvojitý h = 0,01; dvojitý x; for (x = a; x< b; x += h) { sum += x*x * h; } printf("%.3f", sum); getch(); }

Podívejme se na kus kódu

Dvojité x ; pro (x = a; x< b; x += h) { sum += x*x * h; }

Dá se to takto změnit

Double x = a; pro(;x< b; x+=h) { sum += x*x*h; }

Navíc pomocí operátora přerušení, můžete odstranit podmínku a napsat

Dvojité x; for (x = a;; x += h)( if (x>b)( break; ) součet += x*x*h; )

Double x = a; for (;;)( if (x > b)( break; ) součet += x*x*h; x += h; )

Navíc pomocí operátoru "," můžete přesunout některé akce

Dvojité x ; pro (x = a; x< b; x += h, sum += x*x*h) ;

POZNÁMKA: I když je to možné, nedělejte to! To zhoršuje čitelnost kódu a vede k jemným chybám.

Pojďme vyřešit nějaký složitější praktický problém. Mějme funkci f(x). Najdeme na segmentu maximum jeho derivace. Jak numericky najít derivaci funkce? Samozřejmě, podle definice). Derivace funkce v bodě je tangens tangens úhlu.

F x' = d x d y

Vezmeme bod na křivce se souřadnicemi (x; f(x)), posuneme se o krok h dopředu, dostaneme bod (x+h, f(x+h)), derivace bude

D x d y = f (x + h) - f x (x + h - x) = tan α

Tedy poměr malého přírůstku funkce k malému přírůstku argumentu. Pozorný čtenář se může ptát, proč se ve funkci posouváme dopředu a ne dozadu. No pojďme zpátky

D x d y = f x - f (x - h) h = tan β

Vezmeme-li průměr těchto dvou hodnot, dostaneme

F (x + h) - f (x - h) 2h

Obecně se nyní úkol stává triviálním: jdeme od bodu A k věci b a najděte minimální hodnotu derivátu a také bod, ve kterém derivát tuto hodnotu nabývá. K vyřešení budeme potřebovat, stejně jako v problému s integrálem, proměnné pro hranice oblasti hledání A A b, aktuální hodnota x a krok h. Kromě toho je vyžadována maximální hodnota maxVal a koordinovat maxX tuto maximální hodnotu. Chcete-li pracovat, vezměte funkci x sin x

#zahrnout #zahrnout #zahrnout int main() ( double a = 0; double b = 3,0; double h = 0,001; double h2 = h * 2,0; double maxVal = a*sin(a); double maxX = a; double curVal; double x; // Projdeme celou oblast od a do b // a hledáme maximum první derivace // ​​Použijte funkci x*sin(x) pro (x = a; x< b; x += h) { curVal = ((x+h)*sin(x+h)-(x-h)*sin(x-h))/h2; if (curVal >maxVal) ( maxVal = curVal; maxX = x; ) ) printf("max hodnota = %.3f při %.3f", maxVal, maxX);

getch(); )

Na výstupu program vytvoří maximální hodnotu = 1,391 při 1,077

Numerické řešení dává stejné (v rámci chyby) výsledky jako náš program.

Vnořené smyčky

#zahrnout #zahrnout #zahrnout Podívejme se na příklad, kde jsou smyčky vnořeny do sebe. Ukážeme si násobilku.< 11; i++) { // Выводим строку из произведения i на j for (j = 1; j < 11; j++) { printf("%4d", i*j); } // После чего переходим на новую строку printf("\n"); } getch(); }

int main() ( int i, j; // Pro každé i pro (i = 1; i V tomto příkladu hodnota čítače V tomto příkladu v první smyčce přes proměnnou j vnořená druhá smyčka přes proměnnou V tomto příkladu hodnota čítače. Posloupnost akcí je následující: nejprve vstoupíme do cyklu pomocí V tomto příkladu hodnota čítače, po tom pro proud

Čísla se vypisují 10krát za sebou. Poté musíte přejít na nový řádek. Nyní vypíšeme pouze prvky pod hlavní úhlopříčkou< 11; i++) { for (j = 1; j < 11; j++) { if (j >Pro (i = 1; i

i) ( break; ) printf("%4d", i*j); přerušení) printf("\n"); )

Čísla se vypisují 10krát za sebou. Poté musíte přejít na nový řádek. Nyní vypíšeme pouze prvky pod hlavní úhlopříčkou< 11; i++) { for (j = 1; j <= i; j++) { printf("%4d", i*j); } printf("\n"); }

Jak vidíte, operátor

umožňuje opustit pouze aktuální smyčku. Tento příklad by se dal přepsat následovně V tomto případě použijeme první čítač smyček ve vnořené smyčce. Výukový program Ru-Cyrl 18 Sypačov S.S. 1989-04-14

[e-mail chráněný]

Štěpán Sypačov

studentů

Na začátku cyklu do while je napsáno vyhrazené slovo do následované složenými závorkami, které lze vynechat, pokud je v těle cyklu do while použit jeden příkaz. Po uzavírací složené závorce, která označuje konec těla smyčky do while, následuje podmínka smyčky do while, za kterou musíte vložit středník. Zvažte program se smyčkou do while, která provádí některé transakce s bankovním účtem.

// do_while.cpp: Definuje vstupní bod pro konzolovou aplikaci. #include "stdafx.h" #include #zahrnout pomocí jmenného prostoru std; int main(int argc, char* argv) ( srand(čas(0)); int balance = 8; // balance do // začátek smyčky do while ( cout<< "balance = " << balance << endl; // показать баланс int removal = rand() % 3; // переменная, для хранения вычитаемого значения cout << "removal = " << removal << endl; // показать вычитаемое значение balance -= removal; // управление условием } while (balance >0); // konec smyčky do while system("pause");

návrat 0; ) Vřádek 11 Proměnná zůstatek je deklarována, odpovídá za zůstatek prostředků na účtu. S 12. až 19. řádek . psaný do while smyčka Ve smyčce do while se provádějí všechny transakce se zůstatkovým účtem, konkrétně převod prostředků na nějaký jiný účet,. řádek 17Řádek 14 zobrazuje zůstatek finančních prostředků na účtu. Vřádek 15 je deklarována proměnná, ve které je uložena odečtená hodnota a tato hodnota je generována náhodně v intervalu. Proměnná odstranění je deklarována jednou v těle smyčky do while a proměnná není znovu definována při každém opakování smyčky. Jeho hodnota se ale mění v závislosti na tom, jaké číslo bylo vygenerováno. Vřádek 19 je zapsána podmínka cyklu do while, jakmile se podmínka stane nepravdivou, program přenese řízení na další příkaz po cyklu do while,řádek 20

. Výsledek programu je znázorněn na obrázku 1.

Obrázek 1 Proveďte cyklus while v C++

Nejprve se zobrazí zůstatek a poté částka výběru, poté se znovu zobrazí zůstatek a tak dále, dokud na účtu nejsou žádné peníze. Poslední zobrazený řádek byl řádek s vybíranou částkou a poté cyklus dokončil svou práci. Přestože poslední zůstatek na účtu není vidět, můžete říci, že je roven 0.

Vzpomeňme na program „Hádej číslo“ ze sekce:. V této úloze by bylo správnější použít smyčku do while, kód se zmenší o dva řádky. #zahrnout // ygadai2.cpp: Definuje vstupní bod pro konzolovou aplikaci. #include "stdafx.h" #include<< "Enter unknown number : "; cin >> zadejte_číslo; // hádat ) while (zadejte_číslo != neznámé_číslo);<< "You win!!!\n"; system("pause"); return 0; }

cout

Vzhledem k tomu, že while je smyčka s předběžnou podmínkou, museli jsme nejprve spočítat číslo před začátkem while a pak zkontrolovat pokračování cyklu while. V případě do while nemusíme číst číslo před začátkem cyklu, protože kontrola podmínky v do while nastává na konci cyklu. V závislosti na situaci se používá smyčka while nebo do while, vzájemně se doplňují.

Pro upevnění látky vyvineme další program, který vypočítá součet čísel v daném intervalu. // dowhile.cpp: Definuje vstupní bod pro konzolovou aplikaci. #include "stdafx.h" #include<< "Enter the first limit: "; // начальное значение из интервала int first_limit; cin >pomocí jmenného prostoru std; int main(int argc, char* argv) ( cout<< "Enter the second limit: "; // конечное значение из интервала int second_limit; cin >> první_mez;<= second_limit); // конец цикла do while cout << "sum = " << sum << endl; // печать суммы system("pause"); return 0; }

cout > druhý_limit; int součet = 0, počet = první_mez; do ( součet += počet; // zvýšení počtu součtů++; // zvýšení počáteční hodnoty ze zadaného intervalu ) while (počet Po spuštění programu musíte zadat limity intervalů, první a druhý. Poté se spustí smyčka do while, řádek 13.proměnná částka je určena k uložení nashromážděné částky,

řádek 15

. V




Nahoru