Sunteți pe pagina 1din 9

Curs 1 : Introducere in programarea calculatoarelor

CURS1. INTRODUCERE N ALGORITMI


1.1. Noiunea de algoritm; caracteristici

Algoritm: un instrument de rezolvare a problemelor. O problem se consider a fi constituit din date de intrare i un enun care specific relaia existent ntre datele de intrare i soluia problemei. n cadrul algoritmului sunt descrise prelucrrile necesare pentru a obine soluia problemei pornind de la datele de intrare. Un algoritm este o succesiune bine precizat de prelucrri care aplicate asupra datelor de intrare ale unei probleme permit obinerea n timp a soluiei acesteia. Exemple: - rezolvarea ecuaiei de gradul doi, - ciurul lui Eratostene (pentru generarea numerelor prime mai mici dect o anumita valoare), - schema lui Horner (pentru determinarea ctului i restului mpririi unui polinom la un binom) etc. Soluia problemei se obtine prin execuia algoritmului. Algoritmul poate fi executat pe o main formal (n faza de proiectare i analiz) sau pe o main fizic (calculator) dup ce a fost implementat ntr-un limbaj de programare. Spre deosebire de un program, care depinde de un limbaj de programare, un algoritm este o entitate matematic care este independent de maina pe care va fi executat. Exemplu: Algoritmul de aflare a sumei dintre dou numere Pas 0 : START Pas 1 : Citim numerele a,b Pas 2 : S : = a + b Pas 3 : Afisam rezultatul : S Pas 4 : STOP

DATE DE INTRARE

ALGORITM

DATE DE IESIRE

Soluia unei probleme, din punct de vedere informatic, este dat printr-o mulime de comenzi (instruciuni) explicite i neambigue, exprimate intr-un limbaj de programare. Aceast mulime de instruciuni prezentat conform anumitor reguli sintactice formeaz un program. Un program poate fi privit i ca un algoritm exprimat intr-un limbaj de programare.

Curs 1 : Introducere in programarea calculatoarelor Algoritmul descrie soluia problemei independent de limbajul de programare n care este redactat programul. Un algoritm este compus dintr-o mulime finit de pai, fiecare necesitnd una sau mai multe operaii. Un algoritm nu opereaz numai cu numere. Pe lng algoritmii numerici exist i algoritmi algebrici i algoritmi logici. Sintetic, un algoritm i un program pot fi definii astfel : Program = exprimarea ntr-un limbaj de programare a unui algoritm Algoritm = exprimarea ntr-un limbaj de reprezentare a unui raionament Un program este o descriere precis i concis a unui algoritm ntr-un limbaj de programare. De aceea, noiunile de algoritm i program se folosesc uneori greit ca sinonime. Un program nu trebuie s satisfac condiia de finititudine precum un algoritm. Exemplu : un sistem de operare care se oprete doar la nchiderea calculatorului. Algoritmizarea este o cerin fundamental n rezolvarea oricrei probleme cu ajutorul calculatorului. Experiena a demonstrat c nu orice problem poate fi rezolvat prin algoritmizarea rezolvrii, adic prin descrierea unui algoritm de rezolvare. Problemele se pot mpri n 2 clase: clasa problemelor decidabile (o problem este decidabil dac exist un algoritm pentru rezolvarea ei) clasa problemelor nedecidabile (o problem este nedecidabil dac nu exist un algoritm pentru rezolvarea ei). Exist probleme care au aprut ulterior apariiei calculatoarelor. Astfel a aprut problema celor 4 culori conform creia orice hart poate fi colorat folosind patru culori, astfel nct oricare dou ri cu frontiere comune s fie colorate diferit. Enunarea problemei a fost fcut n anul 1852; problema a fost rezolvat n anul 1977 doar prin utilizarea calculatorului i prin utilizarea unei metode noi (metoda Backtracking). Exist algoritmi cu caracter general, pentru clase largi de probleme i algoritmi specifici unor probleme particulare. Principalele categorii de algoritmi cu caracter general sunt: algoritmi de mprire n subprobleme (Divide et Impera), algoritmi de cutare cu revenire (Backtracking), algoritmi de optim local (Greedy), algoritmi de programare dinamic etc. Rezolvarea unei probleme dintr-un anumit domeniu reprezint o activitate ce presupune existena unor procese: -proces demonstrativ (demonstraia) care s arate existena unei soluii sau a mai multor soluii i s determine efectiv soluiile exacte; -proces computaional (algoritmul) care s codifice un proces demonstrativ, o metod sau o tehnic de rezolvare n scopul determinrii aproximative a soluiilor exacte. Principalele caracteristici ale unui algoritm sunt: 2

