Sunteți pe pagina 1din 21

Introducere n Informatic

Capitolul 5. Algoritmii i descrierea lor


5.1. Algoritmi Orice problem logic-uman se rezolv conform unui algoritm de rezolvare. Algoritmul este un complex de reguli mpreun cu ordinea lor de succedare n vederea rezolvrii unei probleme. Regulile sunt de urmtoarele tipuri: -reguli de intrare; -reguli de calcul; -reguli condiionale; -reguli de ieire. n funcie de tipurile de reguli pe care le conin algoritmii pot fi: algoritmi liniari, care conin numai reguli de intrare, de calcul i de ieire; algoritmi ramificai, care conin cel puin o regul condiional; algoritmi ciclici, n care o secven de reguli se repet de un numr finit de ori. Orice algoritm are urmtoarele proprieti: generalitate, finitudine i realizabilitate. Generalitatea rezult din faptul c algoritmul nu trebuie s depind de setul de date utilizat la testarea lui. Finitudinea impune existena unui numr finit de reguli care s compun respectivul algoritm. Realizabiliratea presupune c fiecare regul care compune algoritmul s fie realizabil i n acelai timp algoritmul n totalitatea lui s fie realizabil. 5.2. Descrierea algoritmilor Orice algoritm poate fi descris grafic cu ajutorul schemelor logice sau text cu ajutorul limbajului pseudocod. Vom prezenta mpreun cele dou moduri de descriere, iar pentru fixarea cunotinelor vom prezenta nite propuneri de probleme mpreun cu soluiile lor. Pentru reprezentarea regulilor care compun un algoritm, n schemele logice, se folosesc urmtoarele simboluri: 1) Bloc de intrare/ieire pentru reprezentarea regulilor de intrare i/sau ieire.
Citete S a,b sau a,b S

47

Introducere n Informatic

Iar dac dorim s tiprim anumite date folosim:


Scrie S a,b sau Afieaza S a,b

2) Bloc de calcul sau blocul de execuie se utilizeaz pentru reprezentarea regulilor de calcul:
S

unde, S poate reprezenta o regul de calcul sau o secven liniar de reguli de calcul. n acest ultim caz se poate folosi simbolul:
S1 ..... . Sn

3) Bloc de decizie care reprezint grafic o regul condiional i are forma:


DA C NU

4) Bloc pentru nceputul i sfritul care nu reprezint nici o regul, dar sunt absolut obligatorii pentru a marca nceputul i sfritul unui algoritm. Un astfel de bloc se reprezint grafic prin:
START STOP

5) Pentru reprezentarea grafic a succesiunii regulilor se folosesc simboluri sgeat:

iar pentru eventualele trimiteri se pot folosi simbolurile:

48

Introducere n Informatic

DA

NU

sau n anumite scheme logice cu un grad nalt de complexitate, n care nu dorim s se ntretaie sgeile deoarece micoreaz lizibilitatea schemei se mai folosesc conectorii:

n interiorul crora se pune un numr sau o liter de identificare a nodului de conectare. Acest lucru permite trimiteri ndeprtate, chiar de pe o pagin pe alta. 6) Blocul de procedur poate reprezenta grafic un sub-algoritm:
S

Orice algoritm se poate reprezenta printr-una din reprezentrile grafice:


START Sau altfel dispus in schema

START

Procedura sau Secven

STOP

Secven

STOP

n algoritmii structurai se folosesc cteva tipuri de structuri fundamentale i cteva tolerate: a) Structura secvenial sau structura liniar:
S1
.. . .

Sn

b)

Structura alternativ:
DA C NU S2 S1 sau DA NU C S

49

Introducere n Informatic

c)

Structura repetitiv:
S p sau S

DA p NU

5.3. Limbajul pseudocod Este un limbaj pentru descrierea algoritmilor i o paralel ntre structurile artate anterior i pseudocod sunt prezentate n tabelul alturat. Structuri fundamentale (a) Structura secvenial
S1 S2

Instruciuni cu cuvinte rezervate n limba romn execut S1 execut S2 sau: S1 S2 sau: S1 ; S2 dac C atunci S1 altfel S2 sfrit-dac dac C atunci S sfrit-dac

