Documente Academic
Documente Profesional
Documente Cultură
Programare procedural
Rezolvarea problemei
Analiza nseamn nelegerea, definirea problemei i a soluiei ce trebuie dat. Algoritmul presupune dezvoltarea unei secvene logice de pai care trebuie urmai pentru rezolvarea problemei. Verificarea este parcurgerea pailor algoritmului pe mai multe exemple pentru a fi siguri c rezolv problema pentru toate cazurile.
Elemente de baz n C++ 3
Limbajul de programare este un set de reguli, simboluri i cuvinte speciale folosite pentru a construi un program. Limbajul !! este o variant simplificat a limbii engleze i care are un set strict de reguli gramaticale. "atorit numrului mic de cuvinte disponibile, suntem obligai s scriem instruciuni simple i exacte.
Elemente de baz n C++ 4
#om vedea
care sunt principalele reguli i simboluri care fac din !! un limbaj de programare ce pai trebuie parcuri pentru a scrie un program simplu i a$l face s ruleze pe un calculator
Programele !! sunt colecii de clase i funcii %subprograme&. 'cestea se pot scrie separat, iar apoi sunt asamblate ntr$o structur numit program. (iecare program conine o funcie care se numete main. )a este funcia cu care ncepe execuia unui program.
Sintax i semantic
-n limbaj de programare este un set de reguli, simboluri i cuvinte speciale folosite pentru a scrie un program. .egulile sunt valabile at,t pentru sintax %gramatic&, c,t i pentru semantic %semnificaie&.
Sintaxa este un set de reguli care definesc exact ce combinaii de litere, numere i simboluri pot fi folosite ntr$un limbaj de programare. /u se accept ambiguiti. *nclcarea oricrei reguli a limbajului genereaz erori de sintax i codul surs nu poate fi compilat p,n la corectarea lor. Semantica este un set de reguli care determin semnificaia instruciunilor scrise ntr$un limbaj de programare.
Elemente de baz n C++ 9
"atele sunt pstrate n memoria calculatorului. (iecare locaie are o adres unic pe care o referim atunci c,nd dorim s stocm sau s aducem date. 'dresa fiecrei locaii de memorie este un numr binar. *n !! folosim identificatori pentru a denumi locaiile de memorie.
10
0ipul de dat determin modul n care datele sunt reprezentate n interiorul calculatorului i operaiile care se pot realiza asupra lor. 0ipul unei date determin lungimea zonei de memorie %i implicit mulimea de valori a datei respective& ocupat de acea dat. Programatorul i poate defini propriile tipuri de date.
Elemente de baz n C++ 11
ipurile standard
c!ar s!ort int "ong
ipuri integrale
ipuri reale
#loat double long double
ipuri adres
ipuri structurate
12
0ipurile de dat c!ar, s!ort, int i long reprezint ntregi de diferite dimensiuni cu mai muli sau mai puini bii
celula de memorie c!ar celula de memorie s!ort celula de memorie int celula de memorie long
Elemente de baz n C++ 13
14
15
.(
0./7
17
#alorile reprezentate n virgul mobil pot avea un exponent, ca n notaia tiinific. *n loc de 1.;<7x6<62, n !! scriem './00e$2. "atorit faptului c memorarea se face n form binar, multe valori reale pot fi doar aproximate n acest sistem.
)xemplu Pe unele calculatoare, 7.5 poate fi afiat 0.7)))))(1 fr a fi vorba de o eroare de programare .
Elemente de baz n C++ 18
Declara"ii
Declaraia este o instruciune care asociaz un nume %un identificator& cu o dat, o funcie sau un tip de dat, astfel nc,t programatorul poate s se refere la acest element prin nume
)xemplu
Prin aceast instruciune, anunm c 2 este numele unei variabile al crei coninut este de tip int int 2;
,nd declarm o variabil, compilatorul alege o locaie de memorie i o asociaz cu identificatorul pstr,nd aceast asociere la dispoziia programului.
Elemente de baz n C++ 19
'ariabile
Variabila este o locaie de memorie referit printr$ un identificator i care pstreaz valoarea unei date ce poate !i modi!icat( /umele simbolic asociat variabilei se numete identificatorul variabilei sau numele variabilei
=dentificatorul variabilei x %locaia de memorie 0x22ff74& #ariabila
$0/''
#aloarea
(int)
0ipul de dat
20
'ariabile
"eclararea variabilei nseamn specificarea at,t a numelui ei c,t i a tipului de dat( > declaraie se termina ntotdeauna cu ?
21
Constante
0oate numerele, ntregi sau reale, sunt constante. La fel, caracterele %cuprinse ntre : :& i secvenele de caractere %string$urile, irurile $ cuprinse ntre @ @&
)xemple $% '2.'
*+*
5e prim5
22
#aloarea 6< este asignat variabilei suma, adic valoarea 6< va fi stocat n locaia de memorie numit suma. 8emantica operatorului de asignare A este Bpstreaz@, Bstoc+eaz@. >rice valoare anterioar stocat la acea locaie de memorie se pierde, fiind nlocuit de noua valoare.
Elemente de baz n C++
23
+signarea
)xpresia din dreapta operatorului de asignare este evaluat i valoarea ei este stocat n variabila aflat n st,nga operatorului. Operatorii matematici sunt: ! $ ! $ D E Plus unar Cinus unar 'dunare 8cdere Cultiplicare *mprire real sau *mprire ntreag
Elemente de baz n C++ 24
*nstruc"iuni executabile
*ncrementarea i decrementarea
!! este operatorul de incrementare ncrementarea nseamn adaugarea valorii 6 din operand $$ este operatorul de decrementare Decrementarea nseamn scderea valorii 6 din operand
)xemplu
int suma 6 (; suma,,; 77num 8a a8ea 8aloarea )
ec+ivalent cu
suma 6 suma , $;
Elemente de baz n C++ 25
*ncrementarea i decrementarea
)xemple
,,num; num,,;
)xemplu
alp!a 6 num,, ';
26
0iprirea rezultatelor se face n !! folosind o variabil special numit cout mpreun cu operatorul de inserie %GG&.
)xemplu
cout << 5n este prim5;
!! i
27
*n mod obinuit, mai multe instruciuni de ieire succesive afieaz rezultatele continuu, pe aceeai linie:
cout << 5suma5; cout << 5produs5;
genereaz
sumaprodus
i obinem:
suma produs
=dentificatorul endl %Bend line@& este un manipulator care termin o linie i continu afiarea pe linia urmtoare
Elemente de baz n C++ 28
-n program !! este format din clase i funcii, una dintre funcii numindu$se obligatoriu main Codelul unui program:
9eclara:ie ... 9e#ini:ie de 9e#ini:ie de ... 9e#ini:ie de 9e#ini:ie de ... clas; clas; #unc:ie #unc:ie
29
-n bloc conine < sau mai multe instruciuni cuprinse ntre HI. > instruciune se termin obligatoriu cu ? >binuim ca instruciunile dintr$un bloc s le deplasm puin spre dreapta pentru claritatea programului Putem opta pentru gruparea instruciunilor prin separarea grupurilor cu r,nduri libere
Elemente de baz n C++ 30
Pentru a pune o ntrebare n !!, facem o presupunere care poate fi adevrat sau fals. alculatorul evalueaz presupunerea pentru a constata dac este adevrat sau fals. *n !!, presupunerile iau forma expresiilor logice sau booleene. > astfel de expresie este alctuit din valori logice i operaii.
Elemente de baz n C++ 31
Operatori relaionali
2 este egal cu 3 2 este di#erit de 3 2 este mai mare dec?t 3 2 este mai mic dec?t 3 2 este mai mare sau egal dec?t 3 2 este mai mic sau egal dec?t 3
32
)xemplu
"ac 2 are valoarea / i 3 are valoarea $0, urmtoarele relaii sunt adevrate:
2 66 / 3 > 2 3 >6 2 2 >6 3 2 < 3 2 <6 3
"ac x este JCJ i K este J.J, expresiile de mai sus sunt de asemenea adevarate deoarece sunt comparate codurile '8 == ale caracterelor.
Elemente de baz n C++ 33
8e pot folosi operatori relaionali nu doar pentru a compara valori ale variabilelor sau constantelor, ci i pentru a compara valori ale expresiilor aritmetice. )xemplu Pentru
int 2 6 $71 3 6 2; urmtoarea expresie este adevrat: 2 , ' 66 3 $0
> eroare des nt,lnit n scrierea programelor !! este confuzia ntre operatorii 6 i 66. (olosirea operatorului 66 pentru asignare sau a operatorului 6 pentru a testa egalitatea sunt erori logice.
Elemente de baz n C++ 34
*n matematic, operatorii logici '/", >. i />0 acioneaz asupra expresiilor logice care joac rolul de operanzi. !! folosete simboluri speciale pentru fiecare dintre operatorii logici.
Operator logic @@ AA > Exemplu 2 @@ 3 2 AA 3
Elemente de baz n C++ >2
Pentru ca rezultatul operaiei '/" %@@& s fie ade8arat, ambii operanzi trebuie s fie ade8arat
Expresia 1 Expresia 2 Expresia 1 && Expresia 2
Expresii logice
Operatori logici
>peraia >. %AA& cere ca cel puin un operand s fie ade8arat pentru ca rezultatul s fie ade8arat.
Expresia 1 Expresia 2 Expresia 1 || Expresia 2
ade8arat
37
>peratorul />0 %>& precede o singur expresie logic i d un rezultat opus valorii logice a expresiei.
Expresia 1 !Expresia 1
#als ade8arat
ade8arat #als
38
Expresii logice
Operatori logici
)xemplu
>(suma > 00) este ec+ivalent cu suma <6 00
*n unele expresii prima form este mai clar, n altele cea de$a doua.
)xemple
onform regulilor lui "e Corgan avem >( a 66 b ) a >6 b >( a 66 b AA a 66 c ) a >6 b @@ a >6 c >( a 66 b @@ c > d ) a >6 b AA c <6 d
Elemente de baz n C++ 39
Evaluri condi"ionale
)valuarea expresiilor logice se face de la st,nga la dreapta, aceasta oprindu$se atunci c,nd este cunoscut valoarea ntregii expresii. *ntrebarea care se pune este cum poate calculatorul s tie dac valoarea unei expresii este ade8arat sau #als dac nu a evaluat$o p,n la capt.
40
Evaluri condi"ionale
> operaie '/" este ade8arata dac ambii operanzi sunt ade8arati.
variabila i are valoarea 6<, subexpresia din st,nga va fi #alsa, deci expresia nu mai poate avea dec,t valoarea #als.
)valuarea unei expresii >. se oprete c,nd una dintre subexpresii este ade8arata, deci rezultatul este ade8arat.
Elemente de baz n C++ 41
.receden"a operatorilor
.egulile de preceden se aplic i operatorilor logici i relaionali. Parantezele rotunde au prioritate asupra oricrei operaii.
ea mai nalt preceden
( > )
>6
*nstruc"iunea i#
#om vedea acum cum putem afecta fluxul secvenial al programului. =nstruciunea i# permite ramificarea fluxului normal. Putem pune o ntrebare, i n funcie de condiiile existente putem realiza o aciune sau alta.
43
)xpresia din paranteze poate avea orice tip simplu de dat. 'proape ntotdeauna aceasta va fi o expresie logic. "ac valoarea expresiei este nenul sau ade8arata, calculatorul execut nstruciunea "A. "ac valoarea expresiei este 0 sau #als, se execut nstruciunea "#.
Elemente de baz n C++ 45
nstruciunea "A se numete clauza t$en nstruciunea "# se numete clauza else "e notat c instruciunea i# folosete doar cuvintele rezervate i# i else, c+iar dac structura se numete =($ 0N)/$)L8)
i# (expresie)
fals adeva rat
Instruciunea 1A Instruciunea 1B
-neori dorim s realizm o aciune c,nd se ndeplinete o condiie, dar s nu se nt,mple nimic atunci c,nd condiia este fals. Putem lsa ramura else vid.
)xemplu
i#(a <6 b) c 6 20; else ;
47
*nstruc"iunea i#
/orma */0 1E2
Putem s nu scriem deloc ramura else dac aceasta este vid. 'jungem, astfel, la forma =($0N)/:
if%%xpresie& nstruciune
La folosirea instruciunilor i# imbricate pot aprea confuzii n legtur cu perec+ile if$else: crui i# i aparine un elseO 8 presupunem c dac nota unui student este mai mic dec,t ;, dorim s tiprim @.espins@, dac nota lui este ntre ; i 4, s tiprim @'dmis@, iar dac nota este mai mare dec,t 4, s nu tiprim nimic.
Elemente de baz n C++ 49
*n absena acoladelor, un else este asociat ntotdeauna instruciunii i# cea mai apropiat care nu are nc un else drept perec+e. >binuim s aliniem codul astfel nc,t s reflectm aceast mperec+ere.
Elemente de baz n C++ 50
/e propunem s rescriem codul de mai sus n aa fel nc,t instruciunea else s fie asociat primului i#. #ariant greit:
i#(media < %.0) i#(media < /.0) cout << "Cespins" << endl; else cout << "+dmis" << endl;
8oluia:
i#(media < %.0) { i#(media < /.0) cout << "Cespins" << endl; } else cout << "+dmis" << endl;
Elemente de baz n C++ 51
*nstruc"iunea D!ile
)xemplu
D!ile(8al>6 2/) cin >> 8al;
52
*nstruc"iunea D!ile ondiia din instruciunea D!ile poate fi o expresie de orice tip de dat. 'proape ntotdeauna ea este o expresie logic. =nstruciunea D!ile din exemplul de mai sus spune urmtorul lucru:
Dac valoarea expresiei este adevarata &nenul'( execut corpul buclei iar apoi revine !i testeaz din nou expresia. Dac expresia este fals &zero'( se trece de corpul buclei .
"ac expresia este fals de la nceput, corpul nu se execut niciodat. Elemente de baz n C++ 53
*nstruc"iunea D!ile
orpul buclei poate fi i un bloc, fapt care ne permite s executm mai multe instruciuni n mod repetat
1! "e e#alueaza expresie$ daca expresie % 0 &'al(! (e ie(e din in(t)uctiunea while$ alt'el &expresie 0$ deci ade#a)at! (e t)ece la *a(ul 2+ 2! "e executa instructiune+ "e t)ece la *a(ul 1+
Elemente de baz n C++ 54
"ei condiia de terminare poate deveni valid n mijlocul corpului Q+ile, iteraia curent este executat p,n la capt i numai dup aceea calculatorul verific din nou expresia din instruciunea D!ile. *n rezolvarea problemelor se pot nt,lni dou tipuri majore de bucle:
> astfel de bucl folosete o variabil numit variabil de control. *naintea instructiunii Q+ile ea este iniializat, adic i se atribuie o valoare iniial. 'poi, n fiecare iteraie a buclei ea trebuie incrementat. )xemplu
int contor 6 $;77initiali4are D!ile(contor <6 $0) 77test { ... 77actiune care se repeta contor,,; 77incrementare }
Elemente de baz n C++ 56
*n acest exemplu, contor este variabila de control. )a este iniializat cu valoarea $ nainte de intrarea n instructiunea Q+ile. =nstruciunea Q+ile testeaz expresia contor <6 $0 i execut bucla at,ta timp c,t expresia este adevrat -ltima instruciune a buclei incrementeaz variabila contor #ariabilele folosite n acest fel se numesc contoare. ) bucl din care programul nu poate ie!i deloc se nume!te bucl infinit. 'ceast situaie apare atunci c,nd n program se omite incrementarea contorului.
Elemente de baz n C++ 57
*nstruc"iunea do&D!ile
)ste o instruciune de control a buclelor n care condiia de final se testeaz la sf,ritul buclei. )ste garantat astfel faptul c instructiunea se parcurge cel puin o dat Rablonul sintactic al instruciunii D!ile este
do{ nstruciune " nstruciune * ... nstruciune n } D!ile (expresie);
=nstructiunile cuprinse ntre do i D!ile se execut at,ta timp c,t expresia din D!ile este nenul sau ade8arata.
Elemente de baz n C++ 58
*nstruc"iunea do&D!ile
=nstruciune
while %expresie&
fals adev arat
59
*nstruc"iunea do&D!ile
int n 6 $0; int sum 6 0; int contor 6 $; D!ile(contor <6 n) { sum ,6 contor; contor,,; } cout << "Euma este " << sum << endl;
int n 6 $0; int sum 6 0; int contor 6 $; do { sum ,6 contor; contor,,; } D!ile(contor <6 n); cout << "Euma este " << sum << endl;
60
*nstruc"iunea do&D!ile
"ac n este un numr pozitiv, ambele versiuni sunt ec+ivalente. "ar dac n este < sau negativ, cele dou bucle conduc la rezultate diferite. *n versiunea D!ile, valoarea final a lui sum este 0 pentru instructiunea nu se execut niciodat *n varianta do&D!ile, sum are valoarea $ pentru c instructiunea se execut o dat =nstruciunea D!ile testeaz condiia nainte de executarea corpului buclei i se numete bucl pretest. =nstruciunea do&D!ile se numete bucl posttest.
Elemente de baz n C++ 61
*nstruc"iunea #or
)xemplu
#or(int contor 6 $; contor <6 n; contor,,) cout << endl; Life isn:t about Qaiting for t+econtor storm to << pass, it:s about learning to dance in t+e rainS int contor 6 $; D!ile(contor <6 n) { cout << contor << endl; contor,,; }
Elemente de baz n C++ 62