Curs 1 : Introducere in programarea calculatoarelor -generalitatea algoritmul trebuie s fie ct mai general astfel ca s rezolve o clas ct mai larg de probleme i nu o problem particular sau punctual. El trebuie s poat fi aplicat oricrui set de date iniiale ale problemei pentru care a fost ntocmit. Exemplu : algoritmul de rezolvare a ecuaiei de gradul II ax 2+bx+c=0 trebuie s rezolve toate cazurile pentru o mulime infinit de date de intrare (a, b i c aparinnd numerelor reale). -claritatea aciunile algoritmului trebuie s fie clare, simple i riguros specificate. Un algoritm trebuie s descrie cu precizie ordinea operaiilor care se vor efectua. Fiecare programator trebuie s respecte anumite reguli de editare a programelor. Literatura de specialitate prevede mai multe reguli de indentare a unui program: o instruciunile unei secvene se vor scrie aliniate, ncepnd de la aceeai coloan; o instruciunile unei instruciuni compuse se vor scrie ncepnd toate din aceeai coloan, aflat cu 2-4 caractere la dreapta fa de nceputul instruciunii compuse; o pe o linie pot fi scrise mai multe instruciuni, cu condiia ca ele s aib ceva comun. Astfel, pentru a obine un program mai compact, 2 pn la 4 instruciuni scurte de atribuire pot fi scrise pe acelai rnd. o denumirile variabilelor s fie astfel alese nct s reflecte semnificaia acestor variabile. o programul trebuie amplu comentat, prin inserarea comentariilor n text. Se consider c nu trebuie s existe reguli stricte de editare a unui program. n schimb, fiecare programator trebuie s aib propriile lui reguli de scriere, care s fie unitare pe tot parcursul programului i care s ofere claritate programului. -finitudinea un algoritm trebuie s admit o descriere finit i s conduc la soluia problemei dup un numr finit de operaii. -corectitudinea un algoritm trebuie s poat fi aplicat i s produc un rezultat corect pentru orice set de date de intrare valide. Corectitudinea este de 2 tipuri: corectitudine total (faptul c pentru orice date de intrare algoritmul determin valori corecte de ieire) parial (finititudinea algoritmului pentru orice set de date de intrare). Verificarea corectitudinii unui algoritm se poate face folosind: - varianta experimental prin testarea algoritmului - varianta analitic se bazeaz pe demonstrarea funcionrii corecte a algoritmului pentru orice date de intrare, garantnd astfel corectitudinea. - performana algoritmul trebuie s fie eficient privind resursele utilizate i anume s utilizeze memorie minim i s se termine ntr-un timp minim. - robusteea reprezint abilitatea algoritmului de a recunoate situaiile n care problema ce se rezolv nu are sens i de a se comporta n consecin (de exemplu, prin mesaje de eroare corespunztoare). Un algoritm robust nu trebuie s fie afectat de datele de intrare eronate. -extensibilitatea - posibilitatea adaptrii programului la unele schimbri n specificaiile problemei. -reutilizabilitatea -este posibilitatea reutilizrii ntregului program sau a unor pri din el n alte aplicaii. -compatibilitatea -presupune uurina de combinare cu alte produse program. -portabilitate -este posibilitatea de folosire a produsului program pe alte sisteme de calcul, diferite de cel pe care a fost conceput. -eficiena -reprezint msura n care sunt folosite eficient resursele sistemului de calcul. Un algoritm este caracterizat de urmtoarele aspecte: 3

