În C/C++ instrucțiunile repetitive sunt:
while,
do-while și
for.
For-ul este doar o formă mai specială de while. Adică tot ce se poate face cu un for, se poate face și cu un while (chiar și viceversa, dar în pascal invers nu cred că este posibil).
Forma generală a instrucțiunii for este următoarea:
- while (condiție)
- {
- //corpul instructiunii while
- //cod care urmează să fie executat/repetat dacă se intră în while
- instructiune1;
- instructiune2;
- ...
- }
Asta înseamnă că atât timp cât condiția dintre paranteze este adevărată, se va repeta ce este între acolade { } . Condiția se modifică în interiorul corpului instuctiunii while (noobakaflo a dat deja un exemplu).
De asemenea instrucțiunea while execută doar prima linie sau primul bloc de cod de după ea (la fel și forul). Bloc de cod înseamnă mai mult de o intrucțiune toate încapsulate între acolade.
Fie următorul cod:
- int i = 0;
- while(i<10)
- cout<<++i;
- cout<<i; //ma da de gol indentarea :))
Outputul va fi următorul:
Explicație: Codul repetă doar primul cout. Astfel
i este incrementat și afișat. După ce
i are valoarea 10, se iese din bluca while și se execută cout-ul de mai jos. Unii oameni ar fi crezut că codul afișează :
De aceea am menționat că while repetă doar prima linie sau primul bloc între acolade.
Această formă de while se mai numește instrucțiune while condiționată anterior (datorită condiției de intrare în buclă aflate la începutul acesteia)
Cealaltă formă a while-ului este do-while și se mai numește intrucțiune while condiționată ulterior (datorită condiției de intrare în buclă aflate la sfârșitul acesteia)
Forma acestei bucle este următoarea:
- do{
- //cod care urmează să fie executat/repetat cel puțin odată
- while(condiție);
Astfel putem asigura executarea codului cel puțin odată. Dacă condiția este încă adevărata și după prima iterație codul va continua să fie repetat. Dacă nu, se iese din while.
Forma generală a buclei for este următoarea:
- for (initializare;conditie;pas de incrementare)
- {
- //corpul for-ului
- //instructiuni ce urmează să fie executate/repetate dacă se intră în for
- }
Astefel for-ul ne dă posibilitatea să avem deja un contor(sau mai multe) care parcurge un interval (a dat un exemplu și noobakaflo).
Fiecare 'parametru' al instructiunii for este optional.
Exemplu:
- int i = 0;
- for( ; ; )
- {
- i++;
- cout<<i;
- if (i==10)
- break;
- }
În acest exemplu, toți parametrii lipsesc. Astfel am format o buclă "infinită". Totuși bucla este oprită de acel "break" care ne scoate din for când i este 10. Puteți observa că for-ul poate imita și el un while. De asemenea, void spunea că for este, teoretic, o instrucțiune repetitivă cu număr cunoscuți de pași (În pascal, da. În c/c++, nu neapărat)
De asemenea parametrii pot să lipsească în mai multe moduri, nu doar toți deodată.
Exemple:
- for(int i=0 ; ; )
- for( ; i<10 ; )
- for( ; ; ++i )
- for(int i=50 ; i<100 ; )
- for( ; i>40 ; i-=2 )
- for(i=2 ; ; i=i+2 )
Dacă observi, la ultimele două am modificat PASUL. C/C++ permite în bucla for, un pas diferit. Astfel poți sa faci de exemplu, un for care "trece" prin toate numerele divizibile cu 5:
- for(int i=5 ; i<=100 ; i+=5)
- cout<<i<<endl;
De asemenea am menționat mai sus că for-ul din C/C++ poate avea mai mulți contori.
Exemplu:
- for(int i=0,j=100 ; i<j ; i++,j--)
- {
- cout<<i<<" "<<j<<endl;;
- }
Poți testa chiar tu să vezi ce face codul. Poți să te joci un pic să vezi cât de flexibil este for-ul, astfel înveți cel mai bine.
Observație: Dacă declari variabile ÎN interiorul instrucțiunii for, acestea au "viață" doar cât timp se execută acel for doar în interiorul corpului for.
Exemplu:
- //contor declarat ÎN interiorul instrucțiunii for
- for(int i=0 ; i<10 ; i++)
- {
- //în corpul for
- cout<<i; //avem acces la i;
- }
- //înafara corpului
- cout<<i; //eroare - nu mai avem acces la i
Pe când aici:
- int i; //contor declarat înafara instrucțiunii for
- for(i = 0; i<10 ; i++)
- {
- //în corpul for
- cout<<i; //avem acces la i
- }
- //înafara corpului
- cout<<i; //și aici avem acces la i
De asemenea, ca și while, for-ul execută doar prima linie SAU primul bloc de cod (cod între acolade).
Exemplu:
- int i;
- for(i=0;i<10;i++)
- cout<<i;
- cout<<i*i; // n-am mai indentat ca să nu mă dau de gol - i just did:))
Output-ul va fi:
Mulți începători vor crede că va afișa 112439 etc. For-ul repetă doar prima linie. La ieșire din for, i-ul are valoarea 10 si se afișează 100 cu cout-ul dinafara for-ului.
Sper ca ai avut răbdare să citești tot

.