Sunteți pe pagina 1din 7

Instructiuni repetitive

Daca dorim executia unor instructiuni de mai multe ori, in functie de o conditie, folosim instructiunile repetitive. Acestea sunt while, dowhile si for. 1 Instructiunea while Forma generala a instruciunii while: while (expresie) instructiune; Expresia poate fi de orice tip, inclusiv expresii aritmetice sau atribuiri, dar, ca si la instruciunea if, sunt de preferat expresii logice. Daca se doreste executarea unui grup de instructiuni se va folosi un bloc care sa formeze corpul instructiunii while. Executia instructiunii: - se evalueaza expresie - daca rezultatul este true (diferit de 0), se executa instructiune, apoi se revine la primul pas - daca rezultatul este false (0), se continua executia cu instructiunea urmatoare Poate cea mai simpla problema care se poate rezolva folosind structuri repetitive este afisarea valorilor intregi din [1,10]. In acest caz, o rezolvare de forma: ... cout << 1 << 2 << 3 << ... poate fi utilizata doar daca intervalul dat este mic si definit de catre constante. La afisarea valorilor dintr-un interval [a,b], a,b variabile intregi citite de la tastatura aceasta metoda nu poate fi folosita. P1. Afisati numerele de la 1 la 10 pe ecran. citesc1 2 3 4 5 6 7 8 9 10 P2. Afisati urmatoarele serii de numere pe ecran (a,b,n sunt intregi citite de la tastatura, a<b) 1 2 4 8 ... - valori mai mici sau egale citesc cu n a, a+1, ..., b n valori echidistante din intervalul [a,b] 1 0 1 0 1 ... - n valori int main(){ int i; i=1; while (i<=10){ cout << i<< " "; i++; } } n=10 a=2 b=7 1248 234567 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 1010101010

int main(){ int i,a,b,n; float pas,k; cout << "n="; cin >>n; cout << "a="; cin >>a; cout << "b="; cin >>b; i=1; while (i<=n){ cout << i<< " "; i=2*i; } cout << endl; i=a; while (i<=b){ cout << i << " "; i++; } cout << endl; pas=float(b-a)/n; k=a; while (k<=b){ cout << k << " "; k=k+pas; } cout << endl; i=1; while (i<=n){ cout << i%2 << " "; i++; } } In unele cazuri corpul instructiunii while poate sa fie vid. In acest caz vomverondela folosi intructiunea vida ; . P3. Se citeste un numar intreg de la tastatura. Afisati cel mai mare numar multiplu de 10 mai mic ca numarul citit. (while fara corp) n=123 120 2 Instructiunea do-while Forma generala a instruciunii do while: do instructiune; while (expresie); Observatiile de la instructiunea while raman valabile si pentru aceasta instructiune. Diferenta dintre while si do-while este aceea ca, in cazul instructiunii do- while instructiunea se executa cel putin o data, chiar si in cazul in care expresie este falsa la prima iteratie. Modul de executie al instructiunii: - se executa instructiune - se evalueaza expresie - daca rezultatul este true (diferit de 0) se revine la primul pas - daca rezultatul este false (0) se incheie instructiunea si se continua

