Documente Academic
Documente Profesional
Documente Cultură
Instrucţiuni de ciclare
Instrucţiunea while
#include <iostream>
using namespace std;
void main()
{
int contor = 1;
while ( contor <= 3 )
{
cout << "Contor = " << contor << endl;
contor = contor + 1;
}
cout << "La revedere." << endl;
}
Funcţionarea programului:
1. contor primeşte valoarea 1
2. condiţia contor < =3 este evaluată ca adevărată;
3. deoarece condiţia este adevarată, se execută corpul ciclului:
a. Valoarea curentă a contorului este afişată: Contor = 1;
b. contorul este incrementat, contor devine 2
4. condiţia contor < =3 este evaluată ca adevărată;
5. deoarece condiţia este adevarată, se execută corpul ciclului:
a. Valoarea curentă a contorului este afişată: Contor = 2;
b. contorul este incrementat, contor devine 3
6. condiţia contor < =3 este evaluată ca adevărată;
7. deoarece condiţia este adevarată, se execută corpul ciclului:
a. Valoarea curentă a contorului este afişată: Contor = 3;
b. contorul este incrementat, contor devine 4
8. condiţia contor < =3 este evaluată ca falsă;
9. deoarece condiţia este falsă, se sare peste corpul ciclului;
10. se afişează "La revedere."
while ( condiţie )
instrucţiune
Pentru a verifica dacă un ciclu while este corect scris, verificaţi valorile iniţiale
al variabilelor care intervin în ciclu, verificaţi dacă reluarea ciclului este întreruptă
după prelucrarea ultimei valori şi verificaţi ce schimbări de variabile se produc la
fiecare repetare a ciclului.
Exemple:
1. Calculul factorialului unui număr n
Definiţia valorii n! poate fi scrisă astfel:
n! = n * (n-1) * (n-2) * (n-3) * . . . 4 * 3 * 2 * 1
De exemplu:
6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
Numărul n trebuie să fie pozitiv. Prin convenţie 0! = 1.
#include <iostream>
using namespace std;
void main()
44
{
long n, fact = 1;
cout << "Introduceti n: ";
cin >> n;
if ( n>= 0 )
{
while ( n > 1 )
{
fact = fact * n;
n = n - 1;
}
cout << "n! = " << fact << endl;
}
else
cout << "n trebuie sa fie >= 0." << endl;
}
...
Atenţie la scrierea formulei. Dacă scrieţi (1 / 2) * g *t * t s-ar putea să realizaţi
un ciclu infinit deoarece (1 / 2) calculat în mulţimea numerelor întregi este 0!
...
45
long v, suma;
suma = 0;
cout << "Introduceti o valoare intreaga : ";
cin >> v;
while (v != 0)
{
suma = suma + v;
cout << "Introduceti inca o valoare sau 0 pentru a incheia : ";
cin >> v;
}
cout << "Suma valorilor introduse este : " << suma << endl;
...
Cicluri suprapuse
Uneori realizarea corpului unui ciclu implică scrierea unui bloc de instrucţiuni
care la rândul lui conţine cicluri. Astfel de structuri de cod sunt denumite cu cicluri
suprapuse. Exemplu:
Scrieţi un program care afişează pe ecran un şir de m caractere '*'. Modificaţi
programul astfel încât să afişeze n linii conţinând fiecare m caractere '*'.
#include <iostream>
using namespace std;
void main()
{
int m, j;
cout << "Introduceţi nr. de caractere de pe linie : ";
cin >> m;
j = 0;
while (j < m)
{
cout << "*";
j = j + 1;
}
cout << endl;
}
#include <iostream>
using namespace std;
void main()
{
int m, n, i, j;
{
cout << "*";
j = j + 1;
}
cout << endl;
i = i + 1;
}
}
Instrucţiunea do
Exemplu fundamental:
char rasp;
double x;
do
{
cout << “Introduceti x (grade) : “;
cin >> x;
cout << “sin(x) = “ << sin(3.14159 * x / 180.) << endl;
cout << “Mai continuati? (d/n) “;
cin >> rasp;
}
while ( rasp == 'd');
Evident în acest caz programul trebuie să realizeze cel puţin un calcul (altfel
nu ar avea rost să lanseze în execuţie programul). Variabila care determină reluarea
sau oprirea ciclului nu are o valoare definită la prima intrare în ciclu, dar în interiorul
acestuia este iniţializată.
Dacă s-ar folosi tot while, secvenţa de cod scrisă ar trebui corectată astfel:
char rasp;
double x;
rasp = 'd';
while ( rasp == 'd')
{
cout << “Introduceti x (grade) : “;
cin >> x;
cout << “sin(x) = “ << sin(3.14159 * x / 180.) << endl;
cout << “Mai continuati? (d/n) “;
cin >> rasp;
}
#include <iostream>
#include <math.h>
#include <ctype.h>
using namespace std;
void main()
{
char rasp;
double x;
do
{
cout << "Introduceti x (grade) : ";
cin >> x;
cout << "sin(x) = " << sin(3.14159 * x / 180.) << endl;
cout << "Mai continuati? (d/n) ";
cin >> rasp;
}
while ( toupper(rasp) == 'D');
}
Instrucţiunea for
Instrucţiunea for este preferată ori de câte ori trebuie să realizăm un ciclu care
foloseşte un contor. Ea poate fi însă folosită însă în toate cazurile în care trebuie să
realizăm un ciclu, şi reprezintă o modalitate compactă şi elegantă de scriere a
acestora.
Exemplu:
În exemplul dat, scrierea cu for este mai compactă. Toate cele trei elemente
care intervin în definirea unui ciclu care foloseşte un contor:
1. iniţializarea contorului (contor = 0),
2. verificarea condiţiei de reluare (contor < 10) şi
3. incrementarea contorului înaintea unei noi reluări (contor++),
sunt plasate în acelaşi loc, fiind mai uşor de controlat şi de verificat. Astfel frecventa
eroare cauzată de omiterea incrementării valorii contorului la sfârşitul ciclului nu mai
poate apărea.
Dacă înaintea unui ciclu trebuie realizate mai multe iniţializări, acestea pot
scrise în for una după alta, despărţite prin virgule:
long sum;
Oricare dintre cele trei părţi ale instrucţiunii for pot lipsi. Lipsa condiţiei de
reluare este echivalentă cu a scrie o condiţie care este întotdeauna adevărată.
Ieşirea dintr-un astfel de ciclu se poate face folosind instrucţiunea break.
Exemplu:
for ( ; ; )
{
cout << "Introduceti x (grade) : ";
cin >> x;
cout << "sin(x) = " << sin(3.14159 * x / 180.) << endl;
cout << "Mai continuati? (d/n) ";
cin >> rasp;
if (toupper(rasp) != 'D')
break;
}
Executarea instrucţiunii break provoacă o ieşire imediată din ciclul for. Ea
poate fi folosită şi pentru a ieşi din ciclurile while sau do.