Instruciuni cu cuvinte rezervate n limba englez

do S1 do S2

(b) Structuri alternative


DA C NU

S1

S2

if C then S1 else S2 endif if C then S endif while C S repeat do S until C

DA C NU

(c)Structuri repetitive
S
DA C NU

ct timp C execut S sfrit-ct timp execut S pn cnd C

DA

NU

50

Introducere n Informatic

Pe lng aceste structuri mai sunt tolerate i structurile particulare din tabelul alturat1.
Structuri particulare
START

Instruciuni cu cuvinte rezervate n limba romn

Instruciuni cu cuvinte rezervate n limba englez

algoritmul nume este: citete a1,a2,...,an

procedure nume read a1,a2,...,an

Citete S a1 ,a2 ,...a n

var: = v

S var: = var+p var < v DA


f

pentru var=vi,vf,p execut sfrit-pentru scrie x1,x2,...,xn

for var=vi to vf S step p S end-for sau next

NU

Scrie S x ,x ,...x
1 2

Afiaz S x1,x2,...x n

print x1,x2,...,xn afiare x1,x2,...,xn


i

S1

S2

...

Sn

selecteaz i dintre 1: secvena S1 2: secvena S2 ... n: secvena Sn sfrit-selecteaz stop

do case i case 1: secv. S1 case 2: secv. S2 ... case n: secv. Sn end case stop sau end

STOP

Alte cteva structuri utilizate n algoritmii ciclici sunt:

1Sursa acestor tabele se gsete n lucrarea Descrierea algoritmilor. Teorie i


aplicaii de Gr. Moldovan i R. Jolde, Universitatea 1 Decembrie 1918" Alba Iulia, 1996.

51

Introducere n Informatic

Alte structuri particulare

Instruciuni cu cuvinte rezervate n limba romn

Instruciuni cu cuvinte rezervate n limba englez

DA

C(x)

NU

S(x)

a)
S(x)

ct timp (C(x)) S(x) sfrit-ct-timp

while (C(x)) S(x) end-while

C(x) NU

DA

execut S(x) pn cnd (C(x)) b)

do S(x) until (C(x))

Dar cel mai bine se neleg lucrurile dac se dau ct mai multe exemple. Aa c ne vom propune un numr de exemple i vom prezenta i soluiile. 5.4. Probleme propuse i rezolvate Problema P.1. Se dau numerele reale x 1, x2, ... , xn. S se fac schema logic pentru calculul produsului :

P = xi
i =1

Descriei algoritmul i n pseudocod. Soluia R.1. Pentru soluionarea problemei aplicm formula de recuren P:=P.xi. Schema logic este una devenit clasic, schem logic ciclic cu un numr cunoscut de pai. Dup citirea lui n (ntreg), care reprezint numrul de elemente reale cu care se lucreaz, se face citirea componentelor xi, se iniializeaz valoarea variabilei P. Produsul se realizeaz ntr-o structur ciclic, contorizat prin intermediul variabilei de contorizare i. Pentru oprirea procesului de multiplicare se testeaz la fiecare pas dac i < n. n cazul n care i < n, se incrementeaz valoarea contorului cu 1, realizndu-se multiplicarea cu urmtoarea component. Corpul ciclului este reprezentat de P: = P * x i care trebuie interpretat n felul urmtor: noua valoare a lui P este egal cu vechea valoare a lui P multiplicat cu

52

Introducere n Informatic
START

CITETE Xi ; i=1,n i:=1 P:=1

componenta xi. Adic, noua valoare a variabilei P (care conine rezultatul multiplicrilor anterioare) va fi egal cu coninutul vechi al variabilei P multiplicat cu valoarea coninut n xi. Valoarea final a lui P reprezint produsul tuturor componentelor xi (i=1,2,3,...,n), valoare care va fi apoi scris pe echipamentul standard de ieire. n pseudocod algoritmul este urmtorul: _______________________ algoritmul R.1. este: citete n pentru i=1,n,1 execut citete xi sfrit-pentru P:=1 pentru i=1,n,1 execut P:=P.xi sfrit-pentru scrie P stop Schema logic R.1.