Curs 1 : Introducere in programarea calculatoarelor -elaborare reprezint construirea unui proces computaional care va constitui raionamentul de rezolvare al problemei. Actul de creare a unui algoritm este o art care nu va putea fi niciodat pe deplin automatizat. -reprezentare exprimarea formalizat ntr-un limbaj de reprezentare a algoritmului -execuie -analiza algoritmului - Pentru a putea decide care dintre algoritmii care rezolv aceeai problem este mai bun, va trebui s definim un criteriu de apreciere a valorii unui algoritm. Se pot avea n vedere 2 factori n scopul msurrii performanelor unui algoritm: -complexitatea timp -are n vedere timpul de execuie al algoritmului pentru diverse seturi de date -complexitatea spaiu -se refer la spaiul de memorie utilizat Analiza mai presupune utilizarea unor tehnici de demonstrare specifice matematicii. -testarea programului conine dou faze: depanare (debugging) i trasare (profiling). Depanarea este procesul rulrii unui program pe diverse seturi de date de test i corectarea eventualelor erori depistate. Trasarea este procesul de rulare pas cu pas a execuiei unui program, pe diverse seturi de date de test, pentru a urmri evoluia valorii unor variabile i a putea depista astfel eventuale erori logice ale programului. Structura unui algoritm este constituit din urmtoarele elemente de baz: - Date - variabile i tipuri de date utilizate pentru accesul la memorie i generarea de valori conform calculelor implementate n procesul de calcul prin intermediul instruciunilor; - Expresii - este alctuit din unul sau mai muli operanzi, legai ntre ei prin operatori. Operanzii pot fi constante sau variabile ; - Instruciuni - instruciuni sau comenzi executabile pentru operaii Input/Output i operaii de prelucrare a datelor din memorie conform procesului de calcul; - Proceduri i funcii - subprocese de calcul cu o structur asemntoare unui algoritm ce pot fi executate prin aa-numitele instruciuni de apelare. Practica dezvoltrii aplicaiilor software arat urmtoarele faze: 1. specificarea problemelor descrierea clar i precis a problemelor indiferent din ce domeniu provin acestea. Se impune deci definirea unui enun precis al problemei. 2. proiectarea soluiilor includerea problemelor n clasa de probleme corespunztoare i alegerea modului de reprezentare a problemelor prin formularea etapelor i procedeelor corespunztoare pentru procesele de rezolvare; 3. implementarea soluiilor elaborarea algoritmilor i codificarea acestora ntr-un limbaj de programare modern. Dup codificare, are loc obinerea formei executabile a programului. 4. analiza soluiilor eficiena soluiilor raportat la resursele utilizate: memorie, timp, utilizarea dispozitivelor I/O, etc.; 5. testarea i depanarea verificarea execuiei programului cu diverse seturi de date de intrare pentru a putea rspunde rezolvrii oricrei probleme pentru care aplicaia a fost elaborat. Aceast etap presupune i adaptarea soluiilor implementate pentru eliminarea erorilor n rezolvarea unei anumite probleme i compatibilitatea cu sistemul de calcul i sistemul de operare folosite. 6. documentarea n majoritatea cazurilor, programele sunt utilizate de alte persoane dect cele care l-au elaborat. Pentru o utilizare corect a lor, este necesar ntocmirea unei documentaii a programului care conine n general descrierea problemei, schema de sistem, schemele logice, programul surs, instruciuni de utilizare. Deseori utilizarea programului este ilustrat figurativ, folosind exemple concrete. 7. exploatarea, actualizarea i ntreinerea exploatarea presupune utilizarea curent a programului n rezolvarea cazurilor concrete din clasa de probleme pentru care a fost proiectat. Actualizarea i ntreinerea au i un aspect corectiv, de a elimina eventualele erori descoperite pe parcursul exploatrii programului. Fazele 1 i 2 formeaz etapa de analiz i proiectare iar fazele 3-7 cea de programare-execuie. 4

