INSTRUCŢIUNEA FOR
Sunt situatii când la scrierea unor secvente repetitive sa existe o instructiune expresie care initializeaza prin atributuri sau apeluri de functii identificatori din corpul buclei si care se executa o singura data înainte d 535d33f e instructiunile corpului, si în corpul buclei ultima instructiune sa fie aceea care reinitializeaza secventa repetitiva în sensul ca modifica identificatorii care apar în cadrul testului initial care se face înainte de intrarea în bucla. În aceste situatii, cea mai nimerita este instructiunea for care are urmatoarea sintaxa:
for (expr1 ; expr2 ; expr3)
instructiune
Expresiile expr1 ; expr2 ; expr3 au semnificatia:
- expr1 : constituie initializarea buclei si este o instructiune expresie care se executa o singura data înaintea începerii efective a ciclarii. Poate contine atributuri, apeluri de functii si prezenta ei în cadrul instructiunii for este optionala;
- expr2 : este o expresie, de obicei rationala si are rolul de test initial al buclei. si expr2 este optionala;
- expr3 : constituie reinitializarea ciclului si se executa la fiecare executie a corpului buclei la sfârsitul acesteia. Poate contine atributuri, apeluri de functii si de asemenea este optionala.
Executia instructiunii for se deruleaza astfel:
- se executa expr1, adica initializarea buclei;
- se evalueaza expr2:
- daca are valoarea egala cu zero (falsa) instructiunea for se termina si se trece la urmatoarea instructiune de dupa for;
- daca are valoarea diferita de zero (adevarata), atunci se executa instructiune, deci corpul buclei for;
- se executa expr3, adica reinitializarea buclei si ciclul for continua cu reevaluarea expr2 s.a.m.d.
Se observa, la fel ca la instructiunea while, ca secventa de instructiuni care constituie corpul buclei for poate sa nu se execute niciodata.
Într-adevar, daca la prima evaluare a expresiei expr1 ea este falsa atunci nu se executa nimic si se trece la urmatoarea instructiune de dupa for. De fapt, instructiunea for este o generalizare a lui while si este echivalenta cu secventa:
expr1 ;
while (expr2)
si deci for are în plus fata de while initializarea si reinitializarea buclei. Astfel, daca expr1 si expr3 lipsesc, instructiunea:
for ( ; expr2 ;)
instructiune
este echivalenta cu:
while (expr2)
instructiune
Atât expresiile expr1, expr2, cât si expr3 pot fi omise în instructiunea for, cu conditia ca punctul si virgula (' ;) sa ramâna, dupa cum se observa mai sus. Daca toate cele trei expresii lipsesc:
for (; ;)
instructiune
este o bucla infinita, iesirea din ea facându-se cu break, return sau exit ( ).
Un exemplu de utilizare a instructiunii for este prezentat în programul de mai jos, care tabeleaza functiile matematice sin, cos si tan din grad în grad de la 0 la 45 de grade.
Exemplu 3.6.1.
# include " stdio.h"
# include " math.h"
# define PI 3.14159265
main ( )
În urmatorul exemplu sunt folosite trei instructiuni for îmbricate pentru a genera toate combinarile de n obiecte luate câte trei.
Exemplul 3.6.2.
# include "stdio.h"
main ( )
for (i = 1; i > = n - 2; i + +)
for (j = i + 1; j < = n - 1; j + +)
for (k = j + 1; k < = n; k + +)
printf ("%u %u %u \n", i, j, k) ;
Putem inversa elementele sirului de numere A = (a0, a1, . . . . .an-2, an-1) interschimbând elementele egal departate de capete, deci din exterior spre mijloc, dupa cum se poate vedea în programul de mai jos.
Exemplul 3.6.3.
# include "stdio.h"
main ( )
n = sizef (x)/2 ;
printf ("sirul initial este:") ;
for (i = 0; i < n; i + + )
printf ("%d", x i
for (i = 0; i = n/2 - 1; i + + )
printf ("sirul inversat este:") ;
for (i = 0; i < n; i + +)
printf ("%d", x i
Înca o precizare asupra instructiunii for. În situatia când în initializarea buclei for este nevoie sa initializam si apoi sa modificam mai mult de un identificator se poate utiliza cu succes operatorul virgula (','). De exemplu:
for (i = 0, j = n; i < n; i + +, j - -) .
|