Sunteți pe pagina 1din 41

Descrierea algoritmilor

Algoritm
Descrierea algoritmilor
Se numete algoritm, o mulime de reguli de calcul, folosite ntr-o anumit succesiune, cu ajutorul
crora putem obine soluia unei probleme prin execuia unui numr finit de operaii. Algoritmul
trebuie s cuprind studiul tuturor situaiilor posibile, nelsnd nimic la voia ntmplrii. Pe lng
claritate, un algoritm trebuie s aib proprietatea de universalitate, adic s fie valabil (aplicabil)
unei clase de probleme, indiferent de valoarea datelor de intrare i ieire. De asemenea, trebuie s fie
eficace, adic s condu-c la rezultat ntr-un timp convenabil i cu o precizie suficient de bun.
Un algoritm este format din mai muli pai ce se execut n ordine secven-ial, atta timp
ct nu intervine o condiie de salt, care s comande execuia altui pas dect cel urmtor n secven.
Exemplu: Se consider un polinom p(x) = a0xn+a1xn-1+....+an i o
valoare x0. Se cere s se calculeze valoarea s = p(x0).
Algoritmul propus se bazeaz pe schema lui Horner:
P(x) = (((...(a0x+a1)*x+...+an-1)x+an
i implic urmtorii pai:
pasul 1: Se iniializeaz variabila s a0 (atribuie lui s valoarea a0);
pasul 2: Se iniializeaz i la valoarea zero, adic i 0
pasul 3: Se atribuie lui i valoarea avut anterior plus unu, adic i i+1;
pasul 4: Dac i > n atunci treci la pasul 7, altfel continu execuia n
secven (pasul urmtor);
pasul 5: Se atribuie s s*x + ai;
pasul 6: Treci la pasul 3;
pasul 7: Scrie valoarea s;
pasul 8: Stop.
n cadrul algoritmului propus, ordinea de efectuare a operaiilor este clar
preci-zat, fiind analizate toate situaiile posibile.
Cerina de universalitate a algoritmului este de asemenea ndeplinit,
deoarece algoritmul este valabil pentru polinoame de orice grad, iar cerina de
eficien este i ea ndeplinit deoarece timpul necesar efecturii tuturor operaiilor
este finit, relativ mic.
Se observ c, dac am fi calculat valoarea polinomului conform
definiiei, adic dac s-ar fi efec-tuat mai nti nmulirile i apoi adunrile, (fiind
necesare n*(n+1)/2 nmuliri), timpul de lucru ar fi fost mult mai mare.
2.1.2. Scheme logice
Pentru reprezentarea algoritmilor pe parcursul elaborrii lor, se pot folo-si
ca instrumente de descriere schemele logice i limbajele pseudo-cod; ambele
evideniaz cu claritate fluxul controlului algoritmului. Schemele logice folosesc
forme geometrice ce simbolizeaz tipuri de aciuni legate prin sgei. Ele i
dovedesc utilitatea n abordarea de sus n jos ("top down") a algoritmilor mari,
asigurnd o detaliere progresiv i o documentare mai bun. Principalele
simboluri utilizate n realiza-rea schemelor logice sunt:
Denumirea Forma geometrica Utilitate Nr.
Sageata 1.
2.
3.
Bloc
delimitator
Delimiteaza o
schema logica
Asigura legatura
intre blocuri
Bloc
intrare/iesire
4.
Bloc
de calcul
Specifica o
operatie de i/e
Specifica operatii
de atribuire,
de calcul
Specifica
operatii de decizie
5.
6.
7.
8.
Bloc
de decizie
Bloc
de procedura
Conector
in pagina
Conector
intre pagini
Specifica
inceputul, apelul
unei proceduri
Asigura trimiteri
in cadrul
pagini aceleiasi
Asigura trimiteri
intre pagini
Exemplu: Calculul valorii p = n!.
Algoritmul de calcul implic urmtoarele operaii: se citete valoarea lui n;
se iniializeaz variabila p la 1 (1 este element neutru pentru nmulire), variabil
ce n final va conine valoarea factorialului; se iniializeaz variabila i la 1 pentru a
genera toate numerele naturale cuprinse ntre 1 si n; pentru i cuprins ntre 1 i n
se atribuie variabilei p valoarea p*i; n final se afieaz valoarea lui p. Pe pai
algoritmul arat astfel:
Pasul 1.Citete valoarea lui n
Pasul 2.Atribuie lui p valoarea 1
Pasul 3.Dac n=0 atunci treci la pasul 8
Pasul 4.Atribuie i 1; indice de ciclare
Pasul 5.Atribuie p p*i
Pasul 6.Atribuie i i+1
Pasul 7.Dac i <= n treci la pasul 5
Pasul 8.Scrie valoarea lui p
Pasul 9.Stop
Schema logic corespunztoare a acestui algoritm este:
start
citeste n
p = 1
n = 1
i = 1
p = p* i
i = i + 1
scrie p
stop
i <= n
da
da
nu
nu
Limbajul pseudocod
Limbajul pseudocod folosete cuvinte cheie cu semnificaie prestabilit i
reguli de aliniere a textului. Pseudocodul permite descrierea algoritmului prin dou
tipuri de enunuri: standard i nestandard. Enunurile nestandard specific prin
fraze n limbaj natural operaiile ce tre-buie efectuate. Enunurile nestandard se
specific prin prefixarea lor cu caracterul '*'.
n dezvoltarea algoritmului, enunurile nestandard sunt nlocuite cu
enunuri standard, care exprim operaii cu corespondent direct n limbajul de
programare. Enunurile standard (comenzile standard) desemneaz o
comand transmis calculatorului i se exprim printr-un cuvnt cheie nsoit de
elemente suplimentare ce i particularizeaz efectul.
Comenzi standard .
1. Comanda de citire. Citirea const n transferul de valori de pe mediul
de intrare n loca-iile de memorie ale calculatorului i are sintaxa:
citete list de variabile
Exemplu:
citete a,b,c.
2. Comanda de scriere. Scrierea sau afiarea const n transferul valorii unei expresii, n particular o variabila pe
mediul de ieire i are sintaxa:
scrie list de expresii
Exemplu:
scrie a+b,c,2*sin(a*b).
3. Comanda de atribuire. Operaia de atribuire const n calculul unei expresii i asocierea aces-tei
valori unei variabile, conform sintaxei:
atribuie v expresie
Exemple:
atribuie a b+c/d;
atribuie x y \/ w /\ ( a<>b).
Dac apar mai multe atribuiri succesive, cuvntul cheie atribuie se va scrie o singur dat, n cele
mai multe cazuri se omite i acest cuvnt.
4. Comanda de oprire este realizat prin enunul:
stop
al crui efect este terminarea execuiei comenzilor.
5. Secvena desemneaz un grup de comenzi scrise una dup alta, execu-tate secvenial i eventual delimitate de
cuvintele cheie: secv i sf secv.
Efectul execuiei unei comenzi dintr-o secven depinde de poziia sa n cadrul secvenei. Exemplul
urmtor ilustreaz acest lucru. Se consider urmtoarele dou secvene:
a) secv b) secv
atribuie x 2, atribuie x 2,
y 3, y 3,
x x+y, x x*y,
x x*y x x+y
scrie x,y scrie x,y
sfsecv sfsecv
Rezultatul execuiei celor dou secvene este:
- pentru secvena a) se afieaz x=15 i y=3;
- pentru secvena b) se afieaz x=9 i y=3.
6. Decizia este o comand ce specific alegerea pentru execuie a uneia dintre
dou comenzi alternative. Sintaxa comenzi este:
dac condiie atunci
secvena1
altfel
secvena2

