Sunteți pe pagina 1din 9

1.

Programarea i rezolvarea problemelor

Comportamentul uman i gndirea sunt caracterizate de secvene logice. Un


individ nva cum s execute anumite comenzi. De asemenea, nva ce tipuri de
comportamente poate atepta de la ali indivizi.
La o scar mai larg, matematica lucreaz cu secvene logice de pai pentru
rezolvarea problemelor i demonstrarea teoremelor. La fel, producia de mas nu
poate exista fr succesiunile de operaii executate ntr-o anumit ordine.
Atunci cnd ordonm un proces, l programm. Acest curs se refer la
programarea unui aparat: calculatorul.
Calculatorul este un dispoztiv programabil care poate pstra, regsi i procesa
date.
Aa cum un program descrie aciunile care trebuie executate pentru a atinge un
scop, un program de calculator descrie paii pe care trebuie s i execute calculatorul
pentru a rezolva o problem. n contextul acestui curs, atunci cnd vom vorbi de
programare ne vom referi la programarea calculatorului.
Un program de calculator este o list de instruciuni care trebuie urmate de
calculator.
Un calculator ne permite s realizm o serie de aciuni ntr-un mod mult mai
rapid i mai precis dect o putem face fr ajutorul su. Pentru a l folosi, ns,
trebuie s specificm ce dorim s facem, dar i n ce ordine. Aceste lucruri le facem
prin programare.

1.1

Cum scriem un program?

Pentru a scrie un program trebuie s parcurgem dou faze:


- rezolvarea problemei
- implementarea.

Faza de rezolvare a problemei


1. Analiza nseamn nelegerea, definirea problemei i a soluiei ce trebuie dat;
2. Algoritmul presupune dezvoltarea unei secvene logice de pai care trebuie
urmai pentru rezolvarea problemei;
3. Verificarea este parcurgerea pailor algoritmului pe mai multe exemple pentru
a fi siguri c rezolv problema pentru toate cazurile.

Faza de implementare
1. Programul reprezint translatarea algoritmului ntr-un limbaj de programare
2. Testarea este etapa n care ne asigurm c instruciunile din program sunt
urmate corect de calculator. n situaia n care constatm c sunt erori, trebuie s
revedem algoritmul i programul pentru a determina sursa erorilor i pentru a le
corecta.
Aceste dou faze de dezvoltare a programului sunt urmate de faza de utilizare
a programului care nseamn folosirea acestuia pentru rezolvarea problemelor reale,
cele pentru care a fost conceput. Ulterior pot interveni modificri ale programului fie
pentru a rspunde noilor cerine ale utilizatorilor, fie pentru corectarea erorilor care
apar n timpul utilizrii i care nu au putut fi gsite n faza de testare.
Calculatorul nu este inteligent. El nu poate analiza problema i nu poate s dea
o soluie. Programatorul trebuie s analizeze problema, s dea soluia i apoi s o

Programarea calculatoarelor i limbaje de programare I

comunice calculatorului. Avantajul folosirii calculatorului este c el rezolv


problemele rapid i fr erori, eliberndu-ne totodat de realizarea unor operaii
repetitive i plictisitoare.
Programatorul ncepe operaia de programare prin analiza problemei i
dezvoltarea unei soluii generale numit algoritm. Algoritmul este o procedur care
descrie paii ce trebuie parcuri pentru rezolvarea unei probleme ntr-un timp finit.
Algoritmul este esenial pentru procesul de programare. Programul este de fapt un
algoritm scris pentru calculator.

Un algoritm este o secven logic de aciuni. Folosim algoritmi n fiecare zi:


