Sunteți pe pagina 1din 45

Alte structuri de control

Programarea calculatoarelor i
limbaje de programare I

Capitolul 9
Introducere
n capitolele precedente am vzut care instruciuni C+
+ implementeaz secvenele, seleciile, buclele i
subprogramele
n unele cazuri am introdus mai multe metode de a
implementa o structur, ca n cazul instruciunii IF-
THEN sau IF-THEN-ELSE
n acest capitol, vom introduce cinci noi instruciuni
utile n programare
switch face mai uoar scrierea structurilor de
selecie care au mai multe ramuri
for i do-while faciliteaz implementarea anumitor
tipuri de bucle
break i continue sunt folosite de asemenea n bucle
i instruciuni de selecie

Programarea calculatoarelo 2
r i limbaje de programare
Sumar
1. Instruciunea switch
2. Instruciunea do-while
3. Instruciunea for
4. Instruciunile break i continue
5. Proiectarea orientat pe obiecte

Programarea calculatoarelo 3
r i limbaje de programare
Instruciunea switch
Aceasta este o instruciune pentru implementarea
structurilor de control cu ramificare multipl
Valoarea expresiei switch determin ramura care se
execut.
Instruciunea switch const dintr-o serie de etichete
case i o variant default
Programul urmtor folosete instruciunea switch
pentru a contoriza numrul de calificative din
categoriile foarte bine, bine, satisfctor i insuficient
pe care le-a primit un elev de-a lungul unui an colar
Vom codifica aceste calificative prin literele F foarte
bine, B bine, S satisfctor i I insuficient

Programarea calculatoarelo 4
r i limbaje de programare
Instruciunea switch
while((calificativ = cin.get()) != EOF)
{
switch(calificativ)
{
case 'F':
case 'f':
++nrF;
break;
case 'B':
case 'b':
++nrB;
break;
case '\n':
case '\t':
case ' ':
break;
default://orice alt caracter
cout << "Ati introdus o litera incorecta."
<< " Introduceti un nou calificativ." << endl;
}
}

Programarea calculatoarelo 5
r i limbaje de programare
Instruciunea switch
Utilizatorului i se cere s introduc literele
asociate calificativelor
Bucla while care implementeaz operaia de
citire i prelucrare a datelor este scris astfel:
while((calificativ = cin.get()) != EOF)
{
...
}
Testul buclei const dintr-o asignare urmat de
o comparaie

Programarea calculatoarelo 6
r i limbaje de programare
Instruciunea switch
Asignarea
(calificativ = cin.get())
dintre parantezele rotunde este executat
prima
Funcia cin.get() citete un caracter din
stream-ul de intrare
Codul ASCII al acestui caracter este, apoi,
asignat variabilei calificativ
Valoarea acestei variabile este comparat
cu EOF

Programarea calculatoarelo 7
r i limbaje de programare
Instruciunea switch
Cnd caracterul este diferit de EOF, calculatorul
trece la execuia instruciunii switch
Cuvntul rezervat switch este urmat, ntre
paranteze, de o expresie integral
Valoarea ei este comparat cu fiecare etichet
case
Aceasta trebuie s fie ntotdeauna o expresie
constant integral
Presupunnd c am introdus litera F
corespunztoare calificativului foarte bine, F
este comparat cu fiecare case

Programarea calculatoarelo 8
r i limbaje de programare
Instruciunea switch
Dac exist o potrivire a valorilor
case F:
se execut secvena de instruciuni
corespunztoare acestui case
n exemplu, se incrementeaz variabila nrF
Spre deosebire de alte structuri de control,
nu este nevoie s folosim blocuri de
instruciuni pentru a delimita secvenele
asociate unui case