Condiie poate fi o variabil logic, o expresie relaional sau logic.
Modul de execuie al deciziei este: se evalueaz condiia i dac rezul-tatul este
adevrat se execut prima secven, n caz contrar se execut a doua secven.
n termenii schemelor logice, decizia se definete astfel:
neindeplinita indeplinita
secventa 2 secventa 1
conditie
n cazul n care alternativa altfel lipsete, se folosete forma simplifi-cat a
deciziei, numit i decizie simpl :
dac condiie atunci
secvena

Deciziei simple i corespunde schema logic:


neindeplinita indeplinita
secventa
conditie
Exemplu. Se dau a, b, c trei numere; s se determine cea mai mare
valoare dintre acestea, i s se afieze aceast valoare.
Se propun trei soluii:
Soluia 1). Se compar primele dou numere i n funcie de rezultatul
comparrii, se compar cu al treilea numr, afindu-se rezultatul. Algoritmul de
calcul n pseudocod este:
citete a,b,c
dac a>b atunci
dac a>c atunci
scrie a
altfel
scrie c

altfel
dac b>c atunci
scrie b
altfel
scrie c

stop
Soluia 2). Se reine n variabila x cea mai mare valoare dintre valorile a, b, c. O
prima variant a algoritmului n pseudocod este:
citete a,b,c
* determin n x valoarea maxim dintre a,b
* determin n x valoarea maxim dintre x,c
scrie x
stop
Prin explicitarea enunurilor nestandard se obine:
citete a,b,c
dac a>b atunci
atribuie x a
altfel
atribuie x b

