buclele for, while și do while în C

Pentru că în do while corpul buclei este mai întâi executat, iar apoi este verificată condiția pentru continuarea buclei. Din cauza acestei caracteristici, do while se numește buclă cu o postcondiție. Astfel, dacă condiția do while este în mod evident falsă, atunci blocul de instrucțiuni din corpul buclei do while va fi executat cel puțin o dată. Ca rezultat, do while diferă de bucla while în structură. Dacă în while condiția de continuare a buclei este verificată mai întâi și dacă condiția este adevărată, atunci numai atunci corpul buclei este executat. Bucla do while funcționează exact invers, mai întâi se execută corpul buclei, iar apoi se verifică condiția, motiv pentru care corpul buclei do while va fi executat cel puțin o dată.

// formă de înregistrare a operatorului de buclă do while: do // începutul buclei do while ( /*bloc de operatori*/; ) while (/*condiție pentru executarea buclei*/); // sfârșitul buclei do while

La începutul buclei do while, este scris cuvântul rezervat do, urmat de acolade, care pot fi omise dacă se folosește o instrucțiune în corpul buclei do while. După acolada de închidere, care indică sfârșitul corpului buclei do while, există o condiție de buclă do while, după care trebuie să puneți punct și virgulă. Luați în considerare un program cu o buclă do while care efectuează unele tranzacții cu cont de bani in banca.

// do_while.cpp: Definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include #include folosind namespace std; int main(int argc, char* argv) ( srand(time(0)); int sold = 8; // balance do // începutul buclei do while ( cout<< "balance = " << balance << endl; // показать баланс int removal = rand() % 3; // переменная, для хранения вычитаемого значения cout << "removal = " << removal << endl; // показать вычитаемое значение balance -= removal; // управление условием } while (balance >0); // sfârşitul buclei do while system("pauză"); returnează 0; )

ÎN linia 11 Variabila soldului a fost declarată; este responsabilă pentru soldul fondurilor din cont. CU Rândurile 12-19 bucla scrisă do while . În bucla do while, sunt efectuate toate tranzacțiile cu contul de sold, și anume, transferul de fonduri într-un alt cont, linia 17. Linia 14 arată soldul fondurilor din soldul contului. ÎN linia 15 se declară o variabilă în care este stocată valoarea scăzută, iar această valoare este generată aleatoriu în interval. Variabila de eliminare este declarată o dată în corpul buclei do while, iar variabila nu este redefinită de fiecare dată când bucla se repetă. Dar valoarea sa se schimbă în funcție de ce număr a fost generat. ÎN linia 19 condiția buclei do while este scrisă, de îndată ce condiția devine falsă, programul va transfera controlul la următoarea instrucțiune după bucla do while, linia 20. Rezultatul programului este prezentat în Figura 1.

Figura 1 Efectuați bucla while în C++

În primul rând, este afișat soldul, apoi suma de retragere, după care soldul este afișat din nou și așa mai departe până când nu există bani în cont. Ultima linie afișată a fost linia cu suma retrasă, iar apoi ciclul și-a încheiat activitatea. Deși ultimul sold din cont nu este vizibil, puteți spune că este egal cu 0.

Să ne amintim de programul „Ghicește numărul”, din secțiunea:. În această sarcină, ar fi mai corect să folosiți o buclă do while; codul va fi redus cu două linii.

// ygadai2.cpp: Definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include #include folosind namespace std; int main(int argc, char* argv) ( srand(time(0)); int unknown_number = 1 + rand() % 10; // număr de ghicit int enter_number; // variabilă pentru a stoca numărul introdus do ( cout<< "Enter unknown number : "; cin >> introduceți numărul; // ghici ) în timp ce (introduceți_număr != număr_necunoscut); cout<< "You win!!!\n"; system("pause"); return 0; }

Deoarece while este o buclă cu o precondiție, mai întâi trebuia să numărăm numărul înainte de a începe while și apoi să verificăm continuarea buclei while. În cazul do while, nu trebuie să citim numărul înainte de a începe bucla, deoarece verificarea condiției în do while are loc la sfârșitul buclei. În funcție de situație, se folosește bucla a while sau do while, acestea se completează reciproc.

Pentru a consolida materialul, vom dezvolta un alt program care calculează suma numerelor dintr-un interval dat.

// dowhile.cpp: Definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include folosind namespace std; int main(int argc, char* argv) ( cout<< "Enter the first limit: "; // начальное значение из интервала int first_limit; cin >> prima_limită; cout<< "Enter the second limit: "; // конечное значение из интервала int second_limit; cin >> a doua_limită; int suma = 0, count = prima_limita; do ( suma += număr; // creșterea numărului sumei++; // creșterea valorii inițiale din intervalul specificat) în timp ce (număr<= second_limit); // конец цикла do while cout << "sum = " << sum << endl; // печать суммы system("pause"); return 0; }