Programarea calculatoarelo 9
r i limbaje de programare
Instruciunea switch
Instruciunea break are ca efect transferul
controlului programului la prima
instruciune de dup instruciunea switch
Dac omitem instruciunea break, atunci se
execut toate instruciunile care urmeaz
ramurii selectate
Dac nu apare nicio potrivire a valorilor
ntre expresia din switch i etichetele case,
se execut varianta default

Programarea calculatoarelo 10
r i limbaje de programare
Instruciunea switch
Sintaxa instruciunii switch permite
gruparea mai multor etichete case:
case 'I':
case 'i':
nsemnnd c pentru ambele cazuri se
realizeaz acelai set de aciuni
O constant poate aprea o singur dat n
instruciunea switch pentru c n caz
contrar compilatorul genereaz o eroare de
sintax
De asemenea, se poate folosi o singur
etichet default
Programarea calculatoarelo 11
r i limbaje de programare
Instruciunea switch
Instruciunea switch are acelai efect ca instruciunea IF-THEN-
ELSE

if(calificativ == 'F' || calificativ == 'f')


++nrF;
else if(calificativ == 'B' || calificativ == 'b')
++nrB;
else if(calificativ == 'S' || calificativ == 's')
++nrS;
else if(calificativ == 'I' || calificativ == 'i')
++nrI;
else if(calificativ == '\n' || calificativ == '\t'
|| calificativ == ' '){ }
else
cout << "Ati introdus o litera incorecta."
<< " Introduceti un nou calificativ." << endl;

Programarea calculatoarelo 12
r i limbaje de programare
Sumar
1. Instruciunea switch
2. Instruciunea do-while
3. Instruciunea for
4. Instruciunile break i continue
5. Proiectarea orientat pe obiecte

Programarea calculatoarelo 13
r i limbaje de programare
Instruciunea do-while
Este o instruciune de control al buclelor n care
condiia de final se testeaz la sfritul buclei
Este garantat astfel faptul c bucla se parcurge cel
puin o dat
ablonul sintactic al instruciunii while este
do{
Instruciune 1
Instruciune 2
...
Instruciune n
} while (expresie);

Bucla cuprins ntre do i while se execut atta timp


ct expresia din while este nenul sau true

Programarea calculatoarelo 14
r i limbaje de programare
Instruciunea do-while

do

Instruciune
while (expresie)
false true
Instruciune while (expresie)
false true

Programarea calculatoarelo 15
r i limbaje de programare
Instruciunea do-while
S comparm o bucl while i una
do-while care realizeaz aceeai
aciune: gsesc primul punct din
stream-ul de intrare
char inputChar; char inputChar;
cin >> inputChar; do
while(inputChar != '.') cin >> inputChar;
cin >> inputChar; while(inputChar != '.');

Programarea calculatoarelo 16
r i limbaje de programare
Instruciunea do-while
Soluia while are nevoie de o prim citire astfel
nct inputChar s aib o valoare nainte de
intrarea n bucl
Acest lucru nu este necesar pentru soluia do-
while datorit faptului c bucla este executat
o dat nainte de a se evalua condiia
Putem folosi structura do-while pentru a
implementa o bucl controlat de un contor
dac tim n avans c bucla este parcurs cel
puin o dat
Urmtorul exemplu prezint dou bucle care
nsumeaz ntregii de la 1 la n

Programarea calculatoarelo 17
r i limbaje de programare
Instruciunea do-while
int n = 10; int n = 10;
int sum = 0; int sum = 0;
int contor = 1; int contor = 1;
while(contor <= n) do
{ {
sum += contor; sum += contor;
contor++; contor++;
} } while(contor <= n);

cout << "Suma este " cout << "Suma este "
<< sum << endl; << sum << endl;

Programarea calculatoarelo 18
r i limbaje de programare
Instruciunea do-while
Dac n este un numr pozitiv, ambele versiuni sunt
echivalente
Dar dac n este 0 sau negativ, cele dou bucle conduc
la rezultate diferite
n versiunea while, valoarea final a lui sum este 0
pentru c bucla nu se execut niciodat
n varianta do-while, sum are valoarea 1 pentru c
bucla se execut o dat
Instruciunea while testeaz condiia nainte de
executarea corpului buclei i se numete bucl pretest
Instruciunea do-while se numete bucl posttest