dac c>x atunci


atribuie x c

scrie x
stop
Soluia 3). Folosind numai decizii simple se obine urmtorul algoritm n
pseudocod:
citete a,b,c
atribuie x a
dac x<b atunci x b
dac x<c atunci x c
scrie x
stop
Ultima variant se poate generaliza uor pentru a afla maximul a n
numere.
Soluia a doua arat modul n care are loc dezvoltarea (rafinarea)
sistematic a unui algoritm. n prima etap se realizeaz o descriere global a
operaiilor pe care trebuie s le conin algoritmul. Ulte-rior, aceste operaii se
dezvolt. Trecerea treptat de la enunurile nestandard la cele standard se
numete rafinare.
7. Selecia reprezint o extindere o operaiei de decizie, permind aleger-ea
unei variante din mai multe posibile n funcie de valoarea unei expresii. Forma
general a seleciei este:
alege expresie dintre
c1: secvena1
c2: secvena2
..............
cn: secvenan
rest: secvenan+1

c1,c2....cn se numesc etichete i se folosesc la identificarea


sec-venelor.
Secvena n+1 este opional. n cazul n care lipsete, i eticheta rest
trebuie omis.
Modul de execuie este:
1) Se evalueaz expresia;
2) Se caut eticheta avnd valoarea egal cu valoarea expresiei i se
selecteaz spre execuie secvena corespunztoare;
3) Dac nici o etichet nu are valoarea expresiei, atunci este selec-tat
secvena n+1;
4) Se execut secvena selectat dup care se trece la comanda
urmt-oare seleciei.
Folosind schemele logice, selecia este echivalent cu urmtoarea schem:
v = c2
v = c1
v = expresie
da nu
v = cn
nu da
secv2
secv1
nu da
secvn secvn+1
Exemplu: S se adune o valoare ntreag v la una din valorile so, s1, s2,
s3
dup cum restul mpririi sale la 4 este 0, 1, 2, 3.
Pseudocodul corespunztor algoritmului de calcul este :
citete v,s0,s1,s2,s3
alege (v mod 4) dintre
0:s0 v+s0
1:s1 v+s1
2:s2 s2+v
3:s3 s3+v

scrie s0,s1,s2,s3
stop
n acest exemplu nu este necesar s apar eticheta rest, deoarece 0,
1, 2, 3 sunt singurele valori pe care poate s le ia expresia v mod 4.
8. Cicluri sau iteraii. n rezolvarea problemelor apare deseori situaia
n care o anumit secven urmeaz a se relua de mai multe ori. O astfel de
combinaie se numete ciclu. Pentru reprezentarea ei se folosete o comand
de ciclare ce specific att secvena (grupul de comenzi) ce se repet ct i
condiia de repetare. Exist trei tipuri de cicluri: ciclul cu test final, ciclul cu test
iniial i ciclul cu contor.
8.1. Ciclul cu test final. Testul pentru repetarea calculelor se face
dup execuia grupului de comenzi (secvenei) care trebuie repetate. Dac
condiia nu este ndeplinit se reia execuia secvenei, iar dac condiia este
ndeplinit, se trece la comanda urmtoare ciclului cu test final. Sintaxa comenzi
este:
repet
secvena
pn condiie
Schema logic corespunztoare ciclului cu test final este:
conditie
secventa
da
nu
Exemplu: Algoritmul lui Euclid pentru aflarea celui mai mic multiplu
comun a dou numere m, n ntregi i strict pozitive (m > n).
citete m,n
repet
atribuie c n, r (m mod n)
atribuie m n, n r
pn r=0
scrie c
stop
8.2. Ciclul cu test iniial. Testul pentru repetarea secvenei de calcule se face
naintea execuiei grupului de comenzi care trebuie repetate. Dac condiia este
ndeplinit, se execut secvena, dup care se reevalueaz condiia; dac
condiia nu este ndeplinit, se trece la comanda urmtoare ciclului cu test iniial.
Sintaxa comenzii este:
ct timp condiie repet
secvena

