Instructiunea while while (expresie) instructiune; Modul de executie: 1) Se evalueaza expresie, daca expresie = 0 (fals) se iese din instructiunea while, altfel (expresie 0, deci adevarat) se trece la pasul 2. 2) Se executa instructiune. Se trece la pasul 1. Exemplu: algoritmul lui Euclid pentru calcularea celui mai mare divizor comun a doua numere intregi. void main (void) { int m,n,r; cout<<"\n\n***** Algoritmul lui Euclid (while) *****"; cout<<"\nintroduceti doua numere intregi:\n"; cin>>m>>n; r=m%n; while(r) { m=n; n=r; r=m%n; cout<<"c.m.m.d.c.="<<n; Exemplu: maxim si pozitia sa dintr-un sir de numere reale citite de la tastatura. void main (void) { float x,xmax; int n,i,poz; cout<<"\n*** Maxim si pozitia sa (fara tablou) ***"; cout<<"\nintroduceti lungimea sirului:"; cin>>n; xmax=-1; poz=-1; i=0; while (i<n) { cout<<"\nintroduceti elementul "<<i<<": "; cin>>x; if (x>xmax) { xmax=x; poz=i; i++; cout<<"\nmaximul="<<xmax<<" in pozitia "<<poz; Instructiunea do while 1
do instructiune; while (expresie); Modul de executie: 1) Se executa instructiune. Se trece la pasul 2. 2) Se evalueaza expresie, daca expresie = 0 (fals) se iese din instructiunea do while, altfel (expresie 0, deci adevarat) se trece la pasul 1. Exemplu: algoritmul lui Euclid pentru calcularea celui mai mare divizor comun a doua numere intergi. int m,n,r; char tasta; cout<<"\n\n***** Algoritmul lui Euclid (do while) *****"; cout<<"\nintroduceti doua numere intregi:\n"; cin>>m>>n; r=m%n; m=n; n=r; while(r!=0); cout<<"c.m.m.d.c.="<<m; Exemplu: tabelarea valorilor unei functii pe un interval. float a,b,x,y,pas; do { cout<<"\n*** Tabelare valori functie x^2+1 ***"; cout<<"\nintroduceti limitele intervalului si pasul:"; cin>>a>>b>>pas; while((a>=b) (pas<=0)); cout<<"\n x y"; x=a; while(x<=b) { y=x*x+1; cout<<"\n"<<x<<" "<<y; x+=pas; Exemplu: media artimetica a numerelor strict pozitive si cea a numerelor strict negative dintr-un sir citit de la tastatura si terminat cu valoarea 0. #include<iostream.h> void main() { float medp, medn, x; int np, nn; cout<<"\n***media numerelor pozitive si negative dintr-un sir terminat cu 0 ***"; medp=medn=0; np=nn=0; 2
cout<<"\nintroduceti numarul curent:"; cin>>x; if (x>0) { medp+=x; np++; else if (x<0) { medn+=x; nn++; while (x!=0); if (np!=0) medp/=np; if (nn!=0) medn/=nn; cout<<"\nmedia nr pozitive="<<medp; cout<<"\nmedia nr.negative="<<medn; Exemplu: aproximarea sumei seriei: e a 2 3 a a a = 1+ + + 1! 2! 3! n a +... + +... n! insumarea se face pana cand modulul termenului general < ε (ε > 0). #include<iostream.h> #include<math.h> int n=2; double a, suma=1, tg, eps; cout<<"*** Dezvoltare in serie exp(a) ***\n"; cout<<"introduceti punct si epsilon:"; cin>>a>>eps; tg=a; suma+=tg; tg*=a/n; n++; while (fabs(tg)>eps); cout<<"seria="<<suma; Instructiunea for for (instructiune_initiala; expresie1; expresie2) instructiune; unde: instructiune_initiala poate sa fie o declaratie sau o expresie (utilizata in general pentru initializarea sau asignarea unei variabile sau set de variabile); poate fi si instructiune nula; expresie1 este controlul buclei (se executa instructiunea din corpul for ori de cate ori expresie1 este evaluata la o valoare 0, adevarat). Daca expresie1 este de la inceput = 0, fals, instructiune nu se executa niciodata; 3
expresie2 este evaluata dupa fiecare iteratie: utilizata in general pentru a modifica variabila initializata de instructiune_initiala. Daca expresie1 este fals inca de la inceput, expresie2 nu este evaluata niciodata. Modul de executie: 1) Se executa instructiune_initiala. 2) Se evalueaza expresie1: daca expresie1 = 0 (fals) se incheie executia instructiunii for, altfel (expresie1 0, adevarat) se trece la pasul 3. 3) Se executa instructiune din corpul lui for. Se evalueaza expresie2. Se trece la pasul 2. Exemplu: calcularea factorialului unui numar natural n! (corect pentru n 13). unsigned long int fact=1, n, i; cout<<"*** Factorial ***\n"; cout<<"introduceti un nr natural:"; cin>>n; for (i=2; i<=n; i++) fact*=i; cout<<"factorial de n este: "<<fact; Exemplu: calcularea valorii aproximative a integralei definite: b a f ( x) dx prin metoda dreptunghiurilor (aici f(x) = x). void main(void) { float a,b,lat,suma=0,x; int n,i; cout<<"\n\n***** Integrala *****"; cout<<"\nintroduceti lim integ si nr. dreptunghiuri:"; cin>>a>>b>>n; while((a>=b) (n<4)); x=a; lat=(b-a)/n; for (i=1;i<=n;i++) { suma+=lat*x; x+=lat; cout<<"integrala="<<suma; Instructiunea break Este utilizata pentru a incheia instructiunile while, do while, for si switch. Pentru instructiuni imbricate incheie instructiunea cea mai interioara. Executia continua cu instructiunea imediat urmatoare celei intrerupte. 4
Instructiunea continue Incheie iteratia curenta de la o instructiune while, do while sau for. Astfel: -executia instructiunii while, respectiv do while continua cu evaluarea expresiei reprezentand controlul ciclului; -executia instructiunii for continua cu evaluarea expresiei2. Instructiunea goto Transfera executia la instructiunea etichetata specificata, dar in interiorul aceleiasi functii. goto eticheta; unde eticheta este un identificator furnizat de utilizator, urmat de caracterul ':'. Observatie. O eticheta nu poate sa preceada ''. Se utilizeaza in acest caz o instructiune nula;........... sfarsit: ; //instructiune nula Este interzis saltul peste o definitie de variabila cu initializator explicit (operator =) sau initializator implicit (constructor de clasa). Exceptie: definitia variabilei apare intr-un bloc si este sarit intregul bloc. Exemplu: rezolvarea ecuatiei de gradul 2. #include<iostream.h> #include<math.h> void main() { double a,b,c,delta,x,x1,x2,x1r,x1i,x2r,x2i; cout<<"\n*** Ecuatia de grad II, cu goto ***"; cout<<"\nintroduceti coeficientii ecuatiei:\n"; cin>>a>>b>>c; if (a!=0) goto ecgr2; if (b!=0) goto ecgr1; if (c!=0) goto vida; cout<<"\nsolutia este R!"; vida: cout<<"\nsolutie vida!"; ecgr1: x=-c/b; cout<<"\nx="<<x; ecgr2: delta=b*b-4*a*c; if (delta<0) goto imag; x1=(-b+sqrt(delta))/2/a; x2=(-b-sqrt(delta))/2/a; cout<<"\nx1="<<x1<<" x2="<<x2; imag: x1r=-b/2/a; x2r=x1r; x1i=(sqrt(-delta))/2/a; x2i=-x1i; cout<<"\nx1r="<<x1r<<" x1i="<<x1i; cout<<"\nx2r="<<x2r<<" x2i="<<x2i; 5
gata: ; // aici este o instr vida 6