reetele, instruciunile de folosire sunt exemple de algoritmi care nu sunt, ns,
programe. Un exemplu de algoritm poate fi o succesiune de pai care trebuie urmai
pentru a porni o main. Un alt exemplu este calculul sumei care trebuie pltit unui
salariat ntr-o sptmn.
1. Verificarea sumei pltite pe or
2. Determinarea numrului de ore lucrate n timpul sptmnii
3. Dac numrul de ore este mai mic sau egal cu 40, se nmulete numrul de
ore cu suma pltit pe or
4. Dac numrul de ore depete 40, atunci se scade 40 din numrul de ore
lucrate, iar diferena de ore se nmulete cu 1,5 ori suma pltit pe or
5. Adun sumele de la punctele 3 i 4 i stabilete suma final.
Dup dezvoltarea soluiei generale, programatorul poate testa algoritmul mental
sau n scris. Dac algoritmul nu este corect, relum paii descrii mai devreme.
Cnd programatorul este satisfcut de algoritm, poate s l translateze ntr-un
program scris ntr-un limbaj de programare.

Programarea calculatoarelor i limbaje de programare I

Limbajul de programare este un set de reguli, simboluri i cuvinte speciale


folosite pentru a construi un program.
Limbajul C++ este o variant simplificat a limbii engleze i care are un set
strict de reguli gramaticale. Datorit numrului mic de cuvinte disponibile, suntei
obligai s scriei instruciuni simple i exacte.
Codarea este translatarea algoritmului ntr-un limbaj de programare.
Execuia este rularea programului pe calculator (running).
Depanarea este faza de determinare i corectare a erorilor (debugging).
Implementarea este combinaia dintre codarea i testarea algoritmului.
O parte important a programrii este scrierea documentaiei. Documentaia
este reprezentat de un text scris i de comentariile necesare nelegerii de ctre alte
persoane a programului scris de noi.
Dup scrierea programului, trebuie s transmitem calculatorului informaiile sau
datele necesare rezolvrii problemei.
Informaia este orice cunotin care poate fi comunicat, inclusiv idei abstracte
sau concepte.
Datele sunt informaii transpuse ntr-o form care poate fi neleas de
calculator.

1.2

Ce este un limbaj de programare?

Programatorii scriu instruciuni n diverse limbaje de programare, unele care


sunt nelese n mod direct de calculator, altele care necesit mai muli pai de
translatare. n prezent exist sute de limbaje de programare care pot fi mprite n
trei tipuri generale:
1. Limbaje main
2. Limbaje de asamblare
3. Limbaje de nivel nalt

Singurul limbaj de programare pe care calculatorul l poate executa n mod


direct este un set primitiv de instruciuni numit limbaj main sau cod main. Acesta
este limbajul natural al unui calculator i este definit de alctuirea hardware a
fiecrui calculator n parte. Un anumit limbaj main poate fi folosit doar pentru un
anumit tip de calculator. Limbajul main este alctuit din instruciuni codate binar i
poate fi folosit direct de calculator. Limbajele main sunt greu de folosit de
programatori, aa cum se poate vedea din urmtoarea seciune de program scris n
limbaj main care adun o sum suplimentar de bani la suma de baz pe care o
primete un angajat, rezultnd suma final.
Exemplu
+1300042774
+1400593419
+1200274027
3

Programarea calculatoarelor i limbaje de programare I

Pe msur ce calculatoarele au devenit tot mai populare, a devenit evident c


limbajul main este greu de folosit, dezvoltarea aplicaiilor este foarte lent i
probabilitatea de apariie a erorilor este foarte mare. n loc s se foloseasc numere
pentru a programa calculatoarele, s-a trecut la folosirea unor abrevieri ale unor
cuvinte din limba englez care reprezint operaii elementare pentru calculator.
Aceste abreviaii formeaz baza limbajelor de asamblare. n acelai timp au fost
dezvoltate programe de translatare sau asambloare pentru a converti programele
scrise in limbaj de asamblare ctre programe n limbaj main. Secvena de
instruciuni de mai jos realizeaz aceleai operaii ca cele din exemplul anterior, dar
ntr-o manier mai clar dect echivalentul n limbaj main.
Exemplu
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
n prezent se folosesc limbaje de nivel nalt, mult mai uor de folosit dect codul
main i care accelereaz procesul de dezvoltare software. Un program numit
compilator translateaz un program scris ntr-un limbaj de nivel nalt n limbaj
main. Iat o variant scris ntr-un limbaj de nivel nalt a programului de mai sus.
Exemplu
grossPay = basePay + overTimePay
Pentru a putea rula un program de nivel nalt pe un calculator, pe acesta trebuie
s existe un compilator adaptat limbajului dar i calculatorului.
Programul surs este un program scris ntr-un limbaj de nivel nalt.
Programul obiect este versiunea n limbaj main a programului surs i se
obine n urma compilrii.
Compilarea i execuia sunt dou procese distincte.

