Sunteți pe pagina 1din 9

Curs 1 : Introducere in programarea calculatoarelor

1

C CU UR RS S1 1. .
I IN NT TR RO OD DU UC CE ER RE E N N A AL LG GO OR RI IT TM MI I

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
2
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:
Curs 1 : Introducere in programarea calculatoarelor
3
-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:
Curs 1 : Introducere in programarea calculatoarelor
4
-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.
Curs 1 : Introducere in programarea calculatoarelor
5

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 Al doilea factor Suma

521 46 0 - suma este 0 deoarece 46 este par
1042 23 0+1042
- adunam primul factor deoarece al doilea
factor este impar
2084 11 1042+2084
- adunam primul factor deoarece al doilea
factor este impar
4168 5 3126+4168
- adunam primul factor deoarece al doilea
factor este impar
8336 2 7294
- suma ramine neschimbata deoarece al
doilea factor este par
16672 1 7294+16672
- adunam primul factor deoarece al doilea
factor este impar
Curs 1 : Introducere in programarea calculatoarelor
6

function inmultirealarusse(a, b)
x[1] a; y[1] b
i 1
ct timp x[i] > 1 execut
x[i+1] x[i] div 2 {div reprezint mprirea ntreag}
y[i+1] y[i]+y[i]
i i + 1
sf-ct timp
prod 0; i i - 1
ct timp i > 0 execut
dac x[i] este impar atunci prod prod + y[i]
i i - 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
7
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.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

1
1
Curs 1 : Introducere in programarea calculatoarelor
8




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
9

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

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