[Curs] C - Lectia 04 - Instructiuni de control
Scris de tercot
In C exista doua tipuri de instructiuni de control a fluxului de rulare si ar putea fi etichetate ca “structuri alternative” si “structuri repetitive”.
Ce fac acestea ? Instructiuni alternative verifica o conditie si in functie de aceasta ruleaza un bloc de instructiuni sau altul. Instructiunile repetitive, dupa cum le spune si numele, ruleaza un bloc de instructiuni pana cand apare conditia de oprire a repetarii.
Ca si in cazul functiilor, mai multe instructiuni pot forma un bloc folosind acoladele.
1. Instructiunea IF
Aceasta instructiune permite ramificarea programului in functie de valoarea conditiei.
Sintaxa acesteia este:
executa cod1;
else
executa cod2;
Cum functioneaza ? Blocul “Conditie” este evaluat si daca acesta ia valoarea True este executat codul 1. In caz contrar (Conditia ia valoarea False) este executat codul 2.
De mentionat 2 idei:
a. else nu e obligatoriu sa apara;
b. se pot executa mai multe instructiuni pentru fiecare din cazuri cu conditia ca acestea
sa fie tinute in interiorul unui bloc determinat de { si }.
Sa vedem si un exemplu concret:
printf(”Adevarat”);
else
printf(”Fals”);
In exemplul de mai sus se evalueaza expresia 1 == 1 care intotdeauna va returna True, deci blocul dat ca exemplu intotdeauna va afisa “Adevarat”. Daca am inlocui 1 == 1 cu 1 == 0
conditia va deveni Falsa la fiecare rulare, deci de fiecare data blocul respectiv va afisa “Fals”.
Pentru a putea fi folosita in practica, instructiunea if permite utilizarea variabilelor.
Adica, putem avea int a = 1; si int b = 2; care apoi sa le evaluam. Daca expresia dintre paranteze va fi de forma if( a == b ) rezultatul va fi “False” pentru ca a = 1 si b = 2 ceea ce e fals. In schimb daca expresia ar fi de forma if( a != b ) rezultatul va fi “True”.
De ce ? Pentru ca a nu este egal cu b iar expresia va returna “True” daca a nu este egal cu b (operatorul != ).
Trebuie mentionat ca functia if poate fi folosita doar in cazul numerelor. In cazul sirurilor se folosesc functii specializate despre care voi vorbi intr-o lectie care urmeaza.
Pentru a complica putin treburile, e bine de stiut ca instructiunea if permite si expresii compuse, adica 2 sau mai multe expresii legate intre ele prin operatorii logici && (si) respectiv || (sau). Cum putem folosi asta ? Simplu, dau un exemplu mai jos care va ajuta sa intelegeti:
a = 1;
b = 2;
c = 3;
if( a == 1 && b
printf("Am facut un SI logic intre rezultatele expresiilor a > b si b < cn.");
printf("Prima returneaza False.n");
printf("A doua returneaza True.n");
printf("Rezultatul e False pentru ca SI logic aplicat pe True si False e False.n");
printf("Adica textul de aici nu va fi afisat niciodata ;-) .n");
}
Instructiunea IF accepta de asemenea si “inlantuiri”. Adica, aplicam un IF iar in cazul in care
conditia rezultata este False, punem un else care foloseste mai departe un alt IF. Cel mai bine se intelege printr-un exemplu:
puts(”Conditia ia valoarea True”);
else if( conditie2 )
puts(”Conditia 1 a luat valoarea False, iar conditie2 True”);
else
puts(”Conditia 1 si Conditia 2 au luat valoarea False”);
Simplu, nu ? Dar ganditi-va ce ar iesi daca am avea de verificat 10 conditii. Pentru cazuri mai complexe, s-a creat instructiunea switch.
2. Instructiunea switch functioneaza identic cu instructiunea IF cu diferenta ca aceasta permite mai multe alternative. IF permite doar 2 alternative (True sau False).
Switch ne permite sa declaram mai multe alternative si sa asociem cate o actiune pentru fiecare. Sintaxa este de felul urmator:
case constanta1: instructiune1;break;
case constanta2: instructiune2;break;
…
case constantaN: instructiuneN;break;
default: instructiuneDefault;
}
Ce inseamna asta ? Se verifica expresia data ca parametru instructiunii switch iar apoi rezultatul este comparat pe rand cu fiecare caz specificat. Daca expresia are valoarea constantei nr. 1, se executa instructiune1 iar apoi se iasa din structura de control (instructiunea break obliga iesirea). Daca expresia nu se valideaza se trece la urmatorul caz si asa mai departe pana cand se termina cazurile. Daca expresia nu corespunde nici unui caz specificat se executa instructiunea data la cazul “default”. Acesta poate lipsi dar nu este recomandat. Dupa ce instructiunea switch si-a facut treaba programul este executat mai departe.
3. Instructiunea repetitiva WHILE
Foarte des veti avea nevoie sa folositi acelasi bloc de cod de mai multe ori cu mici diferente. In loc sa scrieti acelasi cod de 100 de ori, puteti folosi o instructiune repetitiva (bucla) while.
Instructiunea are urmatoarea forma:
codul care trebuie executat
}
Adica, la intrarea in bucla while este evaluata expresia. Daca aceasta are valoarea True, se executa codul. In caz contrar se trece la instructiunea urmatoare.
Bun, sa facem un mic cod care va afisa toate numerele de la 1 la 100 cu ajutorul buclei while:
while( i < 100 ){
printf("Valoarea lui i este %dn",i);
i++;
}
Ce am facut mai sus ? Am declarat o variabila i si am initializat-o cu valoarea 0. Apoi am folosit-o in expresia din cadrul instructiunii while sub forma i<100 (adica valoarea variabilei i este mai mica decat 100). Odata inceputa bucla while, i va avea valoarea 0.
La prima evaluarea a expresiei i va fi inlocuit cu 0 (valoarea actuala a lui i). 0<100 va returna True, deci codul va fi executat. La urmatoarea evaluare i va avea valoarea 1 pentru ca la iesirea din codul while se incrementeaza valoarea lui i. Deci, expresia se va transforma din 0<100 in 1<100 care este, din nou, True. Codul va fi executat pana cand i va lua valoarea 100, adica de 100 de ori si de cate ori va fi executat codul noi vom vedea pe ecram “Valoarea lui i este %d” unde %d este valoarea actuala.
Cand i va lua valoarea 100, expresia va deveni 100<100 care este fals iar bucla se va opri si va fi executata urmatoarea instructiune.
Pentru cei carora le place sa se complice putin, bucla de mai sus poate fi scrisa si sub forma:
while( i++ < 100 )
printf("Valoarea lui i este %d",i);
4. Instructiunea FOR
O instructiune repetitiva mai simpla este FOR. Aceasta se aseamana foarte mult cu instructiunea WHILE, cu diferenta ca initializarea, expresia validata si modificarea variabilei de control sunt facute intr-o singura linie. Se utilizeaza in felul urmator:
cod care trebuie executat
}
Asta s-ar traduce in felul urmator:
expresie1 este evaluata la initializarea functiei;
expresie2 verifica conditia de rularea a codului;
expresie3 modifica valorile verificate de expresie2.
Un exemplu concret si foarte utilizat ar fi urmatorul:
printf(”Valoarea lui i este %dn”,i);
In cazul de fata, i este initializat cu valoarea 0 (expresie1), cat timp valoarea lui i este mai mica decat 100 este rulat blocul corespunzator instructiunii (expresie2) si la fiecare rulare i este incrementat (expresie3).
5. Instructiunea DO-WHILE
Aceasta instructiune este foarte asemanatoare cu instructiunea WHILE cu diferenta ca blocul corespunzator instructiunii este executat cel putin o data. Este folosita in felul urmator:
cod care trebuie executat
} while (expresie)
Adica, codul va fi rulat si abia apoi va fi evaluata expresia si se va decide daca se va rula din nou codul sau nu.
Cam asta ar fi lectia despre instructiunile de control. Sper ca ati inteles. In caz contrar va astept cu intrebari.
Ar mai fi de mentionat urmatoarele:
1. In fiecare caz, puteti da frau liber imaginatiei si fiecare expresie care este evaluata poate fi rezultatul utilizarii operatorilor logici && (SI) respectiv || (SAU).
2. In cazul instructiunilor repetitive (bucle) aveti grija ca intotdeauna sa existe o cale de iesire. In caz contrar va veti alege cu o bucla infinita care va bloca aplicatia sau intreg sistemul.
3. Have fun ! Si asta-i cea mai importanta big_smile
© OSHO
Articolul original il gasiti Aici
Categoria: Programare