Instruciunile dintr-un limbaj de programare reflect operaiile pe care le poate


realiza un calculator:
- transferarea datelor dintr-un loc n altul
- citirea datelor de la un dispozitiv de intrare (ex. tastatura) i transmiterea lor
ctre un dispozitiv de ieire (ex. ecran)
- stocarea i aducerea datelor din memorie sau alte dispozitive de memorare
- compararea a dou date pentru stabilirea egalitii sau a inegalitii
- operaii aritmetice

Programarea calculatoarelor i limbaje de programare I

Scurt istoric al limbajelor C i C++


Limbajul C++ a evoluat din limbajul C care, la rndul su, a avut la baz alte
dou limbaje de programare, BCPL i B. Limbajul BCPL a fost dezvoltat n 1967 de
Martin Richards ca limbaj pentru scrierea sistemelor de operare i a compilatoarelor.
Ken Thompson a modelat multe elemente ale BCPL n limbajul B pe care l-a folosit
pentru scrierea uneia dintre primele versiuni ale limbajului UNIX la Bell Laboratories
n 1970. Aceste dou limbaje de programare nu foloseau tipuri de dat, fiecare dat
avea aceeai dimensiune n memorie, iar tratarea unei date ca ntreg sau real era n
responsabilitatea programatorului.
Limbajul C a fost dezvoltat din limbajul B la Bell Laboratories n 1972 de Dennis
Ritchie. Iniial a fost folosit pentru dezvoltarea sistemului de operare UNIX, iar astzi
majoritatea sistemelor de operare sunt scrise n C i C++.
Limbajul C++ este o extensie a lui C i a fost creat la nceputul anilor 1980 de
Bjarne Stroustroup tot la Bell Laboratories. Are toate elementele limbajului C, dar
ofer posibilitatea programrii orientate pe obiecte. Obiectele sunt, n principiu,
componente software reutilizabile care modeleaz elemente din lumea real. S-a
dovedit c folosirea unei abordri modulare, a design-ului i a implementrii orientate
pe obiecte poate face ca grupurile de dezvoltare s fie mult mai productive dect
atunci cnd se folosesc alte tehnici de programare, cum ar fi programarea
procedural.

Biblioteca standard C++


Programele C++ constau din elemente numite clase i funcii. Putei programa
fiecare pies de care avei nevoie pentru a alctui un program. Dar cei mai muli
programatori folosesc avantajul oferit de bogata colecie de clase i funcii oferite de
biblioteca standard C++. De aceea, nvarea limbajului C++ nseamn, pe de o
parte nvarea limbajului n sine i, pe de alt parte, deprinderea modului n care se
pot folosi clasele i funciile din biblioteca standard C++. Aceste clase i funcii sunt,
de regul, oferite odat cu compilatorul, dar exist multe biblioteci suplimentare care
sunt realizate de companii software independente. Unele dintre acestea pot fi
descrcate n mod liber de pe Internet.
Avantajul crerii propriilor noastre funcii i clase este c vom ti exact cum
lucreaz, dar dezavantajul este timpul consumat i efortul depus pentru proiectarea,
dezvoltarea i ntreinerea noilor clase i funcii pentru a opera corect i eficient.

Programarea structurat
Dup anii 1960, cnd aplicaiile au nceput s devin din ce n ce mai complexe
i cnd costurile de dezvoltare au nceput s devin foarte mari, lumea a realizat c
acest proces este mai complex dect s-a estimat iniial. Activitile de cercetare n
domeniu au rezultat n evoluia ctre programarea structurat, o abordare disciplinat
n scrierea programelor care au devenit mai clare, mai uor de testat, de corectat i
de modificat.