Curs 1 : Introducere in programarea calculatoarelor

1.2.

Reprezentarea algoritmilor

Algoritmii pot fi specificai: n limbaj natural Pseudocod Scheme logice Diagrame arborescente Tabele de decizie

1.2.1. Pseudocod
Limbajul pseudocod are o sintax i semantic asemntoare limbajelor de programare moderne, avnd o anumit flexibilitate n ceea ce privete sintaxa, n ideea c prin codificarea unui algoritm ntr-un limbaj de programare, operaia s fie ct mai comod. Semantica pseudocodului este apropiat de limbajele de programare utiliznd ns cuvinte i expresii uzuale din limbajul natural. n dicionarul de informatic pseudocodul este definit ca limbaj utilizat n proiectarea i documentarea programelor obinut prin grefarea unor reguli sintactice pe limbajul natural. Structurile de control sunt reprezentate prin folosirea unor cuvinte cheie (dac atunci altfel execut pn cnd etc) i printr-o anumit aliniere n pagin a liniilor . Limbajul pseudocod are dou tipuri de propoziii : propoziii standard (corespund structurilor de control) i propoziii nestandard (texte ce conin pri ale algoritmului nc incomplet elaborate, nefinisate). Comentariile n pseudocod se includ ntre acolade. Propoziiile standard ncep cu cuvinte cheie i fie se scriu cu litere mari, fie se subliniaz. Exemplu : S se nmuleasc dou numere folosind doar operaii de adunare i nmulire/mprire cu 2. (algoritmul denumit nmulirea a la russe). Primul factor 521 Al doilea factor 46 Suma 0 - suma este 0 deoarece 46 este par - adunam primul factor deoarece al doilea factor este impar - adunam primul factor deoarece al doilea factor este impar - adunam primul factor deoarece al doilea factor este impar - suma ramine neschimbata deoarece al doilea factor este par - adunam primul factor deoarece al doilea factor este impar

1042

23

0+1042

2084

11

1042+2084

4168

3126+4168

8336

7294

16672

7294+16672 5

Curs 1 : Introducere in programarea calculatoarelor function inmultirealarusse(a, b) x[1] a; y[1] b i1 ct timp x[i] > 1 execut x[i+1] x[i] div 2 {div reprezint mprirea ntreag} y[i+1] y[i]+y[i] ii+1 sf-ct timp prod 0; i i - 1 ct timp i > 0 execut dac x[i] este impar atunci prod prod + y[i] ii-1 sf-ct timp return prod

1.2.2. Scheme logice


Prin schem logic se nelege o reprezentare grafic a unui algoritm n care fiecrui pas i se ataeaz un simbol denumit bloc. Ordinea de parcurgere a blocurilor n schemele logice se precizeaz cu ajutorul sgeilor. ntr-o schem logic se utilizeaz urmtoarele tipuri de blocuri:

Blocul de inceput/sfarsit - orice schema logica incepe cu un bloc de inceput si se termina cu blocul de stop

Blocul de citire ( doua variante ) - se citesc de la dispozitivul de intrare valorile variabilelor specificate in lista_variabile ( separate prin virgula )

Blocul de scriere ( doua variante ) - se scriu la dispozitivul de iesire valorile obtinute in urma evaluarii expresiilor din lista( separate prin virgula )

Curs 1 : Introducere in programarea calculatoarelor Blocul de atribuire - se evalueaz expresia, iar valoarea obtinuta este memorata n variabil, vechea valoare pierzndu-se; expresia conine operatori ( + - * / ), operanzi ( variabile, constante ) i ( ); variabila poate apare i n expresie ( ex: x=x+1 ) Blocul de decizie - se evalueaza conditia: daca e adevarata se continua cu prelucrarea indicata de ramura da, altfel cu ramura nu; conditia poate contine operatori relationali: < > <= >= == != operatori logici: si sau Blocul conector are form de cerc. El se folosete pentru a conecta diferite secvene ale unei scheme logice. Sunt utile atunci cnd se continu descrierea algoritmului pe mai multe pagini.

