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.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
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:
a^b
(a
la puterea b
): trebuie să îl înmulțim pe a
în mod repetat, de b
ori;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ă.
while
Iată sintaxa instrucțiunii. Este asemănătoare ca la cea de if
.
while(condiție) {
instrucțiune 1;
instrucțiune 2;
…
}
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ă.
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ă.";
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;
}
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;
???--;
}