Вы находитесь на странице: 1из 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.

Вам также может понравиться