Sunteți pe pagina 1din 62

Elemente de baz n C++

Programare procedural

Elemente de baz n C++

Elemente de baz n C++ Cum scriem un program?

Pentru a scrie un program trebuie s parcurgem urmatoarele dou faze:

rezolvarea problemei implementarea problemei

Elemente de baz n C++

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

Ce este un limbaj de programare?

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

Sintaxa i semantica n C++

#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

Elemente de baz n C++

Structura unui program C++

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.

Elemente de baz n C++

Structura unui program C++ Exemplu


#include <iostream> *n fiecare dintre funcii, acoladele using namespace std; marc+eaz nceputul i sf,ritul int Patrat(int); int Cub(int); instruciunilor care trebuie executate int main() { cout << "Patratul lui 27 este " << Patrat(27) << endl; cout << "si cubul lui 27 este " << Cub(27) << endl; return 0; } Corpul funciei sau int Patrat(int n) bloc de instruciuni { return n n; } int Cub(int n) { return n n n; }
Elemente de baz n C++ 7

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&.

Elemente de baz n C++

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

Date i tipuri de date


"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.

Elemente de baz n C++

10

Date i tipuri de date

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

Date i tipuri de date


ipuri simple

ipurile standard
c!ar s!ort int "ong

ipuri integrale

ipuri reale
#loat double long double

ipuri adres

pointer re!erin" tablou #arra$% struct union class

ipuri structurate

Elemente de baz n C++

12

Date i tipuri de date

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

Date i tipuri de date ipurile integrale


u c,t sunt mai muli bii n celula de memorie, cu at,t mai mari sunt valorile ntregi care pot fi memorate acolo. "imensiunile acestor celule de memorie sunt dependente de main: pe unele calculatoare datele de tip int se pot gsi n intervalul $12345 ... !12343, iar pe altele ntre $2673751475 ... !2673751473 ,nd programul ncearc s calculeze o valoare mai mare dec,t valoarea maxim, rezultatul este un integer overflow.

Elemente de baz n C++

14

Date i tipuri de date ipurile integrale


8e refer la valori ntregi. *ntregii sunt secvene de una sau mai multe cifre. /u se admite virgula. *n multe cazuri, semnul 9 preced un ntreg. 0ipul unsigned int se refer la ntregi nenegativi.
)xemple:
22 $% $ &'7( &)$2

Elemente de baz n C++

15

Date i tipuri de date ipurile integrale & tipul c!ar


0ipul de dat c!ar se folosete atunci c,nd se dorete o economie de memorie i se !olosesc ntregi mici pentru a descrie date care constau dintr$un caracter alfanumeric %liter, cifr sau simbol special& )xemplu: *+* *a* *(* *2* *,* *-* * * !! face diferena dintre data de tip caracter :5: i valoarea ntreag 5, pentru c cele dou sunt pstrate n mod diferit n interiorul calculatorului.
Elemente de baz n C++ 16

Date i tipuri de date ipurile reale


8e utilizeaz pentru a reprezenta numere reale. /umerele reprezentate n virgul mobil au parte ntreag i o parte fracionar, separate de un punct.
)xemplu: $(.0 $27./0

.(

0./7

Elemente de baz n C++

17

Date i tipuri de date ipurile reale

#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)

Elemente de baz n C++

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 ?

)xemplu int 2; )xemplu int 21 31 4; ec+ivalent cu int 2; int 3; int 4;

Elemente de baz n C++

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

> constant este un element al crui valoare nu se sc)imb niciodat(

Elemente de baz n C++

22

*nstruc"iuni executabile +signarea

#aloarea unei variabile poate fi sc+imbat prin asignare

)xemplu suma 6 $0;

#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

F Codulo %restul mpririi&

*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

>peratorii de incrementare i decrementare pot fi postfix sau prefix

)xemple
,,num; num,,;

'ceti operatori se pot folosi i n expresii

)xemplu
alp!a 6 num,, ';

Elemente de baz n C++

26

*nstruc"iuni executabile +!iarea

0iprirea rezultatelor se face n !! folosind o variabil special numit cout mpreun cu operatorul de inserie %GG&.

)xemplu
cout << 5n este prim5;

#ariabila cout este predefinit n semnific un flux de ie!ire.

!! i

Elemente de baz n C++

27

*nstruc"iuni executabile +!iarea