programul int main(){ int n; cout << "n="; cin >>n; while ((n--)%10!=0); // while cu corp vid cout << n+1; } Urmatoarele secvente de instructiuni sunt echivalente: if (expresie) do instructiune; while (expresie); while (expresie) instructiune; Figura 5.1 P4. Se citesc de la tastatura doua caractere. Afisati pe ecran caracterele si codurilor lor ASCII din intervalul dat de catre caracterele citite. AC A 65 B 66 C 67 P5. Se citeste de la tastatura un numar real cu 3 zecimale. "Mutati" virgula pe toate pozitiile interioare posibile in cadrul numarului initial. Afisati pe ecran rezultatul, cate un numar pe un rand. int main(){ char c1,c2,t,c; cin >> c1 >> c2; if (c1>c2){t=c1; c1=c2; c2=t;} c=c1; do{ cout << c << " - " << int(c) << endl; c++; }while(c<=c2); n=12.789 1278.9 127.89 12.789 1.2789 3 Instructiunea for In general instructiunile while si do-while poarta numele de cicluri cu numar necunoscut de pasi. Instructiunea for este instructiunea ce implementeaza in C ciclul cu numar cunoscut de pasi (desi vom vedea ca nu este limitata la acest tip de cicluri). Forma generala a instruciunii for: for(expr1; expr2; expr3) instructiune; sau, de obicei: for(init; cond_de_oprire ; reinit) instructiune; Modul de executie al instructiunii: - se executa init - cat timp expresie este adevarata

int main(){ float n; cout << "n="; cin >> n; n=n*100; do{ cout << n << endl;; n=n/10; } while(n>1); } - se executa instructiune - se executa reinit Instructiunea for este folosita, in principal, pentru parcurgerea seriilor de numere. P6. Afisati urmatoarele serii de numere pe ecran (a,b,n sunt intregi citite de la tastatura, a<b): 1,2,3,...,10 n, n-1, ..., 2, 1, 0, -1, -2, ..., -n valorile intregi din intervalul [a,b], in ordine crescatoare puterile lui 2 mai mici decat n primele n puteri ale lui 2 538 1 2 3 4 5 6 7 8 9 10 int main(){ int n,a,b,i,p; cin >> n >> a >> b; for(i=1;i<=10;i++) cout << i << " "; cout << endl; for(i=n;i>=-n;i--) cout << i << " "; cout << endl; for(i=a;i<=b;i++) cout << i << " "; cout << endl; for(i=1;i<=n;i=2*i) cout << i << " "; cout << endl; p=1; for(i=1;i<=n;i++){ cout << p << " "; p=2*p; } } 5432101 2 3 4 5 345678 124 1 2 4 8 16 P7. Afisati, folosind trei metode diferite urmatoarea serie de numere pe ecran: 1 0 1 0 1 0 ..., in total n valori n=7

1010101 1010101 1010101 Cum partea de reinitializare din cadrul buclei for contine orice expresie, nu numai incrementare/decrementare, instructiunea for devine echivalenta ca functionalitate cu bucla while. In figura 5.2 este data echivalenta dintre instructiunile for si while: int main(){ int n,i,b; cout << "n="; cin >> n; for(i=1;i<=n/2;i++) cout << 1 << " " << 0 << " "; if (n%2==1) cout << 1; cout << endl; for(i=1;i<=n;i++) cout << i%2 << " "; cout << endl; b=1; for(i=1;i<=n;i++){ cout << b << " "; b=!b; } } expr1; while (expr2){ instructiune; expr3; } for(expr1;expr2;expr3) instructiune; Figura 5.2 Folosirea expresiei virgula reprezinta o varianta prin care putem controla mai multe variabile in cadrul aceleiasi bucle for. P8. Afisati urmatoarele serii de numere pe ecran: 1 9 2 8 3 7 ... 9 1 1 2 4 8 ... , in total n valori n=5 192837465564738291 1 2 4 8 16 Putem folosi, in cadrul instructiunii for, mai multi contori, eventual de tipuri diferite. In plus, toate partile din for sunt optionale, urmatoarea bucla fiind bucla infinita: for(;;); P10. Afisati tabela cu codurile ASCII, cate 10 pe un rand. int main(){ int n,i,j,p; cout << "n="; cin >> n; for(i=1,j=9; i<10 ;i++,j--) cout << i << " " << j << " "; cout << endl; for(i=1,p=1; i<=n; i++,p*=2) cout << p << " "; }

............. <60 =61 >62 ?63 @64 A65 B66 C67 D68 E69 F70 G71 H72 I73 J74 K75 L76 M77 N78 O79 ................ 4 break si continue In cazul care se doreste iesirea din bucla curenta imediat, eventual in functie de o alta conditie decat cea din bucla, folosim instructiunea break. De obicei vom folosi instructiunea break pentru a nu complica conditia din bucla. Sintaxa: break; Instructiunea break va cauza iesirea doar din cadrul buclei curente, in cazul in care avem mai multe bucle imbricate, iesirea facandu-se in bucla imediat superioara. Tot pentru controlul fluxului de executie putem folosi instructiunea continue. Sintaxa: continue; Analog instructiunii break, fluxul executiei din cadrul buclei curente este intrerupt, dar executie revine la conditia de oprire din bucla. int main(){ unsigned char c; for(c=0;c<255;c++){ cout << c << "-" << int(c) << "\t"; if (c%10==9) cout << endl; } } P11. Afisati pe ecran numerele prime mai mici decat n. n=20 1 2 3 5 7 11 13 17 19 P12. Afisati pe ecran urmatoarele numere, cu doua zecimale exacte: 1/10, 1/9, 1/8, ... 1/1, 1/-1, 1/-2, ... 1/-10 0.1 0.11 0.12 0.14 0.17 0.2 0.25 0.33 0.5 1 1 0.5

0.33 0.25 0.2 0.17 0.14 0.12 0.11 0.1 - 54 int main(){ int i; for(i=10;i>=-10;i--){ if (i==0) continue; cout.precision(2); cout << 1./i << " "; } int main(){ int n,d,i; bool prim; cout << "n="; cin >>n; for(i=1;i<=n;i++){ prim=true; for(d=2;d<=i/2;d++) if (i%d==0){prim=false; break;} if (prim) cout << i << " "; } } 5.5 instructiunea goto Trecerea fluxului de executie la o pozitie oarecare, identificata printr-o eticheta se poate realiza prin instructiunea goto. Definirea etichetei se face in felul urmator: eticheta: iar utilizarea instructiunii goto: goto eticheta; Chiar daca este o instructiune pusa la dispozitie in cadrul limbajului C, folosirea acesteia nu este recomandata, folosirea instructiunilor if, ifelse si while putand realiza acelasi lucru, iar depanarea este mai facila. P13. Folosind instructiunea goto, afisati pe ecran numerele intregi din intervalul [a,b]. 36 3456 int main(){ int i,a,b; cin >> a >> b; i=a; salt: cout << i << " "; i++; if (i<=b) goto salt; // se revine la eticheta salt

S-ar putea să vă placă și