P:=P*Xi DA

i<n NU SCRIE P STOP

i:=i+1

_________________________ Este un algoritm ciclic, cu un numr cunoscut (definit) de pai (n pai). Structurile de tip ciclu, att la citirea componentelor x i, ct i de la efectuarea produsului P, sunt reprezentate n pseudocod de secvene pentru ... sfrit-pentru. Problema P.2. Se dau doi vectori : A = (a1, a2, ... , an) i B = (b1, b2, ... , bn). S se ntocmeasc schema logic pentru calculul produsului scalar al celor doi vectori :

PR = ai . bi
i =1

Descriei algoritmul i n pseudocod. Soluia R.2. Algoritmul este foarte asemntor cu cel anterior. Precizm c dei, n schema logic, citirea elementelor ai i bi se simbolizeaz printr-un singur bloc, totui n pseudocod acest lucru este ilustrat printr-un ciclu "pentru" de citiri repetate. La realizarea programului ntr-un

53

Introducere n Informatic

START CITETE ai ;bi ; i=1,n i:=1 PR:=0 PR:=PR+ai*bi DA NU SCRIE PR STOP i:=i+1

i<n

limbaj de programare (de asamblare sau evoluat), programatorul trebuie s in seama de particularitile respectivului limbaj, adaptndu-i cerinele algoritmului la facilitile oferite de limbaj i invers. De aceast observaie am profitat i noi ndat ce am definit setul de instruciuni ale pseudocodului prezentat n aceast lucrare (set care - desigur - este perfectibil). Descrierea n pseudocod respect ntocmai schema logic a algoritmului. Dup citirea ntregului n, care reprezint numrul de elemente ale celor doi vectori, se citete ntr-un ciclu reprezentat de structura pentru ...) valorile componentelor celor doi vectori, dup care se iniializeaz variabila PR (care va conine rezultatele intermediare ale produsului scalar) cu valoarea 0. Tot printr-un ciclu se calculeaz produsul scalar, iar valoarea final a acestuia se afieaz la echipamentul standard de ieire

Schema logic R.2. _________________________ algoritmul R.2. este: citete n pentru i=1,n,1 execut citete ai,bi sfrit-pentru PR:=0 pentru i=1,n,1 execut PR:=PR+ai*bi sfrit-pentru scrie PR stop _________________________ i acesta este un algoritm ciclic, cu un numr definit de pai de calcul (n pai). Problema P.3. Se d matricea A cu dimensiunile mxn. S se ntocmeasc schema logic pentru calculul sumei tuturor elementelor care compun matricea. Descriei algoritmul i n pseudocod. Soluia R.3. Suma tuturor elementelor unei matrice este dat de o dubl sumare dup formula:

54

Introducere n Informatic

S = aij
i =1 j=1

n cazul n care se efectueaz mai nti suma pe coloane i apoi pe linii, sau dup formula:

S = aij
j=1 i =1

n cazul cnd se efectueaz mai nti suma pe linii i apoi suma pe coloane. Algoritmul este practic acelai. El constituie un bun exemplu pentru utilizarea corect a ciclurilor imbricate. n pseudocod este de semnalat START utilizarea structurilor pentru bucle imbricate; este de reinut faptul c CITETE printr-o scriere structurat, realizat aij i=1,n prin declararea corespunztoare a j=1,m coloanelor de nceput a liniilor de instruciuni, se poate realiza o S:=0 imagine sintetic (global) a tuturor entitilor de descriere.
i:=1 j:=1

S:=S+aij

j<m NU i:=i+1 DA i<n NU SCRIE S STOP

DA

j:=j+1

_________________________ algoritmul R.3. este: citete n,m

55

Introducere n Informatic

pentru i=1,n,1 execut pentru j=1,m,1 execut citete aij sfrit-pentru sfrit-pentru S:=0 pentru i=1,n,1 execut pentru j=1,m,1 execut S:=S+aij sfrit-pentru sfrit-pentru scrie S stop _________________________

Schema logic R.3.

56

Introducere n Informatic
S TART

CITETE aij i=1,m j=1,n M:=a11 i:=1

Problema P.4. S se ntocmeasc schema logic pentru aflarea elementului maxim : M = max { aij } unde : i = 1, 2, ... ,m ; j = 1, 2, ... ,n , aij element al unei matrice. Descriei algoritmul i n pseudocod. Soluia R.4. Pentru a afla elementul maxim, dm iniial lui M valoarea a11 i vom compara toate celelalte elemente ale matricei cu aceast valoare. Primul element cu valoare mai mare ca a11, ntlnit la baleierea matricei, va fi reinut ca nou valoare a lui M, procesul de baleiere a elementelor matricei fiind continuat pn la epuizarea acestora, mbuntind mereu pe M n urma comparaiilor efectuate. Dup baleierea tuturor elementelor matricei, n M vom avea valoarea elementului maxim. Este uor de intuit cum se poate afla elementul minim. Dar credem c cea mai inteligent abordare este cea n care se afl simultan i elementul maxim i cel minim. Aici ne vom opri doar la elementul maxim. Considerm ca tem individual aflarea simultan a maximului i minimului.

j:=1

M<aij DA M=aij

NU

j<n NU i:=i+1 DA i<m NU S CRIE M

DA

j:=j+1

STOP

Schema logic R.4. _______________________ algoritmul R.4. este: citete n,m pentru i=1,n,1 execut pentru j=1,m,1 execut citete aij sfrit-pentru sfrit-pentru M:=a11

57

Introducere n Informatic

pentru i=1,n,1 execut pentru j=1,m,1 execut dac M<aij atunci M:=aij sfrit-dac sfrit-pentru sfrit-pentru scrie M stop Dup citirea dimensiunilor matricei n i m, se citete ntr-o structur ciclic imbricat, elementele matricei. Se iniializeaz variabila M cu primul element al matricei apoi ntr-o nou structur ciclic imbricat se fac testrile de relaie ntre M i fiecare element al matricei, reinndu-se valoarea elementului maxim. La finele algoritmului se afieaz pe echipamentul standard de ieire valoarea M. START Problema P.5. S se ntocmeasc schema logic pentru calculul i afiarea combinrilor de n obiecte luate cte k , CITETE unde : k = 1, 2, ... ,n. n Descriei algoritmul i n pseudocod.
c:=1 k:=1

c:=c* n-k+1
k

SCRIE k, c DA NU STOP

k<n

k:=k+1

Soluia R.5. Pentru ntocmirea schemei logice se ine seama de existena urmtoarei formule de recuren: n k +1 k k 1 Cn = k . Cn unde: k=1, 2, ... , n. n cadrul algoritmului se pleac de la valoarea iniial: Cn0=1. Algoritmul este de tip ciclic cu un numr cunoscut de pai. Dup citirea valorii lui n (care reprezint numrul maxim al elementelor combinrii), se iniializeaz valoarea lui c cu 1. ntr-o bucl, care realizeaz parcurgerea valorilor i de la 1 la n cu un pas de 1, se efectueaz calculul combinrilor, care sunt imediat afiate pe echipamentul standard de ieire. Schema logic R.5.

58

Introducere n Informatic
START

CITETE x, N

T(1):=x

sin x:=x

i:=3

Pentru a putea fi uor identificate rezultatele intermediare, se afieaz valorile k, n i c. _________________ ________ algoritmul R.5. este: citete n c:=1 pentru k=1,n,1 execut c:=c(n-k+1):k scrie k,n,c sfrit-pentru stop _________________________ Problema P.6. Se dau numerele x (real) i N (ntreg). S se ntocmeasc schema logic pentru calculul lui :

T(i):=T(i-2) *

(-1)*x 2 (i-1)*i

sin x :=sin x+T(i)

i<2*N NU SCRIE x,N,sin x

DA

i:=i+2

STOP

sin x = x x + x x + x 3! 5! 7!

9!

... unde : N este numrul de termeni

luai n calcul, pentru aproximarea valorii sinusului. Descriei algoritmul i n pseudocod. Soluia R.6. n realizarea schemei logice se pornete de la T(1):=x, i:=3 i se folosete un pas de incrementare 2. Vom ine seama de faptul c avem n acest caz valabil urmtoarea formul de recuren:

59

Introducere n Informatic

T( i ) = ( 1 )

i( i 1 )

T( i 2 )

Schema logic R.6. i vom face incrementarea valoarea lui i pn se ajunge la valoarea 2N, asigurnd n acest fel nsumarea primilor N termeni ai seriei care aproximeaz valoarea lui sin x. Descrierea algoritmului n pseudocod este dat de urmtoarea secven: _________________________ algoritmul R.6. este: citete x,N T(1):=x START sinx:=x pentru i=3,2N,2 execut T(i):=(-1).T(i-2).x2:[(i-1).i] CITETE: m,n,p sinx:=sinx+T(i) a ij cu: i=1,m i j=1,n sfrit-pentru b ij cu: i=1,n i j=1,p scrie x,N,sinx stop i:=1 _____________________
j:=1

c ij :=0 k:=1

c ij :=c ij +a ik*b kj

Dup iniializrile necesare se execut, cu un pas de 2, corpul ciclului care realizeaz calculul tuturor termenilor dai de formula de recuren anterioar, precum i nsumarea acestor termeni, n scopul obinerii valorii sinusului. Dup ieirea din ciclu, se afieaz valorile x, N i sin x.
DA

k<n NU j<p NU i:=i+1 DA i<m NU SCRIE c ij ; i=1,m ; j=1,p

k:=k+1

DA

j:=j+1

Problema P.7. Se dau matricele A = ( aij ) de tipul mxn i B = ( bij ) de tipul nxp. S se ntocmeasc schema logic pentru calculul produsului celor dou matrice C = A x B. Descriei algoritmul i n pseudocod. Soluia R.7. Dac matricea A= aij este de tipul mxn i matricea B= bij este de tipul

60

STOP

Introducere n Informatic

nxp, atunci matricea C=cij va fi de tipul mxp, iar elementele matricii C se obin conform formulei:

ij

= a ik .bkj
k =1

Schema logic R.7. unde: i=1, 2, ..., m i j=1, 2, ..., p. _________________________ algoritmul R.7. este: citete n,m,p pentru i=1,m,1 execut pentru j=1,n,1 execut citete aij sfrit-pentru sfrit-pentru pentru i=1,n,1 execut pentru j=1,p,1 execut citete bij sfrit-pentru sfrit-pentru pentru i=1,n,1 execut pentru j=1,p,1 execut cij:=0 pentru k=1,n,1 execut cij:=cij+aik.bkj sfrit-pentru sfrit-pentru sfrit-pentru pentru i=1,m,1 execut pentru j=1,p,1 execut scrie cij sfrit-pentru sfrit-pentru stop _________________________ La nceputul algoritmului se citesc dimensiunile celor dou matrice reprezentate de valorile n, m i p. Pentru realizarea citirii elementelor a ij i bij sunt prevzute dou bucle de citire care fiecare au o structur imbricat i care dau posibilitatea citirii matricelor pe linii i n cadrul fiecrei linii pe coloane.

61

Introducere n Informatic

O structur de tip imbricat pe trei nivele asigur calculul fiecrui element al matricei produs. Apoi se afieaz elementele matricei rezultate din calcul, tot ntr-o structur ciclic. Problema P.8. Se d x (real) i N (ntreg). S se ntocmeasc schema logic pentru calculul lui :

cosx = 1 x + x x + x 2! 4! 6!

8!

...

unde : N este numrul de termeni luai n calcul. Descriei algoritmul i n pseudocod.

62

Introducere n Informatic

START CITETE x,N T(0):=1


COSx:=1

Soluia R.8. Pentru calculul termenului T(i) al seriei care aproximeaz funcia cos x, aplicm formula de recuren:

T( i ) = ( 1 )

i( i 1 )

T( i 2 )

i:=2

T(i):=T(i-2)* (-1)*x i(i-1)


COSx:=COSx+T(i)

Vom pleca de la valorile iniiale T(0):=1, cosx:=1 i i:=2, iar n calcul vom folosi un pas de incrementare avnd valoarea 2. _________________________ algoritmul R.8. este: citete x,N T(0):=1 cosx:=1 pentru i=2,2N,2 execut T(i):=(-1).T(i-2).x2:[i.(i-1)] cosx:=cosx+T(i) sfrit-pentru scrie x,N,cosx stop _________________________

Acest algoritm este de tip ciclic cu un numr cunoscut de pai (N). La i:=i+2 i<2*N nceputul algoritmului se citesc valorile x i N. Dup iniializrile NU necesare se execut, cu un pas de incrementare egal cu 2, corpul ciclului x,N,COSx care realizeaz calculul tuturor SCRIE termenilor dai de formula de recuren anterioar, precum i nsumarea acestor termeni, n scopul STOP Schema logic R.8. obinerii valorii cosinusului. Dup ieirea din ciclu, se afieaz valorile x, N i cosx. Problema P.9. S se ntocmeasc schema logic pentru ordonarea descresctoare a irului de numere a1, a2, ... , an. Descriei algoritmul i n pseudocod.

DA

63

Introducere n Informatic
START

CITETE n, a i ; i=1,n

i:=1 j:=i+1

DA

a i>a j NU T:=ai a i:=a j

a j:=T DA NU i:=i+1 DA i<n NU SCRIE a i; i=1,n

j<n

j:=j+1

STOP

Soluia R.9. n cadrul algoritmului procedm n felul urmtor: -mutm n prima poziie (deci n a1) pe elementul cu cea mai mare valoare dintre elementele a1, a2, ..., an; -mutm n poziia a doua (deci n a2) pe elementul cu cea mai mare valoare dintre elementele a2, a3, ..., an; .a.m.d. Ca o particularitate a acestei scheme logice se remarc schimbul lui ai cu aj utilizndu-se variabila intermediar T. Aceast a lui a coninutului celor dou locaii de memorie se mai numete i "schimbare n triunghi". De reinut ns c exist limbaje de programare care au instruciuni specializate pentru efectuarea aceste schimbri folosind n locul variabilei intermediare T, unul din registrele interne ale calculatorului. _________________________ algoritmul R.9. este: citete n

pentru i=1,n,1 execut citete ai sfrit-pentru pentru i=1,n,1 execut pentru j=i+1,n,1 execut dac aiaj

64

Introducere n Informatic
START

CITETE

atunci T:=ai Schema logic R.9. ai:=aj aj:=T sfrit-dac sfrit-pentru sfrit-pentru pentru execut scrie ai sfrit-pentru stop _________________________ Problema P.10. Cunoscnd x (real) i N (ntreg), s se conceap schema logic pentru calculul :

x,N

T(1):=x

ARCTGx:=x

i=1,n,1

i:=3

T(i):=T(i-2)*(-1)*

x2(i-2) i

ARCTGx:=ARCTGx+T(i)

i<2*N NU SCRIE
x,N,ARCTGx

DA

i:=i+2

arctg x = x x + x x + x 3 5 7 9

...

unde : N este numrul de termeni luai n calcul. Descriei algoritmul i n pseudocod. Soluia R.10. Formula de recuren pentru calculul termenului general este:

STOP

(i 2) T( i ) = ( 1 ) x T( i 2 ) i

n algoritm vom pleca de la valorile iniiale T(1):=x, i:=3 i ARCTGx:=x, folosind pasul de incrementare de valoare 2. _________________________ algoritmul R.10. este: citete x,N T(1):=x ARCTGx:=x pentru i=3,2N,2 execut T(i):=(-1).T(i-2).x2.(i-2):i Schema logic R.10. ARCTGx:=ARCTGx+T(i) sfrit-pentru scrie x,N,ARCTGx stop _________________________

65

Introducere n Informatic

i acest algoritm este de tip ciclic cu un numr cunoscut de pai (N). La nceputul algoritmului se citesc valorile x i N. Dup iniializrile necesare se execut, cu un pas de incrementare egal cu 2, corpul ciclului care realizeaz calculul tuturor termenilor dai de formula de recuren anterioar, precum i nsumarea acestor termeni, n scopul obinerii valorii arctangentei. Dup ieirea din ciclu, se afieaz valorile x,N i ARCTGx.

66

Introducere n Informatic

67