Să considerăm următoarea problemă: “Se citesc trei numere naturale. Să se determine suma lor.” Desigur, este o problemă banală, dar haideți să o analizăm și să vedem mai multe soluții!
Soluția 1
Folosim trei variabile: a
, b
, c
. Le citim și afișăm suma lor.
#include <iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; cout << a + b + c; return 0; }
Soluția 2
Această soluție este asemănătoare cu cea anterioară, dar calculăm suma valorilor într-o variabilă suplimentară.
#include <iostream> using namespace std; int main() { int a, b, c, S; cin >> a >> b >> c; S = a + b + c; cout << S; return 0; }
Soluția 3
Vom calcula suma valorilor pe rând. Atenție la inițializarea lui S
cu 0
!!!
#include <iostream> using namespace std; int main() { int a, b, c, S; S = 0; cin >> a >> b >> c; S = S + a; S = S + b; S = S + c; cout << S; return 0; }
Soluția 4
Observăm că după ce adunăm la S
valoarea unei variabile, nu o mai folosim. Putem astfel să folosim o singură variabilă în care să citim de trei ori câte un număr și, după fiecare citire, să adunăm la S
valoarea curentă a variabilei.
#include <iostream> using namespace std; int main() { int a, S; S = 0; cin >> a; S = S + a; cin >> a; S = S + a; cin >> a; S = S + a; cout << S; return 0; }
Soluția 5
Observă că în soluția anterioară am scris de trei ori aceleași instrucțiuni: cin >> a; S = S + a;
. Trebuie înțeles că ele s-au executat de trei ori, dar valorile pe care le aveau variabilele s
și S
la fiecare pas erau diferite.
Aici intervin structurile repetitive: În loc să scriem de trei ori aceleași instrucțiuni, le vom scrie o singură dată, dar vom cere să fie executate de trei ori!. De exemplu putem folosi instrucțiunea while
:
#include <iostream> using namespace std; int main() { int a, S; S = 0; int i = 1; while(i <= 3) { cin >> a; S = S + a; i++; } cout << S; return 0; }
O altă soluție, folosind instrucțiunea for
:
#include <iostream> using namespace std; int main() { int a, S; S = 0; for(int i = 1 ; i <= 3 ; i ++) { cin >> a; S = S + a; } cout << S; return 0; }