Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Instrucțiunea while (structuri repetitive)

Această lecție este despre instrucțiunea while: definiție, exemple și exerciții propuse.

De multe ori se întâmplă să avem nevoie să repetăm un set de instrucțiuni de un număr de ori. Iată câteva exemple:

  • Să calculăm valoarea a^b (a la puterea b): trebuie să îl înmulțim pe a în mod repetat, de b ori;
  • Să calculăm media a n numere.

Limbajul C++ ne oferă o varietate de modalități de a repeta un set de instrucțiuni. În această lecție vom vorbi despre structura repetitivă while, dar dacă vrei să vezi toate structurile repetitive în C++, poți intra pe această pagină.

Una dintre cele mai des utilizate structuri repetitive, instrucțiunea while funcționează ca și un if, doar că repetă instrucțiunile dintre acolade până când condiția este falsă.

Sintaxa structurii while

Iată sintaxa instrucțiunii. Este asemănătoare ca la cea de if.

while(condiție) {
    instrucțiune 1;
    instrucțiune 2;
    …
}

Observații

Dacă condiția este falsă de la început, atunci nu se vor executa instrucțiunile niciodată.

Dacă condiția este mereu adevărată, atunci se va crea o buclă infinită, iar codul nu se va opri niciodată.

Exemple

Să zicem că avem un număr n și vrem să afișăm în ordine numerele n, n - 1, …, 3, 2, 1. Putem să folosim structura while astfel:

//Pentru n = 5, se va afișa:
//5 4 3 2 1
int n;
cin >> n;
while(n != 0) {
    cout << n << " ";
    n--;
}

Să vedem pas cu pas ce se întâmplă. Urmărește animația de mai jos:

Variabilă Valoare
n 001122334455
Consolă: 5 4 3 2 1

Observăm că dacă condiția este mereu adevărată, atunci codul nu se va opri niciodată (spunem că formăm o buclă infinită). De aceea, este important să ne asigurăm că va exista un moment în care condiția să fie falsă. În următorul exemplu, este evident că nu va exista niciun moment în care condiția n == n să fie falsă, însă în exemplul de după poate fi mai dificil să găsim eroarea.

//Pentru n = 5, se va afișa:
//5 5 5 5 5 5 5 5 … (la infinit)
int n;
cin >> n;
while(n == n) {
    cout << n << " ";
}
//Pentru n = 6, se va afișa:
//6 4 2
//Pentru n = 5, se va afișa:
//5 3 1 -1 -3 -5 … (va continua la infinit, deoarece nu se atinge niciodată valoarea 0)
int n;
cin >> n;
while(n != 0) {
    cout << n << " ";
    n -= 2;
}

În următorul exemplu, codul nu va intra deloc în structura while:

int n = 0;
while(n != 0) {
    cout << n << " ";
}
cout << "Nu se va afișa niciun număr, pentru că n este 0 încă de la început, condiția fiind falsă.";

Problemă rezolvată

Pahare

Avem două pahare de capacitate n, respectim m mililitri (cu n > m). Știind că al doilea pahar are o sursă nelimitată de apă, de câte ori trebuie să turnăm apă din al doilea pahar în primul pentru a îl umple?

Exemplu: Pentru n = 3 și m = 2, rezultatul va fi 2.

Rezolvare: După citire, vom scădea repetat pe m din n, până când acesta este mai mic sau egal cu 0.

#include <iostream>

using namespace std;

int main()
{
    int n, m, nr = 0;
    cin >> n >> m;
    while(n > 0) {
        n -= m;
        nr++;
    }
    cout << nr;
}

Exercițiu propus

Completează următoarea secvență de cod:

Să se citească n și apoi n numere naturale:

int n;
cin >> n;
while(n != 0) {
    int nr;
    cin >> nr;
    ???--;
}

Bibliografie și alte resurse

Cuprinsul lecției

Se încarcă…

Citește și