Programarea calculatoarelo 19
r i limbaje de programare
Sumar
1. Instruciunea switch
2. Instruciunea do-while
3. Instruciunea for
4. Instruciunile break i continue
5. Proiectarea orientat pe obiecte

Programarea calculatoarelo 20
r i limbaje de programare
Instruciunea for
Aceast instruciune simplific scrierea buclelor
controlate de contor, n C++ instruciunea for fiind
form mai compact a buclei while
Exemplu
for(int contor = 1; contor <= n; contor++)
cout << contor << endl;

int contor = 1;
while(contor <= n)
{
cout << contor << endl;
contor++;
}

Programarea calculatoarelo 21
r i limbaje de programare
Instruciunea for
Ambele instruciuni tipresc numerele de la
1 la n
Instruciunea for din exemplul de mai sus
iniializeaz variabila de control al buclei,
contor, cu valoarea 1
Atta timp ct valoarea lui contor este mai
mic sau egal cu n execut instruciunea
de afiare i incrementeaz contor

Programarea calculatoarelo 22
r i limbaje de programare
Instruciunea for
Instruciunea for plaseaz iniializarea
dinaintea buclei pe prima poziie dintre
parantezele rotunde
Testul buclei este pe a doua poziie, iar
incrementarea variabilei de contor este pe
ultima poziie
Pe prima poziie se gsesc aciunile care se
execut nainte de prima iteraie, iar pe
ultima poziie sunt cele care se execut la
sfritul fiecrei iteraii
Dac este vorba de mai mult de o aciune,
atunci acestea sunt separate prin virgul
Programarea calculatoarelo 23
r i limbaje de programare
Instruciunea for
Buclele do-while sau for pot fi
imbricate
Exemplu
for(int num = 1; num <= 5; num++)
{
for(int numToPrint =1; numToPrint <= num; numToPrint++)
cout << numToPrint;
cout << endl;

Programarea calculatoarelo 24
r i limbaje de programare
Instruciunea for
Rezultatul rulrii acestui cod este

1
12
123
1234
12345

Programarea calculatoarelo 25
r i limbaje de programare
Sumar
1. Instruciunea switch
2. Instruciunea do-while
3. Instruciunea for
4. Instruciunile break i continue
5. Proiectarea orientat pe obiecte

Programarea calculatoarelo 26
r i limbaje de programare
Instruciunile break i continue
Instruciunea break introdus odat
cu instruciunea switch poate fi
folosit i n bucle
Ea provoac ieirea imediat din cel
mai interior switch, while, do-while
sau for n care apare
Una dintre cele mai frecvente situaii
n care se folosete este ieirea din
buclele infinite

Programarea calculatoarelo 27
r i limbaje de programare
Instruciunile break i continue
int contor = 1;
while(true)
{
cin >> num1;
if(!cin || (num1 >= 100))
break;
cin >> num2;
if(!cin || (num2 <= 50))
break;
cout << sqrt(static_cast<double>(num1+num2)) << endl;
contor++;
if(contor > 10)
break;
}

Programarea calculatoarelo 28
r i limbaje de programare
Instruciunile break i continue
Pentru exemplul acesta am fi putut folosi o
bucl for de la 1 la 10
Bucla este controlat de contor i de eveniment,
deci preferm bucla while
Aceast bucl conine 3 puncte distincte de
ieire
Unii programatori se opun acestui stil de
programare susinnd c face codul mai
greu de urmrit
Rescriind codul, vom vedea ca prima variant
este, totui, mai clar

Programarea calculatoarelo 29
r i limbaje de programare
Instruciunile break i continue
int contor = 1;
while(num1Valid && num2Valid && contor<=10)
{
cin >> num1;
if(!cin || (num1 >= 100))
num1Valid = false;
else
{
cin >> num2;
if(!cin || (num2 <= 50))
num2Valid = false;
else
{
cout << sqrt(static_cast<double>(num1+num2))
<< endl;
contor++;
}
}
}

Programarea calculatoarelo 30
r i limbaje de programare
Instruciunile break i continue
Instruciunea continue afecteaz, de asemenea,
fluxul unui program C++
Ea termin iteraia curent i se folosete numai n
bucle
Exemplu
double valIntrare;
for(int i = 1; i <= 5; i++)
{
cin >> valIntrare;
if(valIntrare < 0)
continue;
cout << sqrt(valIntrare) << endl;
}

Programarea calculatoarelo 31
r i limbaje de programare
Instruciunile break i continue
Dac valIntrare este negativ, se trece la
urmtoarea iteraie
i aceast secven de program poate fi
rescris
double valIntrare;
for(int i = 1; i <= 5; i++)
{
cin >> valIntrare;
if(valIntrare >= 0)
cout << sqrt(valIntrare) << endl;
}

Programarea calculatoarelo 32
r i limbaje de programare
Sumar
1. Instruciunea switch
2. Instruciunea do-while
3. Instruciunea for
4. Instruciunile break i continue
5. Proiectarea orientat pe obiecte

Programarea calculatoarelo 33
r i limbaje de programare
Proiectarea orientat pe obiecte
Clase i obiecte
S ne imaginm c dorim s realizm
imagini formate din ptrate
Fiecare ptrat este un obiect care
este caracterizat prin
atributele de culoare i poziie
comportament pentru c, printre altele
putem s i schimbm culoarea i s il
redesenm

Programarea calculatoarelo 34
r i limbaje de programare
Proiectarea orientat pe obiecte
Clase i obiecte
Fiecare ptrat este diferit, dar are
proprieti i comportamente comune cu
alte ptrate
Putem s abstractizm aceste elemente
comune
toate ptratele au acelai comportament
au acelai set de atribute
Abstractiznd, ignorm valorile particulare
ale atributelor
Nu inem cont de faptul c un ptrat este rou
sau altul este verde, sau c unul este aezat n
mijlocul ecranului iar altul intr-un col al su

Programarea calculatoarelo 35
r i limbaje de programare
Proiectarea orientat pe obiecte
Clase i obiecte
Prin abstractizare am realizat o clas
Este o mulime de obiecte care au o
structur comun i care au
comportamente comune
Clasele reprezint abloane ale
obiectelor
Dac dorim s introducem n imaginea
noastr un nou ptrat, folosim clasa
ptrat patricularizndu-i proprietile

Programarea calculatoarelo 36
r i limbaje de programare
Proiectarea orientat pe obiecte
Clase i obiecte
Reprezentarea UML a unei clase se
face printr-un dreptunghi mprit n
trei seciuni
Patrat

culoare : int
varfuri : Punct[]
nrVarfuri : int = 4

schimbaCuloarea(c : int) : void


deseneaza() : void

Prima parte conine numele clasei


Programarea calculatoarelo 37
r i limbaje de programare
Proiectarea orientat pe obiecte
Clase i obiecte
Partea din mijloc conine atributele clasei
Descrierea unui atribut este format din
numele atributului
tipul su
valoarea iniial
Tipul depinde de limbajul de programare n
care se va face implementarea
Putem folosi
tipuri primitive de date
tipuri de date definite prin alte clase

Programarea calculatoarelo 38
r i limbaje de programare
Proiectarea orientat pe obiecte
Clase i obiecte
A treia seciune conine comportamentele
sau operaiile ca nume de funcii
Numele operaiei este urmat ntre paranteze
rotunde de lista de parametri separai prin
virgul
Numele unui parametru este urmat de tipul
acestuia
Lista poate s fie vid dac operaia nu
folosete parametri
Ultimul element al descrierii unei operaii
este tipul valorii returnate care este
precedat de semnul :
Programarea calculatoarelo 39
r i limbaje de programare
Proiectarea orientat pe obiecte
Motenirea
S ne imaginm c pe lng ptrate ne propunem s
folosim i triunghiuri n imaginile pe care le construim
Patrat Triunghi

culoare : int culoare : int


varfuri : Punct[] varfuri : Punct[]
nrVarfuri : int = 4 nrVarfuri : int = 3

schimbaCuloarea(c : int) : void schimbaCuloarea(c : int) : void


deseneaza() : void deseneaza() : void

Comparnd cele dou clase, observm c sunt cteva


diferene ntre ele
ptratele au patru vrfuri, n timp ce triunghiurile au doar
trei
modul n care sunt desenate aceste dou figuri difer

Programarea calculatoarelo 40
r i limbaje de programare
Proiectarea orientat pe obiecte
Motenirea
Pe de alt parte, sunt i similariti
putem stabili culoarea ambelor figuri
ambele figuri pot fi redesenate, chiar dac modul de
desenare este diferit
Pe baza asemnrilor, dorim s abstractizm aceste
clase eliminnd detaliile specifice fiecrei forme i
amplificnd faptul c ambele au culoare i pot fi
desenate
Dorim s eliminm detaliile nerelevante
Nu suntem interesai de faptul c o form este un
ptrat sau c o alt form este un triunghi, atta
timp ct pentru fiecare dintre ele vom concepe
ulterior cte o metod particular de desenare

Programarea calculatoarelo 41
r i limbaje de programare
Proiectarea orientat pe obiecte
Motenirea

Forma

culoare : int
varfuri : Punct[]
nrVarfuri : int
schimbaCuloarea(c : int) : void
deseneaza() : void

Patrat Triunghi

nrVarfuri : int = 4 nrVarfuri : int = 3

deseneaza() : void deseneaza() : void

Programarea calculatoarelo 42
r i limbaje de programare
Proiectarea orientat pe obiecte
Motenirea
Aceast form de abstractizare se numete motenire
Clasele de la nivelul de jos se numesc subclase sau
clase derivate
Ele motenesc elemente care definesc starea i
comportamentul de la clasa de la nivelul superior
numit i superclas sau clas de baz
Prin acest mecanism, un obiect de tip Triunghi va
avea
o culoare
o operaie schimbaCuloarea(c : int)
un tablou de varfuri
o operaie deseneaza()
nrVarfuri va fi trei

Programarea calculatoarelo 43
r i limbaje de programare
Proiectarea orientat pe obiecte
Motenirea
O clas poate moteni urmtoarele trei tipuri de
elemente:
starea, de exemplu culoare
operaiile, de exemplu schimbaCuloarea(c : int)
interfaa unei operaii
Clasa Forma conine interfaa operaiei deseneaza()
pentru c interfaa deseneaza() pentru Triunghi i
Patrat este aceeai
Implementarea operaiei rmne n subclase, ea fiind
diferit pentru fiecare dintre ele
Atunci cnd abstractizm interfaa unei operaii lsnd
implementarea n subclase spunem c avem de a face
cu o operaie polimorfic

Programarea calculatoarelo 44
r i limbaje de programare
Proiectarea orientat pe obiecte
Motenirea
Aceast metod de abstractizare plaseaz
elementele importante care definesc starea,
comportamentul i interfeele n clasele de
baz
Putem recurge la abstractizare i altfel,
combinnd obiecte n interiorul unui nou
obiect
Exemplu
Autoturismul poate fi privit ca un obiect care
folosete o baterie, un aparat de radio, un motor
dar i alte obiecte oferind o interfa simpl
pentru conducerea sa

Programarea calculatoarelo 45
r i limbaje de programare

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