1 1

1.3. Structuri de control


Orice schem logic care are un singur punct de intrare i un singur punct de ieire poate fi reprezentat cu ajutorul a trei structuri de baz: structura secvenial (liniar), structura alternativ, structura repetitiv O schem logic construit numai cu structuri de acest tip este numit schem logic structurat. Un algoritm structurat conine doar cele 3 structuri enumerate mai sus. O schem logic se numete normalizat dac ndeplinete urmtoarele reguli: Are un singur arc de intrare (bloc terminal de nceput) i un singur arc de ieire (bloc terminal de sfrit); Exist un traseu de la intrare ctre orice nod i de la orice nod ctre ieire. Schemele logice normalizate prezint interes prin faptul c pot fi nlocuite n ntregime prin noduri de tip prelucrare. Aceasta i pentru c ntr-o accepiune mai larg nodurile de tip prelucrare pot prezenta un anumit stadiu de analiz a problemei, de prelucrri foarte complexe ce pot fi detaliate ulterior. Uneori o asemenea schem logic se mai numete i schem funcional sau program normalizat. Structura secvenial Reprezint un proces de calcul format dintr-o operaie elementar, cum este citirea unei valori sau o operaie de atribuire, dar poate fi i o combinaie de alte structuri. Structura secvenial indic execuia succesiv a operaiilor de baz i a structurilor de control n ordinea n care apar n schema logic; n general, orice schem logic cuprinde secvenele: citirea datelor iniializarea variabilelor prelucrri tiprirea rezultatelor 7

Curs 1 : Introducere in programarea calculatoarelor

Structura alternativ In funcie de valoarea de adevr a condiiei, se execut una din secvene, dup care se trece la prelucrarea urmtoare; cele dou ramuri se exclud mutual; este posibil ca una din ramuri sa fie vid.

Structura repetitiv cu condiionare anterioar (WHILE-DO) Secvena se execut ciclic, ct timp condiia este adevarat; dac la prima evaluare a condiiei, aceasta este fals, corpul nu se execut niciodat. n cadrul secvenei A este necesar s se modifice valoarea unei variabile care s afecteze valoarea de adevr a expresiei c. n caz contrar, vom ajunge la un ciclu infinit.

Cele 3 structuri prezentate (secvenial, alternativ i repetitiv cu condiionare anterioar) sunt denumite structuri de baz. Orice algoritm poate fi reprezentat folosind cele 3 structuri de baz. n continuare prezentm nc 2 tipuri de structuri, care sunt folosite n practic, dar care au la baz i deci pot fi nlocuite de structurile de baz.

Curs 1 : Introducere in programarea calculatoarelor Structura repetitiv cu condiionare posterioar (DO-UNTIL) Condiia se evalueaz dupa o prim execuie a secvenei (deci secvena se execut cel puin o dat); se revine la execuia secventei, dac nu este adevrat. Dac condiia este adevrat se ncheie aceast secven.

Structura repetitiv cu un numr cunoscut de pai (DO-FOR) O variabil numit generic contor, controleaz ciclarea; contorul se iniializeaz cu o valoare iniial (val vi), iar ciclarea se realizeaz cat timp contor<=vf, o valoare final. La sfritul corpului ciclului, variabila contor este actualizat, fiind mrit; pentru a nu se cicla la infinit, trebuie ca pasul de mrire ( vr) s fie pozitiv. Structura se poate folosi i cu o valoare final mai mic dect cea iniial, caz n care avem pasul negativ. Aceast structur este o particularizare a structurii WHILE-DO.

Bibliografie 1. Negrescu Liviu, Limbajul C, ed. Agora 1997 2. Logoftu Doina, Bazele programrii n C, Ed. Polirom 2006 3. Cerchez Emanuela i erban Marinel, Programarea n limbajul C/C++, Ed. Polirom 2005 4. Bologa Cristian., Algoritmi, ed. Risoprint