Structuri de program
Limbajele de programare folosesc anumite structuri pentru a transpune
algoritmii n programe.

Programarea calculatoarelor i limbaje de programare I

Secvena

Secvena este o serie de declaraii executate una dup alta.


Selecia (deciza)

IF condiie THEN declaraie1 ELSE declaraie2


Bucla (repetiia sau iteraia)

WHILE condiie DO declaraie


Subprogramul (procedura, funcia, subrutina)

Programarea calculatoarelor i limbaje de programare I

Subprogramul poate fi o combinaie a structurilor anterioare. Ne permite


scrierea separat a unor pri din program i apoi asamblarea lor ntr-o form final.

Programarea orientat pe obiecte


Evoluiile pozitive n dezvoltarea software au nceput s apar odat cu
folosirea programrii structurate. n anii 1980, tehnologia programrii orientate pe
obiecte a nceput s fie folosit pe scar larg n proiectarea i dezvoltarea software.
Tehnologia obiectelor este, n principiu, o schem de mpachetare care
permite crearea unitilor software cu o semnificaie proprie. Acestea sunt focalizate
pe pri specifice ale unei aplicaii. Se pot crea obiecte pentru date, pentru pli,
pentru facturi, obiecte video, obiecte fiier etc. De fapt, orice substantiv poate fi
transpus ntr-un obiect.
Trim ntr-o lume de obiecte. Exist n jurul nostru maini, avioane, oameni,
animale, cldiri etc. naintea apariiei limbajelor orientate pe obiecte, limbajele de
programare (de ex. FORTRAN, Pascal, Basic, C) erau focalizate pe aciuni (verbe) i
nu pe obiecte (substantive). O lume a obiectelor trebuie transpuns, puin forat, ntro lume a aciunilor. Paradigma orientrii pe obiecte prin limbaje cum ar fi Java sau
C++ a fcut posibil ca programarea s devin o prelungire a realitii. Acesta este un
proces mai natural dect programarea procedural i conduce la creteri
semnificative de productivitate.
Una dintre problemele majore ale programrii procedurale este ca unitile de
program nu modeleaz foarte firesc entiti ale lumii reale i, de aceea, nu pot fi
reutilizate n mod facil. Fiecare nou proiect n programarea procedural presupunea
scrierea codului de la zero, lucru care nseamn o risip de timp, bani i resurse
umane. Tehnologia obiectelor face ca entitile create ntr-un proiect (obiectele),
dac sunt corect concepute, s poat fi folosite i n proiecte viitoare.
Pe de alt parte, este remarcabil faptul c uneori nu reutilizarea codului este
marele avantaj al programrii orientate pe obiecte, ci faptul c programele sunt mult
mai uor de neles, organizat, de ntreinut, de modificat sau de corectat.
Elementele de programare structurat sunt noiuni cheie n programarea
orientat pe obiecte. Fiecare clas este o unitate care ncorporeaz structuri de
program.

1.3

Ce este un calculator?

Un calculator (computer) este un dispozitiv capabil s realizeze calcule i s ia


decizii logice cu viteze de milioane sau miliarde de ori mai mari dect oamenii.
Aceasta nseamn c unei persoane i trebuie cteva milioane de secunde pentru a
face calculele pe care le poate face un calculator ntr-o secund.
Calculatorul proceseaz date sub controlul unor niruiri de instruciuni numite
programe de calculator. Aceste programe dirijeaz calculatorul s realizeze secvene
de aciuni care au fost specificate de persoane numite programatori.
Un calculator este alctuit din diverse dispozitive, cum ar fi tastatura, mouse-ul,
discurile, memoria, CD-ROM-ul sau microprocesorul, toate acestea fiind numite
generic hardware. Programele de calculator care ruleaz pe calculator sunt numite
software. Costurile hardware-ului au scazut foarte mult n ultimii ani pn la punctul
n care un calculator personal a devenit foarte accesibil ca pre. Din pcate, costurile
pe care le implic dezvoltarea software au crescut n tot acest timp pe msur ce
aplicaiile au devenit din ce n ce mai complexe. n acest curs i n cel din semestrul
urmtor vom studia metode de dezvoltare software cunoscute prin a cror utilizare se

