CUPRINS
1 INTRODUCERE........................................................................................................................................3
1.1 Limbaje de programare: tipuri si caracteristici...................................................................................3
1.1.1 Ce este un limbaj de programare?...............................................................................................3
1.1.2 Generatiile limbajelor de programare..........................................................................................3
1.2 Ce este C++?.......................................................................................................................................5
1.2.1 Modelele de programare suportate de C++.................................................................................5
1.2.2 Documentatia online pentru limbajul C++..................................................................................6
1.3 Medii de dezvoltare integrata (IDE)....................................................................................................7
1.4 Scrierea primului program..................................................................................................................7
1.4.1 Crearea proiectului......................................................................................................................7
1.5 Sumar..................................................................................................................................................9
2 ELEMENTE DE BAZA C++...................................................................................................................10
2.1 Comentariile......................................................................................................................................10
2.1.1 Comentarii pe mai multe linii....................................................................................................10
2.1.2 Cel specific C++ care este este pe o singura linie.....................................................................10
2.1.3 Recomandari..............................................................................................................................10
2.2 Variabile si constante - introducere...................................................................................................11
2.2.1 Ce sunt variabilele.....................................................................................................................11
2.2.2 Tipul variabilelor.......................................................................................................................11
2.2.3 Declararea variabilelor...............................................................................................................11
2.2.4 Atribuirea valorilor....................................................................................................................12
2.2.5 Citirea valorilor de la tastatura..................................................................................................13
2.2.6 Constante...................................................................................................................................13
2.2.7 Declararea constantelor simbolice.............................................................................................14
2.2.8 Constante de tip enumerare.......................................................................................................14
2.2.9 Sugestii pentru denumirea constantelor.....................................................................................15
2.3 Instructiuni, operatori si expresii introducere...................................................................................16
2.3.1 Instructiuni.................................................................................................................................16
2.3.2 Instructiuni compuse sau blocuri...............................................................................................16
2.3.3 Operatori si expresii...................................................................................................................16
2.3.3.1 Operatorul =.......................................................................................................................16
2.3.3.2 Expresiile...........................................................................................................................16
2.3.3.3 Operatorii aritmetici...........................................................................................................17
2.3.3.4 Incrementarea / decrementarea variabilelor.......................................................................17
2.3.3.5 Operatorii de comparare....................................................................................................18
2.4 Elemente de control al executiei.......................................................................................................18
2.4.1 Secventele..................................................................................................................................18
2.4.2 Deciziile.....................................................................................................................................18
2.4.2.1 Instructiunile if, else, else if...............................................................................................19
2.4.2.2 Instructiunea switch...........................................................................................................21
2.4.3 Bucle..........................................................................................................................................23
2.4.3.1 Bucle while........................................................................................................................23
2.4.3.2 Bucle do / while.................................................................................................................24
2.4.3.3 Bucle for............................................................................................................................25
2.4.4 Instructiunea break....................................................................................................................26
2.4.5 Instructiunea continue................................................................................................................27
2.5 Functii................................................................................................................................................28
2.5.1 Definirea functiilor....................................................................................................................28
2.5.2 Declararea functiilor..................................................................................................................28
1
InfoAcademy Adonis Butufei
2
InfoAcademy Adonis Butufei
1 INTRODUCERE
A doua generatie
Aceasta generatie a aparut cu limbajul FORTRAN. El permitea scrierea programului folosind un set de
instructiuni care erau mai usor de scris si depanat si erau independente de platforma hardware pe care
lucrau.
Pentru a putea fi rulat pe o masina, codul scris de programator trebuia transformat in instructiuni binare
(cod obiect) si aceasta se realiza cu ajutorul unui program numit compilator.
Deoarece codul sursa putea avea mai multe fisiere, dupa compilare rezultau mai multe fisiere binare care
trebuiau grupate impreuna pentru a crea programul. Aceasta se realiza cu ajutorul unui program numit
linker. Pentru a putea fi transferat pe o alta platforma hardware programul trebuia recompilat cu un
compilator specific acelei platforme.
A treia generatie
Daca a doua generatie a imbunatatit structura logica a limbajelor, a treia generatie a devenit mult mai usor
accesibila dezvoltatorilor. Multe limbaje de uz general folosite astazi, BASIC, C, C++, Java, C# apartin
acestei generatii.
Brian Kernighan si Denis Richie au creat limbajul de programare C. Acest limbaj a fost folosit pentru
rescrierea sistemului de operare UNIX care a avut un succes deosebit. Multe platforme hardware au
adoptat variante ale acestui sistem de operare. Dupa raspandirea acestui sistem de operare, scrierea
programelor a devenit mult mai usoara pentru ca dezvoltatorii nu mai erau nevoiti sa interactioneze direct
3
InfoAcademy Adonis Butufei
A patra generatie
Cu limbajele de uz general din a treia generatie puteau fi dezvoltate o multitudine de programe. Insa
pentru anumite domenii specifice cum ar fi interogarea bazelor de date, calcule statistice si altele nu era
eficienta folosirea acestor limbaje. Din acest motiv, limbajele din a patra generatie s-au concentrat pe
rezolvarea problemelor specifice unor domenii.
Scopul acestor limbaje este sa reduca eforturile si costurile de dezvoltare a programelor, oferind un nivel
inalt de abstractizare al domeniului respectiv.
Cateva exemple de limbaje: FoxPro, SQL, PL/SQL, LabView, S, R, Mathematica, ABAP.
A cincea generatie
Aceste limbaje sunt dezvoltate cu intentia de a lasa programul sa rezolve probleme fara interventia
programatorului si sunt folosite in cercetarile legate de inteligenta artificiala. Eforturile in acest domeniu
au ramas inca in faza cercetarilor. Cateva exemple de limbaje: Prolog, OPS5, Mercury.
4
InfoAcademy Adonis Butufei
• Pentru ca oferea solutia optima pentru cele mai multe activitati de programare.
Progamarea modulara este un aspect pentru toate programele mari de succes. Pe masura ce aceste
programe cauta sa rezolve probleme reale, exprimarea conceptelor este destul de dificila folosind doar
tipurile de date oferite de limbajul de programare. Pentru a rezolva acest aspect C++ asigura
dezvolatorilor posibilitatea definirii propriilor tipuri de date. Acestea se numesc tipuri abstracte de date
sau tipuri definite de utilizator.
Programare obiectuala
Abstractizarea datelor este un element esential al designului de calitate. Totusi, doar tipurile utilizator nu
rezolva o serie de aspecte importante ale programelor reale.
Primul aspect important al programarii obiectuale este incapsularea. Incapsularea presupune separarea
modului de folosire a functionalitatii de detaliile de implementare. Majoritatea obiectelor din jurul nostru,
televizoare, telefoane mobile, tablete etc. ofera o interfata simpla de folosire si ascund modul cum au fost
realizate.
5
InfoAcademy Adonis Butufei
Al doilea aspect important al programarii obiectuale este mostenirea. Mostenirea permite extinderea unei
clase si adaugarea de alte functionalitati. Acest mecanism, folosit corect, permite reutilizarea codului
intr-un grad mult mai mare decat era posibil folosind modelele anterioare.
De exemplu putem avea o clasa Angajat. Deoarece un manager este un angajat dar are atributii diferite de
ale angajatului putem deriva clasa Manager si adauga functionalitatea specifica, asa cum este schitat in
exemplul de mai jos. Clasa Angajat se numeste clasa de baza, sau parinte pentru clasa Manager. Clasa
Manager se numeste clasa derivata.
Al treilea aspect important al programarii obiectuale este polimorfismul. Acest mecanism permite
claselor derivate sa specializeze comportamentul claselor de baza. De exemplu toate mijoloacele de
transport în comun se deplaseaza intre statii. Tramvaiul si autobuzul specializeaza deplasarea intre statii
in mod diferit.
Programare generica
Aplicarea programarii obiectuale in productie a permis reducerea timpului de dezvoltare a proiectelor de
la luni la saptamani si de la ani la trimestre. De asemenea, a permis dezvoltarea mai eficienta a versiunilor
urmatoare ale programelor lansate pe piata.
Exista tipuri de prelucrari care sunt similare indiferent de tipul de date asupra carora se executa aceste
prelucrari. O stiva de caramizi si o stiva de farfurii folosesc acelasi tipar de organizare a elementelor.
Folosind programarea generica putem implementa tiparul, stiva, o singura data si apoi sa-l folosim pentru
diferite tipuri de date.
1 Intrebari frecvente despre C++, este o versiune online a unei carti excelente C++ FAQ de Marshall Cline
6
InfoAcademy Adonis Butufei
Fig 1.2
Se alege tipul de program c++ si se apasa next. Se alege directorul unde se salveaza fisierele proiectului si
se apasa next. Se pastreaza optiunile implicite si se apasa finish.
Fig 1.5
Fig 1.6
cpp obj
cpp obj
linkeditor exe
c++ runtime
biblioteci (lib)
Fig 1.7
Atunci cand se apasa build compilatorul transforma fiecare fisier sursa in fisier binar. Apoi linkeditorul
conecteaza aceste fisiere cu biblioteca runtime de c++ si cu alte biblioteci si genereaza fisierul executabil.
8
InfoAcademy Adonis Butufei
Extensia fisierului determina sintaxa folosita de compilator: *.c pentru limbajul C respectiv *.cpp pentru
limbajul C++.
1.5 Sumar
• Limbajele de progamare permit transmiterea instructiunilor catre calculator.
• Procesul dezvoltarii programelor are 4 etape de baza: designul, implementarea, testarea si depanarea.
Pentru realizarea programelor practice aceste etape se parcurg de mai multe ori.
• Dezvoltarea programelor de calitate necesita o metodologie care ajuta descompunerea problemelor
complexe în probleme mai simple care pot fi analizate, planificate si dezvoltate.
• Pentru cresterea productivitatii se folosesc mediile de dezvoltare integrata.
9
InfoAcademy Adonis Butufei
2.1 Comentariile
Comentariile sunt explicatii care ajuta programatorul sa inteleaga mai usor anumite aspecte ale codului.
Pentru a putea fi ignorate de compilator comentariile necesita folosirea unor caractere de idenficare.
Exista doua tipuri de comentarii: pe mai multe linii si pe o singura linie.
2.1.3 Recomandari
Comentariile nu trebuie sa clarifice ce face codul ci de ce este aleasa o anumita abordare.
Atunci cand se schimba codul este important sa actualizam si comentariile aferente.
Trebuie sa fie concise pentru a reduce eforturile de mentenanta.
10
InfoAcademy Adonis Butufei
In tabelul de mai jos sunt prezentate doar tipurile de variabile necesare pentru a scrie programele de
invatare iar in capitolul urmator vom prezenta toate tipurile de date fundamentale din C++ cu detaliile
aferente.
In C++ este necesara sa declararea variabilelor inainte de a fi folosite. Declararea unei variabile
informeaza compilatorul sa rezerve un spatiu de memorie din zona de date si sa-i asocieze un nume.
Variabilele pot fi gandite precum scaunele dintr-o sala de spectacol. Atunci cand cumparam un set de
bilete rezervam un numar de locuri din acea sala. Prin aceasta actiune ne declaram intentia de a participa
la acel spectacol.
11
InfoAcademy Adonis Butufei
• Trebuie sa nu fie un cuvant cheie pentru C++3. Este necesara consultarea documentatiei mediului
(IDE) folosit pentru a verifica daca nu au fost rezervate si alte cuvinte.
• Trebuie sa fie expresive pentru a putea intelege usor scopul lor.
• Trebuie respectata o conventie de stabilire a numelor in mod consecvent pentru o mai usoara
mentenanta a programului. Pe parcursul acestui curs numele variabilelor incepe cu litera mica.
• Fiecare variabila este util sa se foloseasca pentru un singur scop. Aceasta previne aparitia unor defecte.
• Declararea variabilelor trebuie sa fie cat mai apropiata de locul unde sunt folosite.
• Numele sunt case sensitive, aceasta inseamna ca totalCount si totalcount sunt procesate ca doua
variabile diferite.
In cazul in care primele doua reguli nu sunt respectate apar erori la compilare.
Important
Variabilele trebuie sa fie unice in contextul de executie al programului. Daca doua variabile cu acel nume
sunt declarate in acelasi context compilatorul genereaza mesaje de eroare.
Exemple de declarare:
int contor; // declararea unei singure variabile pe linie
double celsius, fahrenheit; // declararea a doua variabile pe linie
bool isFinished;
char terminator;
string nume;
Exemplu:
int contor;
contor = 0;
Important
Pentru a elimina potentialele erori se recomanda setarea unei valori in momentul declararii variabilelor.
Aceasta se numeste initializare.
Exemplu:
int contor = 0;
char start = 'A';
bool isFinished = false;
double temperaturaCelsius = 32.5;
string mesaj = "Buna ziua";
Exemplu:
#include <iostream>
#include <string>
int main()
string nume;
string prenume;
cout << "Numele complet este: " << nume << " ";
return 0;
In acest exemplu cand se executa instructiunea cin >> nume; programul se oprese si asteapta
introducerea literelor (caracterelor) numelui. Executia va continua dupa ce utilizatorul apasa tasta Enter.
2.2.6 Constante
Cunstantele sunt variabile a caror valoare nu se schimba pe parcursul rularii programului. Se intalnesc in
13
InfoAcademy Adonis Butufei
Constantele trebuie initializate la declarare, omiterea acestui fapt genereaza erori de compilare.
Exemplu
const double FACTOR_CONVERSIE; // genereaza eroare de compilare
Exemplu
enum CuloareSemafor {ROSU, GALBEN, VERDE};
Implicit compilatorul trateaza tipul enumerat ca un caz particular de intreg, initializand crescator fiecare
componenta, pornind de la valoarea 0.
Exemplu
#include <iostream>
int main()
14
InfoAcademy Adonis Butufei
return 0;
GALBEN= 1
VERDE= 2
Daca dorim putem specifica valoarea numerica pentru fiecare element din set sau pentru o parte a setului.
In ultimul caz, compilatorul continua incrementarea cu 1 pornind de la ultima valoare specificata ca in
exemplul urmator.
#include <iostream>
int main()
return 0;
}
15
InfoAcademy Adonis Butufei
2.3.1 Instructiuni
Instructiunile controleaza secventa de executie, evalueaza expresiile sau nu fac nimic (in cazul
instructiunii nule care contine doar carcterul ; Caracterul ; indica sfarsitul instructiunii.
x = y;
y = temp;
2.3.3.1 Operatorul =
Acest operator seteaza valoarea din partea dreapta variabilei care se afla in partea stanga a semnului egal.
2.3.3.2 Expresiile
In C++ o expresie este orice combinatie de operatori, constante, apeluri de functii care calculeaza o
valoare.
Exemplu:
4.5; // returneaza valoarea 4.5 Sa analizam ultima expresie, care este evaluata in ordinea
a = b + c; urmatoare:
d = a = b + c; 6. calculeaza suma b + c
7. atribuie rezulatul lui a
8. atribuie rezultatul lui a = b + c lui d
16
InfoAcademy Adonis Butufei
Important
Rezultatul impartirii depinde de tipul operanzilor: daca ambii termeni sunt de tip intreg, compilatorul
efectueaza impartirea intreaga chiar daca in stanga egalului este o variabila de tip double. In cazul in care
cel putin unul din termenii impartirii este real atunci compilatorul efectueaza impartirea reala si rezultatul
este cel asteptat.
Exemplu
double impartireIntreaga = 3 / 4; // rezultatul evaluarii este 0
// deoarece ambii termeni sunt
// numere intregi.
Exista doua tipuri de incrementare / decrementare: cu prefixare atunci cand operatorul apare inaintea
variabilei si cu postfixare atunci cand operatorul apare dupa variabila. In capitolul 4 vom discuta in
detaliu diferentele dintre acesti operatori.
Exemple:
int a = 0;
int b = 1;
17
InfoAcademy Adonis Butufei
2.4.1 Secventele
In acest caz instructiunile programului se executa secvential in ordinea in care au transformare
fost scrise. date
Fig 2.1
2.4.2 Deciziile
Deciziile permit executarea conditionata a unor comenzi. Sunt similare cu intuneric?
Reference source not found lumina este aprinsa doar daca este intuneric (conditia aprind lumina
intuneric? este evaluata ca true).
Fig 2.2
4 daca relatia dintre valorile variabilelor este indeplinita expresia este evaluata cu valoarea true.
18
InfoAcademy Adonis Butufei
Pe prima linie avem testarea conditiei cu instructiunea if(expresie). Aici este important de remarcat ca
am folosit o instructiune compusa. In acest mod se delimiteaza foarte clar instructiunile care se executa
atunci cand este indeplinita conditia de cele din ramura principala a programului. Codul din blocul if
trebuie indentat cu un tab la dreapta pentru a citirea si intelegerea logicii programului.
Exemplu:
1: if(ROSU5 == culoare)
2: {
4: }
Frecvent atunci cand se foloseste instructiunea if se uita scrierea celui de-al doilea egal al operatorului.
Atunci cand expresia se compara cu o constanta eroarea poate fi identificata la compilare daca se scrie
constanta in partea stanga ca in linia 1.
2: {
4: }
5: else
6: {
8: }
Exista cazuri cand trebuie sa testam mai multe alternative. O solutie poate fi sa tratam in interiorul
blocului else variantele ramase.
if(ROSU == culoare)
5 In acest exemplu si urmatoarele se foloseste constanta enumerata CuloareSemafor definita in sectiunea 2.2.8.
19
InfoAcademy Adonis Butufei
else
if(VERDE == culoare)
else
In cazul in care avem mai multe variante logica acestor conditii devine greu de urmarit si inteles. Din
aceste motive pot apare multe defecte in timpul mentenantei.
O solutie mai buna se poate obtine folosind a treia forma in care folosim si combinatia else if ca in
exemplul de mai jos.
if(ROSU == culoare)
else
Din punct de vedere logic implementarile sunt echivalente insa aceasta forma este mult mai clara si este
de preferat primeia.
20
InfoAcademy Adonis Butufei
De evitat:
Adaugarea terminatorului ; pe linia cu decizia Folosirea operatorului = in loc de ==
if(x = y)
if(conditie); {
//...
{
}
// aceste instructiuni se executa mereu!
// …
case VERDE:
break;
case GALBEN:
break;
default:
break;
Observam ca blocul incepe cu instructiunea switch care evalueaza expresia. In interiorul blocului avem
o succesiune de alternative reprezentate de cuvintele cheie case.
21
InfoAcademy Adonis Butufei
Valorile acestor alternative sunt constante. Dupa aceea pentru fiecare valoare avem una sau mai multe
instructiuni. In momentul cand am terminat de tratat acea alternativa se iese din bloc cu instructiunea
break.
Optional exista alternativa default care este aleasa daca nici una dintre celelalte nu a fost rezultatul
evaluarii expresiei.
Important
In absenta instructiunii break din alternativa curenta, se continua executarea secventei de instructiuni din
interiorul blocului switch pana la intalnirea primului break sau pana la sfarsitul blocului switch.
Acest aspect trebuie tratat cu atentie pentru ca exista cazuri cand acest comportament este necesar, dar si
cazuri in care s-a omis instructiunea break din greseala.
int main()
char ch;
switch(ch)
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
default:
22
InfoAcademy Adonis Butufei
return 0;
In exemplu vocalele sunt selectate fiecare in parte si se executa un cod comun pentru ele iar pentru
consoane se executa codul din sectiunea default.
2.4.3 Bucle
Permit executarea unei secvente de instructiuni atat timp cat este indeplinita o conditie. Conceptual exista
trei tipuri de bucle: while, do while si for.
// secventa de instructiuni
Un exemplu simplu de folosire este programul urmator care calculeaza factorialul unui numar.
1: #include <iostream>
3:
4: int main()
5: {
7:
8: int n;
9: cin >> n;
10:
13: {
15: n = n - 1;
16: }
17:
19: return 0;
23
InfoAcademy Adonis Butufei
20: }
In linia 6 se afiseaza mesajul pe ecran. Valoarea variabilei este citita de la tastatura in linia 9. In linia 11
valoarea factorialului este initializata cu 1. In linia 14 se calculeaza produsul intre valoarea anterioara si
n. In linia 15 valoarea lui n este decrementata. Procesul se continua pana cand n devine egal cu 1,
moment in care bucla se termina si se afiseaza rezultatul pe ecran.
{
// secventa instructiuni
} while (conditie);
3:
4: int main()
5: {
7:
8: int n;
9: cin >> n;
10:
12: if (n > 0)
13: {
14: do
15: {
17: n = n - 1;
19: }
21: return 0;
22: }
24
InfoAcademy Adonis Butufei
Singura diferenta intre acest tip de bucla si precedentul este ca aici testul conditiei se face la final.
Secventa se executa prima data indiferent de valoarea conditiei.
// secventa instructiuni.
• Expresia de initializare, uzual declara un contor folosit in blocul buclei si se executa o singura data.
3:
4: int main()
5: {
7:
8: int n;
9: cin >> n;
10:
12:
14: {
16: }
17:
19: return 0;
25
InfoAcademy Adonis Butufei
20: }
Executia programului pana la linia 13 este similara cu exemplele anterioare. Executia buclei for se face in
modul urmator:
1. La prima iteratie se declara si se intializeaza variabila i cu valoarea lui n.
2. Se evalueaza conditia in cazul nostru i > 1.
3. In caz afirmativ porneste executia seventei din corpul buclei.
4. Altfel se merge la urmatoarea instructiune dupa bucla.
5. Se actualizeaza factorial cu valoarea factorial * i
6. Se decrementeaza i
7. Se repeta secventa de la punctul 2.
Dupa terminarea buclei se afiseaza rezultatul pe ecran.
Observatii
• Pentru intelegerea codului este recomandat ca expresiile de initilalizare, conditie si increment sa fie cat
mai simple.
• Oricare din aceste expresii poate lipsi. Daca a doua expresie, cea pentru conditie, compilatorul
considera conditia indeplinita.
3:
4: int main()
5: {
7: int n;
8: cin >> n;
9:
10: int i = 2;
12: {
26
InfoAcademy Adonis Butufei
13: if(0 == n % i )
14: {
16: break;
17: }
18: }
19:
20: if(i == n)
21: {
23: }
24: return 0;
25: }
In acest exemplu am definit variabila contor in linia 10 in afara buclei deoarece este utilizata pentru
verificarea conditiei din linia 20. In cazul in care a fost gasit un divizor pentru numar, altul decat 1 sau n
numarul nu este prim si bucla se opreste in linia 16.
2: {
3: if(0 == i % 2)
4: {
5: continue;
6: }
8: }
Atunci cand i este numar par conditia din linia 3 este indeplinita si executia se contiuna de la inceputul
buclei.
6 In cazul buclelor while si do / while trebuie acordata atentie deoarece uzual incrementarea / decrementarea
contorului se face la sfarsit.
27
InfoAcademy Adonis Butufei
2.5 Functii7
O functie reprezinta un nume asociat unui bloc de cod. Blocul de cod se executa prin apelul numelui.
Functiile permit descompunerea problemelor complexe intr-un set de probleme simple care pot fi usor de
implementat.
Functiile scrise corespunzator ascund detaliile de implementare. Sunt folosite pentru evitarea scrierii
repetate a aceluiasi cod intr-un program sau in programe diferite.
2: {
3: // instructiuni
4: }
• tip de return– reprezinta tipul de date returnat dupa executia functiei. Functiile care nu returneaza
rezultate folosesc void ca tip de return.
• Nume – reprezinta numele functiei. Numele functiei nu poate contine spatii.
• Lista de parametri: (tip parametru1, tip parametru2, ...) – contine atati parametri
cati sunt necesari pentru executia secventei. Fiecare parametru este reprezentat de un tip si un nume
care poate fi gandit ca o variabila apartinand functiei. Parametrii permit transferul datelor catre functie.
• Corpul functiei – blocul de cod care contine instructiunile functiei (liniile 2 – 4).
Headerul functiilor
Prima linie din exemplul de mai sus se numeste headerul functiei.
1: tip Nume (parametru1, parametru2, ...)
Important:
• Ca si variabilele functiile trebuiesc declarate sau definite inainte de a fi folosite.
• O functie poate fi declarata de mai multe ori insa trebuie sa fie definita o singura data.
Dupa executia comenzii return (linia 11) rezultatul expresiei x + y este atribuit variabilei rezultat
din linia 4 si se incheie executia functiei Suma si programul continua cu linia urmatoare.
1: int Suma(int x, int y); // 1. declararea functiei
2: int main()
3: {
5: return 0;
6: }
7:
8: // 2. definirea functiei
10: {
11: return x + y;
12: }
2: #include <string>
4:
6:
7: int main()
29
InfoAcademy Adonis Butufei
8: {
9: AfisareMesaj("Hello");
10: return 0;
11: }
12:
14: {
16: }
De retinut:
pentru funcții avem 3 activități:
• declarare - asemanatoare cu o carte de vizita – ofera informatii pentru a putea fi apelate.
• apel – asemanator cu apelul telefonic cand folosim numarul din cartea de vizita pentru a discuta cu
persoana respectiva. Aici folosim numele functiei si parametrii pentru a executa codul functiei.
Recomandari
• Pentru usurinta depanarii si intelegerii programelor este recomandata scrierea unei singure instructiuni
pe linie.
• O functie trebuie sa faca un singur lucru (de exemplu sa citeasca variabile, sa calculeze, sa afiseze
rezultate etc).
• Numele functiei este recomandabil sa inceapa cu litera mare pentru a putea distinge functiile de
variabile.
• Numele functiei trebuie sa reprezinte prelucrarea realizata de functie.
30
InfoAcademy Adonis Butufei
functioneaza corect de la prima rulare. De multe ori defectele sunt introduse in perioada de mentenanta
sau de adaugare de noi functionalitati. Chiar daca programele ar functiona corect de la prima rulare tot
este necesara verificarea corectitudinii pentru a fi siguri de asta.
Programele pot contine erori de sintaxa si erori de logica. Erorile de sintaxa sunt detectate automat de
compilator care precizeaza fisierul, linia din fisier si tipul erorii. Acestea sunt cel mai usor de fixat si cele
mai sigure pentru ca nu putem compila programul fara rezolvarea lor.
Am putea crede ca dupa ce am reusit sa compilam cu succes programul, jobul nostru s-a terminat. In
realitate insa lucrurile nu stau deloc asa. Pentru a fi siguri ca programul functioneaza corect este necesara
executarea programului pas cu pas si verificarea comportamentului prin toate ramurile logice.
Multe din programele comerciale „crapa” atunci cand utilizatorul doreste sa faca o actiune normala
deoarece echipa de dezvolatare nu a reusit sa verifice executia prin acea ramura logica.
Pentru a verifica un program dezvoltatorul poate rula programul din mediul de dezvoltare in mod
debbugger. Debuggerul este o componenta a mediului de dezvoltare care ofera printre altele posibilitatea
executarii programului pas cu pas, setarea unor puncte de intrerupere (breakpoint) in care se opreste
executia, examinarea valorilor variabilelor (watches).
• In modul step into, cand se intalneste un apel de functie debuggerul traseaza executia acestei functii.
• In modul step out executia continua in fisierul de unde s-a apelat functia curenta.
Aceste moduri se pot alege din meniul Debug, butoanele dedicate din toolbarul Debug
Nota
Executia se va opri inainte de a ajunge la cursor in urmatoarele conditii:
1. Exista un breakpoint intre punctul curent de executie si pozitia cursorului,
2. Exista o zona de cod care solicita interactiunea cu utilizatorul intre punctul curent de executie si
pozitia cursorului.
Nota
Pentru a putea examina valorile variabilelor este necesar ca programul sa fie compilat in configuratia
Debug. Acest tip de compilare adauga informatii aditionale in executabil care faciliteaza operatiile de
rulare in mod interactiv a executiei. Aceasta se realizeaza din meniul Build/Configuration Manager.
3. Compilam pentru a verifica daca nu avem erori de sintaxa. Punem cursorul pe linia primei
32
InfoAcademy Adonis Butufei
2.9 Sumar
• Comentariile ajuta programatorul sa inteleaga mai usor anumite aspecte ale programului. Ele nu
trebuie sa explice de ce s-a ales o anumita solutie.
• Variabilele sunt locatii de memorie in care se stocheaza date. Variabilele trebuiesc declarate inainte de
folosire. Declararea variabilelor are doua elemente tipul si numele.
• Atribuirea permite setarea unei valori intr-o variabila.
• Constantele sunt variabile ale caror valori nu se pot schimba in timpul executiei.
33
InfoAcademy Adonis Butufei
buclele.
• Pentru decizii se folosesc instructiunile if, if/else, if/else if/ else si switch.
• Pentru verificarea executiei programele se executa in mod debugger. Aceasta permite executia pas cu
pas, verificarea valorilor variabilelor.
34
InfoAcademy Adonis Butufei
#include <iostream>
main ()
return 0;
int main()
return 0;
return a /b;
}
35
InfoAcademy Adonis Butufei
int result;
result = result + i;
return result;
8. Scrieti o functie care primeste numarul de ore si minute ca parametri si returneaza valoarea acelui
interval in minute. Exemplu: pentru 1 ora si 30 minute va returna 90 minute.
9. Scrieti o functie care primeste un interval in minute si tipareste pe ecran numarul de ore si minute.
Exemplu: pentru 90 minute va afisa o ora si 30 minute.
10. Scrieti un program care citeste varsta in ani si calculeaza numarul de luni corespunzatoare acestor ani.
2.11 Bibliografie:
• Sams Teach Yourself C++ in One Hour a Day, sixth edition, Sams, Jesse Liberty, Siddhartha Rao,
Bradley L. Jones; Cap 2 – 5, 7
• C++ Without Fear, second edition, Prentice Hall, Brian Overland; Cap 1, 2.
36