Aria unui triunghi folosind coordonatele acestora în C++CMMDC recursiv a două numere naturale în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Instrucțiunea continue (structuri repetitive)Șiruri de caractere în C++. Tot ce trebuie să știiCMMMC a două numere în C++ (cel mai mic multiplu comun)Divide et Impera (metodă de programare C++)Valoarea absolută (modulul) unui număr în C++Oglinditul recursiv al unui număr în C++Interclasarea a doi vectori în C++Factorialul unui număr în C++Șirul lui Fibonacci în C++Tipuri de date în C++: numere întregi, reale, caractere și alteleBordarea unei matrice în C++Cea mai lungă secvență de elemente crescătoare în C++Cifra de control a unui numărCum să afișezi partea întreagă a unui număr real în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicVerifică dacă o literă este mică sau mare în C++Transformarea unui număr din baza 10 în baza 2 în C++Funcții în C++. Ce sunt subprogrameleRădăcina cubică a unui număr în C++ (cube root)Instrucțiunea do while (structuri repetitive)Instrucțiunea while (structuri repetitive)Verifică dacă un număr este par sau impar fără modulo în C++Inversarea unui șir de caractere în C++Tipul struct în C++. Ce sunt structurile de date neomogeneSuma divizorilor unui număr în C++Distanța dintre două puncte în C++Instrucțiunea break (structuri repetitive)Suma numerelor naturale dintr-un interval dat în C++Verifică dacă un număr dat este o putere de 2 în C++Aflarea sumei primelor N sume GaussTutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorNumărul minim de peroane pentru o gară în C++Pointer în C++. Variabile de tipul char * (char steluță)Al N-lea termen dintr-o progresie aritmeticăSuma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Verificare dacă un număr este palindrom în C++Codul ASCII (tabel complet)Verificarea unui an bisect în C++Maximul și minimul a trei valori în C++Inversarea unui vector în C++Instrucțiunea for (structuri repetitive)Verifică dacă un caracter este literă în C++Indicatorul lui Euler în C++Maximul și minimul a două valori în C++Prima cifră a unui număr în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Matrice pătratice în C++. Diagonala principală și secundarăRadicalul unui număr în C++ (rădăcina pătrată)Operații cu numere mari în C++ - Toate funcțiile explicateRidicarea la putere în timp logaritmic în C++. Exponențiere rapidăComplexitatea unui algoritm (timp și spațiu) în C++Suma elementelor unui vector recursiv în C++Citirea și afișarea matricelor în C++Cel mai semnificativ bit în C++Verifică dacă o literă este vocală în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleVerificare dacă șir de caractere este palindrom în C++Cifra maximă și minimă a unui număr în C++Aria și circumferința unui cerc în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Numărul aranjamentelor în C++ (formula aranjamentelor)Comentarii în C++Afișarea divizorilor primi ai unui număr în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleVectorii în C++: citire și afișareNumărul de divizori primi ai unui număr în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Numărul de cifre ale factorialului unui numărNumărul de divizori al unui număr în C++Transformarea unei litere mari în literă mică în C++Afișarea elementelor unui vector recursiv în C++Maximul și minimul unui vector în C++Ce este o funcție void în C++?Vectorii în C++: declarare și parcurgereTransformarea unui număr din baza 2 în baza 10 în C++Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Cum să citești și să afișezi în fișiere în C++Structuri repetitive (while, do while, for, etc)Câte numere naturale sunt într-un interval dat? (C++)Materia pentru olimpiada de informatică - tot ce trebuie să știiCum să calculezi instant 2 la puterea N în C++Cifra maximă a unui număr recursiv în C++Numărul de apariții al unui număr într-un vector în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Ce înseamnă endl în C++?Numărul permutărilor în C++ (formula permutărilor)Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Al N-lea termen Fibonacci în C++Instrucțiunea de decizie în C++: if, else, switch, caseDe ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Verifică dacă un număr aparține șirului Fibonacci în C++Maximul și minimul a n valori în C++Cel mai mic număr cu suma cifrelor N în C++Căutare binară în C++Calculul combinărilor de n luate câte k (nCk) în C++Verifică dacă un caracter este cifră în C++Al N-lea termen dintr-o progresie geometricăCitește un șir de caractere cu spații în C++Ce este o variabilă unsigned în C++?Ciurul lui Eratostene în C++Oglinditul unui număr în C++Verifică dacă trei puncte sunt coliniare C++Mediana unui șir de valori în C++Află secolul unui an citit de la tastatură în C++Numărul combinărilor în C++ (formula combinărilor)Ce înseamnă variabilă globală și locală în C++?Numere triunghiulare. Verificarea unui număr triunghiularCel mai puțin semnificativ bit în C++Recursivitate în C++Verificare număr prim în C++ (Clasa a IX-a)Do while vs while în C++ - Care e diferența?Copiuțe: Cifrele unui numărCel mai frecvent element dintr-un șir în C++Transformarea unei litere mici în literă mare în C++Generarea șirului Fibonacci generalizat în C++Suma 1 + 2 + 3 + ... + N în C++Vectori de frecvență (de apariții) în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortInterschimbarea a două variabile în C++ (3 metode)Cel mai mare divizor comun (CMMDC) a două numere în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont