
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 putereab
): trebuie să îl înmulțim pea
în mod repetat, deb
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
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0