Acest tip de ciclu are avantajul c secvena nu se execut nici o dat


dac condiia este fals (nendeplinit) de la nceput.
Schema logic corespunztoare ciclului cu test iniial este:
conditie
secventa
indeplinita neindeplinita
Exemplu: Algoritmul lui Euclid pentru aflarea celui mai mic multiplu a
doua numere m, n ntregi i strict pozitive(m > n).
citete m, n
atribuie r (m mod n)
ct timp r<>0 repet
atribuie m n, n r
atribuie r (m mod n)

scrie n
stop
8.3. Ciclul cu contor. Ciclul cu contor realizeaz ciclarea unei secvene
de un numr prestabilit de ori, controlat de o variabil de ciclare numit contor.
Sin-taxa comenzii este:
pentru contor = vi,vf,p repeta
secvena

unde:
- contor este variabila de ciclare;
- p este pasul (incrementul) cu care se face ciclarea;
- vi, vf sunt valorile iniiale i finale ale contorului.
Modul de execuie pe pai este:
1. atribuie contor vi
2. se evalueaz condiia contor > vf; dac condiia nu este ndeplinit, se
trece la pasul 3 altfel execuia se oprete i se trece la pasul 5;
3. se execut secvena;
4. se face contor p+contor i se continu cu pasul 2;
5. se trece la executarea comenzii urmtoare ciclului cu contor.
Exemplul 1: S se calculeze P = n !.
Pseudocodul este:
citete n
atribuie p 1
dac n>0 atunci
pentru i=1,n repet
atribuie p p*i

scrie p
stop
Exemplul 2. S se calculeze suma valorilor unui ir de numere ntregi.
Soluia 1. Algoritmul de calcul este urmtorul:
- se citete n, numrul de elemente;
- se iniializeaz suma s la zero;
- se citesc n x elementele irului i
- se cumuleaz n s;
- n final se afieaz valoarea lui s.
O prim variant a algoritmului n pseudocod este:
citete n
* iniializeaz suma
pentru * fiecare element al irului execut
* citete numrul din ir
* adun numrul la sum

scrie s
stop Prin rafinarea enunurilor nestandard de mai sus se obine:
citete n
atribuie s 0
pentru i=1,n,1 execut
citete x
atribuie s s+x

scrie s
stop
Soluia 2. Se folosete acelai algoritm, dar pentru ciclare se folosete ciclul cu test
iniial.
O prim variant a algoritmului n pseudocod este:
citete n
* iniializeaz suma
ct timp * irul nu este epuizat execut
* citete un numr din ir
* adun la suma

scrie s
stop
Prin rafinarea enunurilor nestandard de mai sus se obine:
citete n
atribuie s 0
atribuie i 1
ct timp i<=n execut
citete x
atribuie s s+x
atribuie i i+1

scrie s
stop
Tipuri de date
Variabilele considerate n algoritmii prezentai anterior sunt simple,
indivizibile n raport cu operaiile elementare efectuate asupra lor. Aceste variabile
se numesc variabile simple. Ele pot avea tipuri diferite: numerice, logice sau
alfanumerice.
Un tip de date desemneaz o mulime de operaii ce se pot efectua
asupra valorilor de acel tip.
n cazul tipului numeric operaiile sunt: +(adunare), -(scdere),
*(nmul-ire), /(mprire), div (mprire ntreag), mod (restul mpririi ntregi).
Operatorii relaionali admii pentru acest tip sunt: =, <>, <, >, <=, >=. Rezultatul
operaiilor relaionale se exprim prin valori logice.
Variabilele logice pot lua numai dou valori: adevrat sau fals. Operaiile
aplicabile asupra lor pot fi : negarea 'not', conjuncia 'and' i disjuncia 'or', ce
produc un rezultat logic.
Variabilele alfanumerice sunt caractere sau iruri de caractere. Operaiile
aplicabile asupra variabilelor alfanumerice sunt: copierea i concatenarea.
Datele simple prezentate pn acum, indivizibile n raport cu operatorii
care le prelucreaz se i numesc scalare.
Datele cu mai multe componente, ntre care exist anumite relaii se
numesc date structurate. Cele mai des ntlnite date structurate sunt tabloul i
nregistrarea.
Pentru a evita erorile ce pot apare n pseudocod datorit posibilitii
folosirii a aceleai variabile pentru descrierea unei date numerice, logice,
alfanumerice sau structurate este indicat declararea tipului acestor variabile.
De exemplu:
var a,b,c:intregi;
x,g,j:reale;
l,m:logice;
z,w:alfanumerice.
Tabloul
Tabloul este o structur omogen, constnd din elemente de acelai tip
(tipul de baz al elementelor tabloului). Pentru desemnarea elementelor unui
tablou se utili-zeaz o notaie indicial numit variabil indexat.
Se pot utiliza variabile indexate (tablouri) cu mai muli indici ce
desemneaz tablouri multidimensionale. Fiecare indice poate fi o expresie
numeric oarecare.
Declararea unui tablou se poate face astfel:
tablou: nume(dimensiune):tip_baz
unde:
- nume reprezint numele tabloului;
- dimensiune reprezint valoarea maxim a indicelui sau indicilor
tablou-lui;
- tip_baz reprezint tipul elementelor tabloului (ntreg, real, logic, etc.)
De exemplu declararea unui vector ir de ntregi cu 20 de elemente i a
unei matrice mat cu 10 linii i 15 coloane de tip real se face astfel:
tablou ir (20):ntreg;
mat(10,15):real.
Exemplul 1. S se ordoneze descresctor un ir de n numere reale
memorat n tabloul x.
Se va folosi metoda inversiunilor, deoarece putem stabili dac irul este
ordonat sau nu prin simpla parcurgere a lui. Parcurgerea irului implic n acelai
timp i compararea elementelor succesive.
O prim variant a algoritmului n pseudocod este:
tablou x(n):real
citete n
1. * citete irul x
2. * ordoneaz irul x
3. * scrie irul x
stopComenzile nestandard numerotate cu 1, 2, 3 se rafineaz astfel:
1.
pentru i=1,n execut
citete x(i)

2.
repet
atribuie int adevrat
4. * parcurge irul, inverseaz perechi i actualizeaz
variabila int
pn int

3.
pentru i=1,n,1 execut
scrie x(i)

4.
pentru i=1,n-1,1 execut
5. * compar, inverseaz perechi i actualizeaz int

5.
dac x(i)<x(i+1) atunci
atribuie a x(i)
atribuie x(i) x(i+1)
atribuie x(i+1) a
atribuie int fals

n final algoritmul n pseudocod va arta astfel:


var int:logic;
a:real;
i:ntreg;
tablou x(n):real
citete n
pentru i=1,n execut
citete x(i)

repet
atribuie int adevrat
pentru i=1,n-1,1 execut
daca x(i)<x(i+1) atunci
atribuie a x(i)
atribuie x(i) x(i+1)
atribuie x(i+1) a
atribuie int fals


pn int

pentru i=1,n,1 execut


scrie x(i)

stop.
Exemplul 2. S se gseasc maximul unui ir i poziia sa, irul avnd n
elemente de tip ntreg.
O prim variant a algoritmului n pseudocod este:
tablou x(n):ntreg;
var max,poz:ntreg;
citete n
1 * citete irul x
atribuie max x(1)
atribuie poz 1
2 * parcurge irul i actualizeaz max i poz
scrie max,poz
stop
Enunurile nestandard numerotate cu 1 i 2 se rafineaz astfel:
1.
pentru i=1,n,1 execut
citete x(i)

2.
pentru i=2,n execut
dac max<x(i) atunci
atribuie max x(i)
atribuie poz i

n final algoritmul va arta astfel:


tablou x(n):ntreg;
var max,poz:ntreg;
citete n
pentru i=1,n,1 execut
citete x(i)

atribuie max x(1)


atribuie poz 1
pentru i=2,n,1 execut
dac max<x(i) atunci
atribuie max x(i)
atribuie poz i

scrie max,poz
stop
Exemplul 3. S se determine produsul a dou matrice A i B. Matricea
A are m linii i n coloane, iar matricea B are n linii i p coloane. Matricea produs
este matricea C.
Soluie:
tablou a(m,n):real;
b(n,p):real;
c(m,p):real;
var i,j,k,n,m,p:ntreg;
sum:real;
citete m,n,p
pentru i=1,m execut
pentru j=1,n execut
citete a(i,j)

pentru i=1,m execut


pentru j=1,n execut
citete b(i,j)

pentru i=1,m execut


pentru j=1,p execut
atribuie sum 0
pentru k=1,n execut
atribuie sum sum+a(i,k)*b(k,j)

atribuie c(i,j) sum

pentru i=1,m execut


pentru j=1,n execut
scrie c(i,j)

stop
nregistrarea
Presupunem c este necesar s pstram i s prelucrm urmtoarele
infor-maii despre o persoan: numele, data naterii (an, luna, zi) i dac a urmat
sau nu cursuri universitare. Aceste date, legate ntre ele prin faptul c aparin
aceleiai persoane nu pot fi grupate ntr-un tablou deoarece nu sunt omogene:
numele este de tip alfanumeric, data naterii de tip nregistrare sau pe
componente de tip ntreg iar dac a urmat sau nu cursuri universitare este o
valoare de tip logic. Structura de nregistrare permite gruparea lor. O nregistrare
const dintr-un numr fix de componente care pot fi de tipuri diferite. Fiecare
component se numete cmp. Un cmp al nregistrrii are un identificator numit
selector prin intermediul cruia cmpul poate fi referit astfel: presupunnd c
variabila "persoana" este de tipul nregistrare cu cmpurile "nume" (de tip
alfanumeric), "an" (de tip ntreg), "luna" (de tip intreg) si "universitatea" (de tip
logic), pentru a indica o component a nregistrrii, de exemplu cmpul "an", se
folosete notaia persoana.an. n general, referirea la un cmp al variabilei de tip
nregistrare se face prin notaia:
variabila.selector_cimp
Declararea unei variabile de tip nregistrare se poate face prin
construc-ia:
variabila=nregistrare
cmp:tip;
cmp:tip;
.........
sfnreg
O nregistrare poate avea o structur mai complex, coninnd drept un cmp o
alt nregistrare.
Exemplu : Dac avem declaraiile:
data=inregistrare
an,zi,luna:ntreg
sfinreg;
pers=inregistrare
nume:alfanumeric;
data_nasterii:data;
univ:logic
sfinreg
n acest caz selecia cmpului luna a nregistrrii pers se face prin:
pers.data_nasterii.luna
Exemplu : Cunoscndu-se data naterii unei persoane i data curent s
se calculeze vrsta n ani a persoanei repective.
Algoritmul n pseudocod este:
datan,datac=inregistrare
an,luna,zi:intreg
sfinreg;
citete datan.zi,datan.luna,datan.an
citete datac.zi,datac.luna,datac.an
dac datac.an<=datan.an atunci
scrie 'date eronate'
altfel
atribuie virsta datac.an - datan.an
dac (datan.luna>datac.luna)\/(datan.luna = datac.luna)
/\ (datan.zi > datac.zi)
atunci virsta virsta - 1

scrie virsta

stop
Se pot defini i structuri mai complexe care combin facilitiile de structurare ale
tablourilor cu cele ale nregistrrilor.
Exemplu : Putem avea un tablou al tuturor studenilor dintr-un an n care
fiecare element este o nregistrare cu cmpurile nume, sex, data_naterii (o alt
nregistrare cu 3 cimpuri an, luna, zi).
Declararea unei asemenea construcii se face prin:
data = nregistrare
an,zi,luna:intreg
sfnreg;
student = nregistrare
nume:alfanumeric;
data_nasterii:data;
sex:(m,f)
sfnreg
tablou p(100):student;
Selecia anului n care s-a nscut studentul i se face astfel:
p(i).data_naterii.an
Proceduri i funcii
n rezolvarea problemelor apar situaii n care poriuni de program cu
modificri minime se ntlnesc n diferite zone ale programului. Grupul de comenzi
care se repet poate constitui o unitate distinct creia i se d un nume i un set
de parametrii. Ori de cte ori va fi necesar execuia acestui grup de comenzi se
va specifica numele unitii i parametrii care actualizeaz grupul de comenzi n
noile condiii. Grupul de comenzi se numete subprogram. Subprogramul poate fi
o proce-dur sau o funcie.
Procedura
Procedura specific secvene de operaii care se repet n diferite
puncte ale programului i evideniaz parametrii (partea variabil la fiecare apel).
Forma general a unei proceduri n pseudocod este:
procedura nume (lista_parametrilor_formali) este:
secvena
sfrit
Parametrii care apar n descrierea unei proceduri se numesc parametrii
formali. Rolul lor este descriptiv.
Apelul unei proceduri n pseudocod se face cu comanda:
execut nume (lista_parametrii_actuali)
Exemplu: Se cere s se ordoneze dou iruri de numere reale avnd cel
mult 20 de elemente. irul X are n componente, iar irul Y are m compo-nente.
Procedura n pseudocod arat astfel:
procedura ORDON(V,N) este:
var ind:logic;
b:real;
i:ntreg;
repet
atribuie IND adevrat
pentru i=1,N-1 execut
dac V(i)<V(i+1) atunci
atribuie B V(i)
V(i) V(i+1)
V(i+1) B
IND fals


pn IND

sfrit
Programul care apeleaz aceast procedur n pseudocod este:
tablou x,y(20):real;
var n,m:ntreg;
citete n,m
* citete irul x de dimensiune n
execut ORDON(x,n)
* scrie irul x de dimensiune n
* citete irul y de dimensiune m
execut ORDON(y,m)
* scrie irul y de dimensiune m
stop
Variabilele m, n, x, y sunt citite n algoritmul principal i sunt transmise
procedurii prin mecanismul substituirii parametrilor. Variabilele i, IND, B sunt
variabile locale procedurii. Modificarea lor n procedur nu are nici un efect n afara
ei. Apelul procedurii prin comanda execu-t nume (lista_parametrii_actuali) are ca
efect execuia operaiilor care constituie corpul procedurii cu numele respectiv i n
care valorile parametrilor formali sunt nlocuite cu valorile parametrilor actuali
corespunztori. Corespondena dintre parametrii formali si actuali ai unei proceduri
este poziional. Parametrul care ocupa poziia k n lista parametrilor formali este
nlocuit de parametrul care ocup poziia k n lista parametrilor actuali. Aceasta
substi-tuire de parametrii se numete transferul parametrilor. Comanda execu-t
nume (lista_parametri_actuali) se termin odat cu terminarea ultimei operaii din
procedur. Revenirea din procedur se face la comanda imediat urmtoare
apelului procedurii.
Funcii
Atunci cnd procedura calculeaz o singur valoare se poate utiliza un
tip particular de procedur numit funcie. Forma general este:
funcia nume (lista_parametrii_formali):tip_functie este:
secvena
sfrit
Singurul parametru de ieire este considerat chiar numele funciei care
este utilizat n secvena de operaii a funciei ca orice parametru. Valoarea acestui
parametru reprezint valoarea funciei. Pentru ca utilizarea unei funcii n cadrul
unei expresii s fie ct mai simpl apelul unei funcii este considerat ca un
operand al expresiei.
Forma apelului este : nume (lista_parametrii_actuali)
k n! k n!
Exemplu: S se calculeze C = , A = ,
n k!(n-k)! n (n-k)!
folosind o funcie pentru calculul factorialului.
Definirea funciei n pseudocod este:
funcia FACT(m):ntreg este:
var s,i:ntreg;
atribuie S 1
pentru i=1,m,1 execut
atribuie S S*i

atribuie FACT S
sfrit
Programul n pseudocod care folosete funcia este:
citete n,k
var n,k,cnk,ank:ntreg;
FACT(n)
atribuie CNK
FACT(k)*FACT(n-k)
FACT(n)
atribuie ANK
FACT(n-k)
scrie CNK, ANK
stop
Execuia unei funcii intervine atunci cnd la evaluarea unei expresii este
necesar valoarea sa. n aceast situaie se face transmiterea parametrilor
funciei, se execut secvena de operaii corespunzt-oare, gsindu-se astfel
valoarea funciei ce se depune n locul apelului.
n concluzie, utilizarea procedurilor i funciilor urmrete:
1. O seciune de algoritm utilizat n mai multe puncte ale acestuia s poat fi
descris o singur dat i apelat ori de cte ori este nevoie, scurtndu-se n
acest mod dimensiunea programului.
2. Proiectarea unor pri ale algoritmului se poate face separat, pe subprobleme,
independent una de alta, acestea putndu-se codifica i testa separat.
3. Reprezentarea de sine stttoare a rezolvrii unor subprobleme.
4. Construirea unor algoritmi de complexitate mare folosind deja module de
program deja proiectate i verificate.