După pornirea programului, trebuie să introduceți limitele de interval, primul și al doilea. După aceasta, bucla do while începe să ruleze, linia 13.suma variabilă este destinată stocării sumei acumulate, linia 15. ÎN linia 16 Valoarea inițială a limitei este crescută după fiecare repetare a ciclului. Rezultatul programului (vezi Figura 2).

Figura 2 Efectuați bucla while în C++

Intervalul este indicat de la -6 la 10 inclusiv, [-6;10]. Programul însumează toate numerele întregi dintr-un interval dat. Suma se formează astfel: -6 -5 -4 -3 -2 -1 + 0 +1 +2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 34. Astfel, acțiunea de însumare toate numerele întregi sunt efectuate ciclic numere dintr-un interval specificat de utilizator.

Bucle JavaScript asigura execuția repetată a calculelor repetitive. Ele optimizează procesul de codare prin executarea aceleiași instrucțiuni sau bloc de instrucțiuni care formează corpul unei bucle de un număr specificat de ori (folosind o variabilă contor) sau în timp ce o condiție specificată este adevărată. Buclele iterează peste o secvență de valori. Executarea unei bucle o dată este apelată repetare.

Performanța unei bucle este afectată de numărul de iterații și de numărul de operații efectuate în corpul buclei fiecărei iterații.

Următorii operatori de buclă există în JavaScript:

1) for este folosit când știi dinainte de câte ori trebuie să faci ceva;
2) for...in este folosit pentru a parcurge proprietățile obiectelor;
3) while este folosit atunci când nu știi de câte ori trebuie să faci ceva;
4) do...while funcționează în mod similar cu declarația while. Diferența este că do...while execută întotdeauna expresia din interiorul acoladelor cel puțin o dată, chiar dacă testul de condiție returnează false .

Tipuri de bucle în JavaScript, control al buclei

1. Pentru buclă

Bucla for este folosită pentru a itera elementele matricelor sau obiectelor asemănătoare matricei, cum ar fi argumentele și HTMLCollection. Condiția este verificată înainte de fiecare iterație a buclei. Dacă verificarea are succes, codul din interiorul buclei este executat, în caz contrar codul din interiorul buclei nu este executat și programul continuă din prima linie imediat următoare buclei.

Următoarea buclă va imprima linia Bună ziua, JavaScript! Cinci ori.

Pentru (var i = 0; i< 5; i++) { console.log(i + ": Hello, JavaScript!"); }
Orez. 1. Rezultatul executării unei bucle for pe consolă

1.1. Cum funcționează bucla for

Bucla for constă din trei operații diferite:

Pasul 1. initializare var i = 0; — declararea unei variabile contor care va fi verificată în timpul execuției buclei. Această variabilă este inițializată cu valoarea 0. Cel mai adesea, variabilele numite i, j și k acționează ca contoare de buclă.

Pasul 2. verificarea stării i< 5; — условное выражение, если оно возвращает true , тело цикла (инструкция в фигурных скобках) будет выполнено. В данном примере проверка условия идёт до тех пор, пока значение счётчика меньше 5 .

Pasul 3. operațiune finală i++ - operație de creștere a contorului, crește valoarea variabilei var i cu unu. În locul operației de creștere, poate fi utilizată și operația de decrementare.

La sfârșitul buclei, variabila var i este stocată la 1. Următoarea iterație a buclei este executată pentru (var i = 1; i< 5; i++) { } . Условное выражение вычисляется снова, чтобы проверить, является ли значение счётчика i всё ещё меньше 5 . Если это так, операторы в теле цикла выполняются ещё раз. Завершающая операция снова увеличивает значение переменной на единицу. Шаги 2 и 3 повторяются до тех пор, пока условие i < 5; возвращает true .

1.2. Imprimarea valorilor matricei

Pentru a imprima valorile unei matrice folosind o buclă for, trebuie să utilizați proprietatea lungime a matricei. Acest lucru vă va ajuta să determinați numărul de elemente din matrice și să faceți bucla de același număr de ori.

Scriptul de mai jos va afișa cinci mesaje cu numele culorilor:

Flori var = ["Trandafir", "Crin", "Lalea", "Iasomie", "Orhidee"]; pentru (var i = 0; i< flowers.length; i++){ alert(flowers[i] + " - это цветок."); }

Dacă valoarea proprietății length nu se modifică în timpul buclei, o puteți stoca într-o variabilă locală și apoi utilizați acea variabilă într-o expresie condiționată. În acest fel, puteți crește viteza buclei, deoarece valoarea proprietății lungime va fi preluată o singură dată pe întreaga durată a buclei.

Var flori = ["Trandafir", "Crin", "Lalea", "Iasomie", "Orhidee"], len = flori.lungime; pentru (var i = 0; i

2. Buclă pentru...în

pentru bucle...in sunt folosite pentru a parcurge proprietățile obiectelor non-matrice. Acest bypass se mai numește și transfer. La traversare, se recomandă utilizarea metodei hasOwnProperty() pentru a filtra proprietățile care au fost moștenite de la prototip.

De exemplu, să creăm un obiect folosind un obiect literal.

Var user = (nume: „Alice”, vârsta: 25, țara: „Rusia”); pentru (var prop în utilizator) ( console.log(prop + ": " + utilizator); )
Orez. 2. Rezultatul executării buclei for...in pe consolă

Să presupunem că într-un scenariu înainte sau după crearea obiectului utilizator, prototipul obiectului Object a fost extins cu o metodă suplimentară clone().

Dacă (typeof Object.prototype.clone === „nedefinit”) ( Object.prototype.clone = funcție () (); )

Deoarece lanțul de moștenire prototip este verificat în mod constant de către interpret, toate obiectele au acces automat la noua metodă.

Orez. 3. Rezultatul repetării buclei for...in pe consolă

Pentru a evita detectarea acestei metode în timp ce enumerați proprietățile obiectului utilizator, este utilizată metoda hasOwnProperty(), care va filtra proprietățile prototipului.

Var user = (nume: „Alice”, vârsta: 25, țara: „Rusia”); if (typeof Object.prototype.clone === „nedefinit”) ( Object.prototype.clone = funcția () (); ) for (var prop în utilizator) ( if (user.hasOwnProperty(prop)) ( console.log (prop + ": " + utilizator); ))
Orez. 4. Rezultatul listării proprietăților unui obiect folosind metoda hasOwnProperty().

3. bucla while

Bucla while este o buclă cu o verificare preliminară a unei expresii condiționate. Declarația din interiorul buclei (bloc de cod între acolade) va fi executată dacă expresia condiționată este evaluată la true . Dacă prima verificare returnează false , blocul de instrucțiuni nu va fi executat nici măcar o dată.

După ce se termină iterația buclei, expresia condiționată este din nou testată pentru adevăr și procesul se repetă până când expresia devine false . În acest caz, programul va continua din prima linie imediat după buclă (dacă există una).

Această buclă va afișa tabelul de înmulțire pentru numărul 3:

Var i = 1; var msg = ""; in timp ce eu< 10) { msg+= i + " x 3 = " + (i * 3) + "
"; i++; ) document.write(msg);
Orez. 5. Rezultatul executării buclei while

4. Do...while bucla

Loop do...while; verifică condiția de continuare după ce bucla este executată. Spre deosebire de bucla while, în do...while; Corpul buclei este executat cel puțin o dată, deoarece condiția este verificată la sfârșitul buclei, și nu la început. Această buclă este utilizată mai rar decât while , deoarece în practică o situație în care este necesară cel puțin o execuție a buclei este rară.

Var rezultat = ""; var i = 0; face ( i += 1; rezultat += i + " "; ) în timp ce (i< 5); document.write(result);
Orez. 6. Rezultatul executării buclei do...while

În exemplul următor, instrucțiunile dintr-o buclă sunt executate o dată, chiar dacă condiția nu este adevărată.

Var i = 10; do ( document.write(i + " "); i++; ) în timp ce (i< 10);

5. Bucle infinite

Când creați orice buclă, puteți crea o buclă infinită care nu se va termina niciodată. O astfel de buclă ar putea continua să ruleze atâta timp cât computerul utilizatorului rulează. Majoritatea browserelor moderne pot detecta acest lucru și pot solicita utilizatorului să oprească rularea scriptului. Pentru a evita crearea unei bucle infinite, trebuie să fii sigur că condiția dată va reveni falsă la un moment dat. De exemplu, următoarea buclă specifică o condiție care nu returnează niciodată false, deoarece nu va fi niciodată mai mică de 10:

Pentru (var i = 25; i > 10; i++) ( document.write ("Această propoziție va rula pentru totdeauna...
"); }

6. Bucle imbricate

Se numește o buclă în interiorul unei alte bucle cuibărit. Cu fiecare iterație a buclei, bucla imbricată este executată complet. Buclele imbricate pot fi create folosind o buclă for și o buclă while.

Pentru (var count = 1; count< 3; count++) { document.write(count + ". Строка цикла
"); pentru (var nestcount = 1; nestcount< 3; nestcount++) { document.write("Строка вложенного цикла
"); } }
Orez. 7. Rezultatul executării unei bucle for imbricate

7. Managementul ciclului

Bucla poate fi controlată folosind instrucțiuni break; și continuă; .

7.1. Pauza operatorului;

Pauza operatorului; încheie execuția buclei curente. Este folosit în cazuri excepționale când bucla nu se poate executa dintr-un motiv oarecare, cum ar fi dacă aplicația întâmpină o eroare. Mai des operator de pauză; face parte din constructul if.

Când declarația se rupe; folosit fără etichetă, vă permite să părăsiți o instrucțiune buclă sau switch. Următorul exemplu creează un contor ale cărui valori ar trebui să varieze de la 1 la 99, dar instrucțiunea break întrerupe bucla după 14 iterații.

Pentru (var i = 1; i< 100; i++) { if (i == 15) { break; } document.write(i); document.write("
"); }
Orez. 8. Rezultatul operatorului break în bucla for

Pentru bucle imbricate, instrucțiunea break; folosit cu o etichetă care termină instrucțiunea numită. O etichetă vă permite să părăsiți orice bloc de cod. O instrucțiune numită poate fi orice instrucțiune externă unei instrucțiuni break; . Eticheta poate fi numele unei instrucțiuni if ​​sau numele unui bloc de instrucțiuni cuprinse între acolade doar pentru a atribui o etichetă acelui bloc. Între cuvânt cheie pauză; iar numele etichetei nu permite o nouă linie.

Outerloop: for(var i = 0; i< 10; i++) { innerloop: for(var j = 0; j < 10; j++) { if (j >3) pauză; // Ieși din bucla cea mai interioară dacă (i == 2) întrerupe bucla interioară; // Același lucru dacă (i == 4) break outerloop; // Ieșire din bucla exterioară document.write("i = " + i + " j = " + j + "
"); ) ) document.write("FINAL i = " + i + " j = " + j + "
");

7.2. Operatorul continuă;

Operatorul continuă; oprește iterația curentă a buclei și începe o nouă iterație. În acest caz, bucla while revine direct la condiția sa, iar bucla for evaluează mai întâi expresia de increment și apoi revine la condiție.

Acest exemplu va afișa toate numerele pare:

Var i; pentru(i = 1; i<= 10; i++) { if (i % 2 !== 0) { continue; } document.write("
număr par= " + i); )
Orez. 9. Rezultatul operatorului continue în bucla for

Operatorul continuă; poate fi folosit și în bucle imbricate cu o etichetă.

Outerloop: pentru (var i = 0; i "); pentru (var j = 0; j "); ) ) document.write("Toate buclele finalizate"+"
");
Orez. 10. Rezultatul operatorului de continuare cu o etichetă

Etichete: cicluri C. C bucle. Bucla cu postcondiție. Buclă cu precondiție. Mergi cu un scribător. in timp ce. face în timp ce. pentru. pauză. continua

Introducere. Bucle cu precondiție.

La rezolvarea problemelor practice, apare constant nevoia de a repeta o acțiune de un număr dat de ori, sau până la atingerea unei anumite condiții. De exemplu, afișați o listă cu toți utilizatorii, plasați planul cu o textură, efectuați calcule pe fiecare element al matricei de date etc. În C, trei tipuri de bucle sunt utilizate în aceste scopuri: cu condiție prealabilă, postcondițieși ciclul pentru cu un contor (deși acesta este un nume condiționat, deoarece este posibil să nu existe un contor).

Orice buclă constă dintr-un corp și verificarea condiției în care această buclă ar trebui să se încheie. Corpul buclei este setul de instrucțiuni care trebuie repetate. Fiecare repetare a buclei se numește iterație.

Luați în considerare o buclă cu o precondiție.

Int i = 0; in timp ce eu< 10) { printf("%d\n", i); i++; }

Această buclă rulează atâta timp cât condiția specificată după cuvântul cheie while este adevărată. Corpul buclei este de două linii, una imprimă un număr, a doua îl schimbă. Evident, această buclă va fi executată de 10 ori și va fi afișată
0
1
2
3
si tot asa pana la 9.

Este foarte important ca condiția de ieșire din buclă să fie îndeplinită la un moment dat, altfel va apărea o buclă și programul nu se va finaliza. De exemplu

Int i = 0; in timp ce eu< 10) { printf("%d\n", i); }

Această buclă nu modifică variabila i, care este utilizată pentru a determina starea de oprire, astfel încât bucla nu se va termina.

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

În acest program, bucla se va termina, desigur, dar din cauza unei acțiuni incorecte, va fi executată de mai mult de 10 ori. Deoarece C nu monitorizează depășirea variabilă, va trebui să așteptați până când variabila depășește și devine mai mică decât zero.

Int i; in timp ce eu< 10) { printf("%d\n", i); i++; }

Acest exemplu are un comportament nedefinit. Deoarece variabila i nu este inițializată în avans, aceasta stochează gunoi, o valoare necunoscută în avans. Cu conținuturi diferite ale variabilei i, comportamentul se va schimba.

Dacă corpul buclei while conține o declarație, atunci acoladele pot fi omise.

Int i = 0; in timp ce eu< 10) printf("%d\n", i++);

Aici incrementăm variabila i când apelăm funcția printf. Acest stil de codare ar trebui evitat. Absența bretelelor, mai ales la începutul antrenamentului, poate duce la erori. În plus, codul este mai puțin lizibil, iar parantezele suplimentare nu umfla prea mult listele.

Bucle cu postcondiții.

O buclă postcondiție diferă de o buclă while prin aceea că condiția este verificată după ce bucla s-a terminat, ceea ce înseamnă că bucla va fi repetată cel puțin o dată (spre deosebire de o buclă while, care poate să nu fie executată deloc). Sintaxa buclei

Do (corp buclă) while(condiție);

Exemplul anterior folosind o buclă do ar arăta ca

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

Să ne uităm la un exemplu de utilizare a unei bucle cu o postcondiție și o precondiție. Să presupunem că trebuie să integrăm o funcție.

Orez. 1 Integrarea numerică a unei funcții∫ a b f x d x

O integrală este o sumă de infinitezimale. Putem reprezenta integrala ca o sumă și pur și simplu înlocuim valorile infinitezimale cu valori mici.

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

Formula arată că de fapt am împărțit zona de sub grafic în mai multe dreptunghiuri, unde înălțimea dreptunghiului este valoarea funcției în punct, iar lățimea este pasul nostru. Prin adunarea ariilor tuturor dreptunghiurilor, obținem astfel valoarea integralei cu o anumită eroare.

dreptunghiuri stânga" src="/images/c_loop_rectangles_left.png" alt="Integrarea numerică a unei funcții prin metoda
dreptunghiuri din stânga"> Рис. 2 Численное интегрирование функции методом!}
dreptunghiuri din stânga

Fie funcția necesară x 2 . Vom avea nevoie de următoarele variabile. Mai întâi, un acumulator de sumă pentru a stoca integrala. În al doilea rând, granițele din stânga și din dreapta ale lui a și b, în ​​al treilea rând, pasul h. Avem nevoie și de valoarea curentă a argumentului funcției x.

Pentru a găsi integrala este necesar să mergem de la A inainte de b cu niște pași hși adăugați la sumă aria dreptunghiului cu laturile f(x)Și h.

#include #include int main() ( suma dubla = 0,0; dublu a = 0,0; dublu b = 1,0; dublu h = 0,01; dublu x = a; while (x< b) { sum += x*x * h; x += h; } printf("%.3f", sum); getch(); }

Programul iese 0.328.

∫ 0 1 x 2 d x = x 3 3 | 0 1 = 1 3 ≈ 0,333

Dacă te uiți la grafic, poți vedea că de fiecare dată găsim valoarea funcției în punctul din stânga. Prin urmare, această metodă de integrare numerică se numește metoda dreptunghiului din stânga. În mod similar, puteți lua valoarea corectă. Atunci va fi metoda dreptunghiurilor drepte.

În timp ce (x< b) { x += h; sum += x*x * h; } dreptunghiuri drepte" src="/images/c_loop_rectangles_right.png" alt="Integrarea numerică a unei funcții prin metoda
dreptunghiuri dreptunghiuri"> Рис. 3 Численное интегрирование функции методом!}
dreptunghiuri dreptunghiuri

Suma în acest caz va fi egală cu 0,338. Metoda dreptunghiului din stânga și din dreapta nu este foarte precisă. De fapt, am aproximat graficul neted al unei funcții care crește monoton cu o histogramă. Dacă vă gândiți puțin, atunci aproximarea poate fi efectuată nu numai prin însumarea dreptunghiurilor, ci și prin însumarea trapezelor.

trapezium" src="/images/c_loop_integral_trapezium.png" alt="Integrarea numerică a unei funcții prin metoda
trapez"> Рис. 4 Численное интегрирование функции методом!}
trapez

Aproximația trapezoidală este de fapt o aproximare pe bucăți prin curbe de ordinul întâi (ax+b). Conectăm puncte pe un grafic folosind segmente de linie. Puteți face totul mai complicat conectând punctele nu cu segmente, ci cu bucăți de parabolă, atunci aceasta va fi metoda lui Simpson. Dacă complicăm lucrurile și mai mult, vom ajunge la interpolarea spline, dar aceasta este o altă conversație, foarte lungă.

Să ne întoarcem la oile noastre. Să luăm în considerare 4 cicluri.

Int i = 0; în timp ce(i++< 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);

Dacă rulați aceste exemple, veți vedea că buclele sunt executate de la doi la de patru ori. Acest lucru merită să acordați atenție deoarece schimbarea incorect a contorului de bucle duce adesea la erori.

Se întâmplă adesea să fim nevoiți să ieșim din buclă fără a aștepta ca un steag să fie ridicat sau valoarea unei variabile să se schimbe. În aceste scopuri este utilizat operatorul pauză ceea ce face ca programul să iasă din bucla curentă.

Să decidem sarcină simplă. Utilizatorul introduce numere până când este introdus numărul 0, după care este afișat cel mai mare introdus. Există o captură. Nu se știe câte numere va introduce utilizatorul. Prin urmare, vom crea o buclă infinită și vom ieși din ea folosind operatorul pauză. În interiorul buclei vom primi date de la utilizator și vom selecta numărul maxim.

#include #include int main() ( int num = 0; int max = num; printf("Pentru a ieși, introduceți 0\n"); /*buclă fără sfârșit*/ while (1) ( printf("Vă rugăm, introduceți numărul: "); scanf("%d", &num); /*condiție pentru ieșirea din buclă*/ if (num == 0) ( break; ) if (num > max) ( max = num; ) ) printf ("numărul maxim a fost % d ", max); getch(); )

Permiteți-mi să vă reamintesc că nu există un tip boolean special în C. În schimb, sunt folosite numere. Zero este fals, toate celelalte valori sunt adevărate. Bucla while(1) va rula pentru totdeauna. Singurul punct de ieșire din el este starea

Dacă (număr == 0)

În acest caz, ieșim din buclă cu pauză; Pentru început, setăm ca maxim 0. Utilizatorul introduce un număr, după care verificăm dacă este zero sau nu. Dacă nu este zero, atunci îl comparăm cu maximul actual.

Buclele infinite sunt folosite destul de des, deoarece datele de intrare nu sunt întotdeauna cunoscute în avans sau se pot schimba în timp ce programul rulează.

Când trebuie să sărim corpul buclei, dar continuăm să executăm bucla, folosim operatorul continua. Un exemplu simplu: utilizatorul introduce zece numere. Aflați suma tuturor numerelor pozitive pe care le-a introdus.

#include #include int main() ( int i = 0; int positiveCnt = 0; float sum = 0.0f; float input; printf("Introduceți 10 numere\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(); }

Exemplul pare oarecum exagerat, deși în general reflectă semnificația operatorului continua. În acest exemplu, variabila pozitivCnt este un numărător de numere pozitive, sumă suma, și intrare- variabila temporara pentru introducerea numerelor.

Iată un alt exemplu. Este necesar ca utilizatorul să introducă un număr întreg mai mare decât zero și mai mic de 100. Până la introducerea numărului necesar, programul va continua să interogheze.

Do (printf("Vă rugăm, introduceți numărul: "); scanf("%d", &n); dacă (n< 0 || n>100) ( printf("număr greșit, încercați din nou\n"); continua; ) else ( break; ) ) while (1);

pentru buclă

Una dintre cele mai frecvent utilizate este bucla de contor. pentru. Sintaxa sa

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

De exemplu, să tipărim pătratele primei sute de numere.

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

Unul dintre lucrurile grozave despre bucla for este că poate funcționa cu mai mult decât numere întregi.

Float num; pentru (num = 5,3f; num > 0f; num -= 0,2) ( printf("%.2f ", num); )

Această buclă va imprima numere de la 5,3 la 0,1. Bucla for poate să lipsească unele „blocuri” de cod, de exemplu, poate lipsi inițializarea, testarea (apoi bucla devine infinită) sau schimbarea contorului. Iată un exemplu cu o integrală implementată folosind un contor pentru

#include #include int main() ( suma dubla = 0,0; dublu a = 0,0; dublu b = 1,0; dublu h = 0,01; dublu x; for (x = a; x< b; x += h) { sum += x*x * h; } printf("%.3f", sum); getch(); }

Să ne uităm la o bucată de cod

x dublu ; pentru (x = a; x< b; x += h) { sum += x*x * h; }

Se poate schimba astfel

Dublu x = a; pentru (; x< b; x+=h) { sum += x*x*h; }

Mai mult, folosind operatorul pauză, puteți elimina condiția și puteți scrie

x dublu; pentru (x = a;; x += h)( dacă (x>b)( rupere; ) suma += x*x*h; )

Dublu x = a; pentru (;;)( dacă (x > b)( pauză; ) suma += x*x*h; x += h; )

În plus, folosind operatorul ",", puteți muta unele dintre acțiuni

x dublu ; pentru (x = a; x< b; x += h, sum += x*x*h) ;

NOTĂ: Deși este posibil să faceți acest lucru, vă rugăm să nu faceți acest lucru! Acest lucru afectează lizibilitatea codului și duce la erori subtile.

Să decidem câteva problema practica mai complicat. Să avem o funcție f(x). Să găsim maximul derivatei sale pe segment. Cum se găsește numeric derivata unei funcții? Evident, prin definiție). Derivata unei functii intr-un punct este tangenta unghiului tangentei.

F x ′ = d x d y

Să luăm un punct de pe curba cu coordonatele (x; f(x)), deplasăm cu un pas h înainte, obținem punctul (x+h, f(x+h)), atunci derivata va fi

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

Adică, raportul dintre o creștere mică a unei funcții și o creștere mică a unui argument. Un cititor atent se poate întreba de ce mergem înainte într-o funcție și nu înapoi. Ei bine, să ne întoarcem

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

Luând media acestor două valori, obținem

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

În general, acum sarcina devine banală: mergem de la punct A până la punctul b si gasim valoarea minima derivată, precum și punctul în care derivatul capătă această valoare. Pentru a rezolva, vom avea nevoie, ca și în problema cu integrala, de variabile pentru limitele zonei de căutare AȘi b, valoarea actuala X si pas h. În plus, este necesară valoarea maximă maxVal si coordoneaza maxX această valoare maximă. Pentru a funcționa, luați funcția x sin x

#include #include #include 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; // Parcurgem întreaga regiune de la a la b // și căutăm maximul primei derivate // ​​Folosiți funcția x*sin(x) pentru (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("valoare max = %.3f la %.3f", maxVal, maxX); getch(); )

La ieșire, programul produce valoarea maximă = 1,391 la 1,077

Soluția numerică dă aceleași rezultate (în cadrul erorii) ca și programul nostru.

Bucle imbricate

Să ne uităm la un exemplu în care buclele sunt imbricate una în alta. Să afișăm tabla înmulțirii.

#include #include #include int main() ( int i, j; // Pentru fiecare i pentru (i = 1; i< 11; i++) { // Выводим строку из произведения i на j for (j = 1; j < 11; j++) { printf("%4d", i*j); } // После чего переходим на linie nouă printf("\n"); ) getch(); )

În acest exemplu, în prima buclă prin variabilă i a doua buclă imbricată peste variabilă j. Secvența acțiunilor este următoarea: mai întâi intrăm în ciclu prin i, dupa aceea pentru curent i Numerele sunt afișate de 10 ori la rând. După aceasta, trebuie să mergeți la o nouă linie. Acum să scoatem numai elementele de sub diagonala principală

Pentru (i = 1; i< 11; i++) { for (j = 1; j < 11; j++) { if (j >i) ( break; ) printf("%4d", i*j); ) printf("\n"); )

După cum puteți vedea, operatorul pauză vă permite să părăsiți numai bucla curentă. Acest exemplu ar putea fi rescris după cum urmează

Pentru (i = 1; i< 11; i++) { for (j = 1; j <= i; j++) { printf("%4d", i*j); } printf("\n"); }

ÎN în acest caz, Folosim primul numărător de bucle din bucla imbricată.

Ru-Cyrl 18-tutorial Sypachev S.S. 14-04-1989 [email protected] Stepan Sypachev elevi

Încă nu este clar? – scrieți întrebări în căsuța poștală

În unele cazuri, este necesar să executați codul până când se obține rezultatul dorit. Pentru a face acest lucru, PHP oferă bucle while, for și foreach.

Sintaxa buclei while în PHP

Sintaxă cicluin timp ce:

Un exemplu de utilizare a unei bucle while în PHP:

În exemplul de buclă php while de mai sus, variabila contor $i este mai întâi inițializată la 0.

Condiția buclei while este $i< 10 . Это означает, что мы проверяем, меньше ли переменная, чем 10.

Tot ceea ce este închis în acolade sunt instrucțiunile (corpul) buclei. Ele se repetă atâta timp cât condiția revine adevărată. În exemplul de mai sus, $i este imprimat pe ecran și apoi variabila contor este incrementată cu 1. Acest lucru este important pentru ca condiția buclei să eșueze în cele din urmă. Dacă condiția de buclă este întotdeauna îndeplinită, de exemplu pentru că ați uitat să incrementați variabila contor $i , atunci scriptul va intra într-o buclă infinită. Din fericire, după un timp ora PHP va opri executarea scriptului dvs.

Puteți face atât starea buclei, cât și corpul buclei la fel de complexe după cum doriți. De exemplu, folosește while inside while php, use php în timp ce pentru a itera prin matrice ( array ) sau definiți mai multe variabile de contor:

$min) ( echo "count1: $count1; count2: $count2
"; $ counter1 += 2; // Expresie scurtă pentru $counter1 = $counter1 + 2; $counter2 -= 3; // Expresie scurtă pentru $count2 = $count2-3; ) ?>

Exemplul definește două variabile: $ counter 1 și $ counter 2 . O variabilă este incrementată cu 2, iar cealaltă este decrementată cu 3. Bucla while rulează atâta timp cât sunt îndeplinite ambele condiții $ count 1< $ max и $ count 2 >$min.

Efectul cuvintelor cheie întrerupere și continuare pe o buclă

Folosind comanda pauză Poate sa întrerupeți execuția buclei while in PHP. Să zicem că căutăm utilizator specific. Apoi puteți trece prin toți utilizatorii într-o buclă while. Dacă găsim utilizatorul dorit, apoi opriți bucla folosind cuvântul cheie pauză.

Un exemplu simplu de utilizare a cuvântului cheie break:

în timp ce ($count< $max) { if ($count == 10) { echo "Останавливаемся на числе 10"; break; } echo "$count,"; $counter += $increment; // увеличивает $count на значение $increment } ?>

Acest cod iterează prin numerele în ordine crescătoare de la 0 la $max = 30, adăugând la variabila $count valoarea lui $increment, cu alte cuvinte numărul 2. Dar dacă variabila $count este egală cu 10, următorul va întâmpla: ieșirea din bucla while php.

Cuvânt cheie continua nu termină bucla while în php este complet , dar doar omite restul corpului buclei. Exemplul de mai jos demonstrează acest lucru:

în timp ce ($count< $max) { $counter += $increment; // увеличивает $payer на $increment if ($count >= 10 && $număr<= 15) { echo "Число между 10 и 15
"; continua; )
echo „$count
"; } ?>

Această buclă începe de la 0 și crește contorul până la $max. Variabila $counter este întotdeauna incrementată cu valoarea variabilei $increment. Adică, ia valori 0, 2, 4 etc.

Dacă variabila $count are o valoare între 10 și 15, textul și declarația vor fi imprimate pe ecran continua va sări peste alte expresii din corpul buclei. Ca rezultat, vedem că numerele 10, 12 și 14 nu sunt afișate.

bucla do-while în PHP

Modificare minoră in timp ce este o buclă do - while. În acest caz, condiția buclei este verificată numai după ce corpul ei a fost executat. Aceasta înseamnă că corpul buclei va fi executat cel puțin o dată.

Sintaxă bucla do-while :

Să presupunem că vrem să generăm Număr aleatoriu, care trebuie să fie fie între 0 și 10, fie între 20 și 30. Conform definiției funcției rand ( $ min, $max) , Poate sa la întâmplare generează un număr între $minȘi $max:

10 && $aleatoriu< 20) { $random = rand (0, 30); }
echo "Numărul nostru aleatoriu: $random"; ?>

Folosind bucla php doin timp ce, puteți obține valoarea unei expresii fără a inițializa variabila $random. Corpul buclei este executat înainte ca condiția să fie testată. Atunci exemplul de mai sus ar arăta astfel:

10 && $aleatoriu< 20);
echo "Numărul nostru aleatoriu: $random"; ?>

Pentru un începător, bucla do-while poate fi puțin confuză. Dacă nu îi înțelegeți pe deplin scopul, nu este o problemă. Buclele Do-while sunt rareori folosite în practică.

face bucle while și foreach

face bucla . . in timp ce

face...while buclaîn C# aceasta este o versiune a while cu o verificare post-condiție. Aceasta înseamnă că starea buclei este verificată după ce corpul buclei este executat. Prin urmare, buclele do...while sunt utile în situațiile în care un bloc de instrucțiuni trebuie executat cel puțin o dată. Următoarea este forma generală a unei instrucțiuni de buclă do-while:

do (operatori; ) while (condiție);

Dacă există un singur operator, acolade în această formă de notație sunt opționale. Cu toate acestea, ele sunt adesea folosite pentru a face construcția do-while mai lizibilă și pentru a nu fi confundate cu construcția buclei while. Bucla do-while rulează atâta timp cât expresia condiționată este adevărată. Un exemplu de utilizare a unei bucle do-while este programul următor, care calculează factorialul unui număr:

Utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Text; namespace ConsoleApplication1 ( class Program ( static void Main(string args)) ( try ( // Calculați factorialul unui număr int i, rezultat = 1, num = 1; Console.WriteLine("Introduceți un număr:"); i = int .Parse(Console .ReadLine()); Console.Write("\n\nFactorial (0) = ", i); do (rezultat *= num; num++; ) while (num

bucla foreach

bucla foreach servește pentru accesul ciclic la elementele unei colecții, care este un grup de obiecte. C# definește mai multe tipuri de colecții, fiecare dintre acestea fiind o matrice. Următoarea este forma generală a instrucțiunii buclei foreach:

foreach (de tip loop_variable_name în colecție) instrucțiune;

Aici tastați nume_variabilă_buclă denotă tipul și numele variabilei de control al buclei care primește valoarea următorului element al colecției la fiecare pas al buclei foreach. Și colecția denotă o colecție interogată ciclic, care în continuare reprezintă o matrice. Prin urmare, tipul variabilei buclei trebuie să se potrivească cu tipul elementului de matrice. În plus, un tip poate fi notat cu cuvântul cheie var. În acest caz, compilatorul determină tipul variabilei buclei pe baza tipului elementului de matrice. Acest lucru poate fi util pentru a lucra cu anumite tipuri de interogări. Dar, de regulă, tipul este specificat în mod explicit.

Instrucțiunea buclă foreach funcționează după cum urmează. Când începe bucla, primul element al matricei este selectat și atribuit variabilei buclei. La fiecare pas de iterație ulterioară, selectăm elementul următor matrice, care este stocată într-o variabilă buclă. Bucla se termină când sunt selectate toate elementele matricei.

O buclă foreach vă permite să parcurgeți fiecare element al unei colecții (un obiect care reprezintă o listă de alte obiecte). Din punct de vedere tehnic, pentru ca ceva să fie considerat o colecție, trebuie să suporte interfața IEnumerable. Exemplele de colecții includ matrice C#, clase de colecții din spațiul de nume System.Collection și clase de colecții personalizate.