Programarea calculatoarelor i limbaje de programare I

pot
reduce
costurile:
programarea
structurat,
dezvoltarea
top-down,
funcionalizarea, programarea orientat pe obiecte, programarea generic.

Organizarea unui calculator


Se poate programa i fr a ti prea multe despre alctuirea intern a
calculatorului. Cunoaterea prilor componente ajut, ns, la nelegerea efectului
fiecrei instruciuni din program.
Calculatorul are 4 componente de baz:
1. Unitatea de memorare este o colecie de celule care stocheaz datele.
Fiecare astfel de celul are o adres. Aceste celulue se numesc celule de
memorie sau locaii de memorie.
2. Unitatea central de procesare (CPU) este cea care urmrete instruciunile
din program. Are dou componente:
a. Unitatea aritmetico-logic (ALU) care realizeaz operaiile aritmetice i
logice
b. Unitatea de control care controleaz aciunile celorlalte componente
astfel nct instruciunile s se execute n ordinea corect
3. Dispozitivele de intrare/ieire (I/O) accept date care vor fi procesate i le
prezint pe cele care au fost procesate
4. Dispozitivele auxiliare de stocare pstreaz datele i dup oprirea
calculatorului
Dispozitivele periferice sunt cele de intrare/ieire i cele auxiliare.
Toate aceste componente sunt cunoscute sub numele de hardware.
Programele care permit hardware-ului s funcioneze se numesc software.
Pe lng programele scrise de noi, existun set de programe numite software
de sistem care simplific interfaa dintre calculator i utilizator. n aceast categorie
intr compilatoarele, sistemele de operare sau editoarele de text.
Sistemul de operare coordoneaz toate resursele calculatorului. El poate rula
compilatorul, poate rula programe obiect, poate executa comenzi de sistem
Editorul este un program interactiv folosit pentru crearea i modificarea
programelor surs sau a datelor.

1.4

Tehnici de rezolvare a problemelor

Adesea n viaa de zi cu zi suntem pui n situaia de a urma algoritmi. n faza


de rezolvare a unei probleme de programare va trebui s proiectm algoritmi. Este
important s ne punem ct mai multe ntrebri pn cnd nelegem exact ce avem
de fcut.
Folosirea soluiilor existente ntotdeauna trebuie s evitm s reinventm
roata. Dac exist o soluie, atunci s o folosim. Dac am rezolvat o problem
similar nainte, trebuie doar s repetm soluia pentru c n programare exist
probleme care apar foarte des (ex. calculul unui minim sau al unui maxim). Dac
avem la dispoziie o secven de cod care rezolv o parte a problemei noastre,
putem s o folosim. Aceast metod se numete software reuse i este elementul
central n programarea orientat pe obiecte.
Divide et impera Adeseori este mult mai uor s rezolvm o problem dac o
mprim n subprobleme mai mici. De altfel, metoda descompunerii unui program n
funcii sau tehnica programrii orientate pe obiecte se bazeaz pe acest principiu.
Dificultatea de a ncepe Programatorii se confrunt adesea cu o mare
dificultate: se gsesc n faa unei foi albe i nu tiu cum s nceap. Privesc
8

Programarea calculatoarelor i limbaje de programare I

problema i li se pare foarte complicat. Pentru a depi acest moment, rescriei


problema cu propriile voastre cuvinte. ncercai s o descompunei n subprobleme
individuale n loc s o analizai global. Acest lucru v va ajuta s extragei
componente mai uor de rezolvat. De asemenea, acest lucru v va ajuta s
sintetizai mai uor algoritmul de rezolvare a problemei.

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