*n mod obinuit, mai multe instruciuni de ieire succesive afieaz rezultatele continuu, pe aceeai linie:
cout << 5suma5; cout << 5produs5;

genereaz

sumaprodus

Pentru a tipri pe linii separate scriem:


cout << 5suma5 << endl; cout << 5produs5 << endl;

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

Construirea unui program


-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

> definiie de funcie:


<eading { =nstruc:iune ... }

Elemente de baz n C++

29

Construirea unui program ,locuri #instruc"iuni compuse%

orpul unei funcii este un exemplu de bloc:


{ =nstruc:iune ... }

-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

Condi"ii i expresii logice

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

*n !! putem testa urmtoarele relaii:


Exemplu Semni!ica"ie

-perator rela"ional 66 >6 > < >6 <6

2 66 3 2 >6 3 2 > 3 2 < 3 2 >6 3 2 <6 3

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

Elemente de baz n C++

32

Expresii logice Operatori relaionali

*n !!, rezultatul unei comparaii poate fi ade8arat sau #als

)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

Expresii logice Operatori relaionali

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

Expresii logice Operatori logici

*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

Semnificaie AND logic OR logic NOT logic


35

Expresii logice Operatori logici

Pentru ca rezultatul operaiei '/" %@@& s fie ade8arat, ambii operanzi trebuie s fie ade8arat
Expresia 1 Expresia 2 Expresia 1 && Expresia 2

#als #als ade8arat ade8arat

#als ade8arat #als

#als #als #als


36

Elemente de baz n C++ ade8arat ade8arat

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

#als #als ade8arat ade8arat

#als ade8arat #als ade8arat

#als ade8arat ade8arat


Elemente de baz n C++

ade8arat

37

Expresii logice Operatori logici

>peratorul />0 %>& precede o singur expresie logic i d un rezultat opus valorii logice a expresiei.
Expresia 1 !Expresia 1

#als ade8arat

ade8arat #als

Elemente de baz n C++

38

Expresii logice
Operatori logici

/>0 ne d o metod de a inversa sensul unei presupuneri.

)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.

Elemente de baz n C++

40

Evaluri condi"ionale

> operaie '/" este ade8arata dac ambii operanzi sunt ade8arati.

)xemplu "ac n expresia


i AA 6 LL j M 2

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
( > )

7 B , & < <6 > 66 >6 @@ AA 6

>6

ea mai sczut preceden


Elemente de baz n C++ 42

*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.

Elemente de baz n C++

43

*nstruc"iunea i# Structura */0 1E20E3SE

*n !! instruciunea i# poate fi folosit n dou variante :


forma =($0N)/$)L8) forma =($0N)/


i#%expresie& nstruciunea "A else nstruciunea "#
Elemente de baz n C++ 44

8intaxa formei =($0N)/$)L8) este

*nstruc"iunea i# Structura */0 1E20E3SE

)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

*nstruc"iunea i# Structura */0 1E20E3SE


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

Instruciunea Elemente de baz n C++ 46

*nstruc"iunea i# /orma */0 1E2

-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 ;

Elemente de baz n C++

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

Putem rescrie instruciunea din exemplul anterior astfel:


i#(a <6 b)
c 6 20;
Elemente de baz n C++ 48

/olosirea greit a lui else

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

/olosirea greit a lui else

Putem coda aceast problem astfel:


i#(media < %.0) i#(media < /.0) cout << "Cespins" << endl; else cout << "+dmis" << endl;

um tim crui i# i aparine un elseO

*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

/olosirea greit a lui else


/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

'ceast instruciune, ca i i#, testeaz o condiie D!ile(expresie) nstruciune

)xemplu
D!ile(8al>6 2/) cin >> 8al;

=nstruciunea care se execut n mod repetat se numete corpul buclei .

Elemente de baz n C++

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

)xemplu D!ile(expresie) { ... }

Plocul se execut p,n c,nd expresia devine fals. Modul de executie

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:

bucla controlat de un contor? bucla controlatElemente de un deeveniment. baz n C++


55

,ucla controlat de un contor

> 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

do =nstruciune while %expresie&


fals adev arat

=nstruciune

while %expresie&
fals adev arat

Elemente de baz n C++

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;

Elemente de baz n C++

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

=n !! instruciunea !or este o form mai compact a instructiunii D!ile.

)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

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