Sunteți pe pagina 1din 32

ALGORITMI ŞI SCHEME

LOGICE
 Caracteristicile algoritmilor
 Iterativitate şi recursivitate
 Reprezentarea algoritmilor
 Descrierea structurilor fundamentale
 Structurarea algoritmilor
 Erorile în algoritmi
 Proiectarea algoritmilor
Definiție

Un algoritm este o succesiune logică de acțiuni/operații, care


se aplică unui set de date de intrare, pentru a obține un set de
date de ieșire (rezultate) corecte.

Caracteristicile algoritmilor
• Generalitate

ax2+bx+c=0, a,b,cR, a ≠ 0

ax2+bx+c=0, a,b,cR – grad maxim de generalitate


• Claritate (detaliere)
Exemplul 1: ecuaţia de grad 2

dacă a=0 
dacă b=0 
dacă c=0  ecuație nedeterminată
dacă c≠0  ecuație imposibilă
dacă b≠0  ecuație de gr. I, x = -c/b

dacă a≠0  =b2-4ac


dacă >0 
dacă =0  = = -b/2a
dacă <0  soluții complexe
x1,2=i
=-b/2a, =
x1=+||i, x2=-||i
• Finitudine

Clase de algoritmi:

 Algoritmi cu număr finit de paşi, a priori cunoscut

Produs scalar între două mulţimi

Fie șirurile (vectorii) X=(x1, x2…, xn), Y=(y1, y2…, yn)

PS=
 Algoritmi cu număr finit de paşi, a posteriori cunoscut

• CMMDC între două numere


• Numerele prime până la o limită dată

 Algoritmi cu număr infinit de paşi

Rezolvarea unei ecuaţii transcendente


ITERATIVITATE ŞI
RECURSIVITATE
Un algoritm iterativ este un algoritm repetitiv în care, la fiecare pas, operațiile
utilizează alte date de intrare.

Exemple:
1. Produsul vectorial dintre doi vectori
X=(x1, x2…, xn), Y=(y1, y2…, yn) – vectori de intrare
Z=(z1, z2…, zn) - vectorul rezultat
unde zi = xi · yi, cu i=1,n – formula iterativă

2. Determinarea pătratelor elementelor unui vector


X=(x1, x2…, xn) – vectorul de intrare
Y=(y1, y2…, yn) – vectorul rezultat
unde yi = xi2 , cu i=1,n – formula iterativă
Un algoritm recursiv este un algoritm repetitiv în care, la fiecare pas, operațiile
utilizează, pe lângă date de intrare noi și valori calculate la pasul (pașii) anteriori.

Exemple:
1. Suma elementelor unui vector: X=(x1, x2…, xn).
S=

Algoritmul matematic

Pas 1: S1 = x1
Pas 2: S2 = S1 + x2
...
Pas i: Si = Si-1 + xi
...
Pas n: Sn = Sn-1 + xn
___________________
S = Sn
Trecerea de la algoritmul matematic la algoritmul informatic presupune
următoarele două modificări majore:
1. toate notațiile din algoritmul matematic reprezintă date pentru algoritmul
informatic;
2. operatorul relațional “=” devine operator de atribuire.

Operația de atribuire: v = e,
unde v este data receptoare a unei valori, iar e este o expresie.

Atribuirea se realizează în 2 pași:


3. se evaluează expresia e;
4. rezultatul evaluării se depune în zona de memorie v.

Exemple: a b c
a=b+c
a=a+b
i=i+1
...
2 1

+ UAL
Algoritmul informatic

S=0
Pas 1: S = x1
 S = S + x1
Pas 2: S = S + x2
...
Pas i: S = S + xi
...
Pas n: S = S + xn

S=0 - formula de start


S = S + xi , i=1,n – formula recursivă

2. Produsul elementelor unui vector: X=(x1, x2…, xn).


P=

P=1 - formula de start


P = P · xi , i=1,n – formula recursivă
3. Factorialul unui număr natural: n! =

fact = 1 - formula de start


fact = fact · i, i=1,n - formula recursivă

4. Maximul dintre elementele unui vector.

MAX = x1 - formula de start


MAX = maxim (MAX, xi+1), i=1,n-1 – formula recursivă

5. Cmmdc dintre două numere a,bN*

Algoritmul lui Euclid, bazat pe teorema împărțirii întregi:


D=I·C+R

d = a; i = b - formule de start
r = rest(d/i) - formulă recursivă
Structurile fundamentale din programarea
structurată
Structura secvenţială (liniară)

s.l.s. arbore pseudocod


{
BLOCK
s1;
s1 s2;

s1 s2 … sn sn
s2
}

analitic: BLOCKn(s1,s2,…,sn)
sn
Structură PRIVILEGIATĂ !
Structurile alternative - selecţia simplă

s.l.s. arbore
Nu Da
c IF-THEN-ELSE

s2 s1
c s1 s2

pseudocod analitic
IF c THEN
s1 IF-THEN-ELSE(c,s1,s2)
ELSE
s2
ENDIF Structură PRIVILEGIATĂ !
Structurile alternative - pseudoalternativa
s.l.s. arbore

Nu Da IF-THEN
c

s1 c s1

analitic
pseudocod
IF-THEN (c,s1)
IF c THEN
s1
ENDIF
Transformarea în structură privilegiată

s.l.s.
analitic
Nu Da
c
if-then(c,s1) = if-then-else(c,s1,)
 s1

Structura pseudoalternativă pe ramura fals

if-else(c,s1) = if-then-else(c,,s1) = if-then(,s1) = if-then-else(,s1,)


s.l.s. Structura alternativă multiplă

analitic
i
i=v1 i=v2 i=vn iV CASE-OF (i,s1,s2,…,sn,s)

s1 s2 ... sn s

pseudocod

CASE-OF i
arbore i=v1: s1 ;
i=v2: s2 ;
CASE-OF i ...
i=vn: sn
ELSE s
ENDCASE

s1 s2 ... sn s
Transformarea în structură privilegiată

NU DA
i=v1
NU DA
i=v2 s1

s2

NU DA
i=vn

s sn

Case-of(i,s1,s2,…,sn,s) = if-then-else(i=v1, s1, if-then-else(i=v2, s2, …


if-then-else(i=vn, sn, s))…)
Structurile repetitive

Structura repetitivă condiţionată anterior


s.l.s. arbore

Da WHILE-DO
c
Nu c s
s
analitic

pseudocod WHILE-DO(c,s)

WHILE c DO
s
ENDWHILE Structură PRIVILEGIATĂ !
Structura repetitivă condiţionată posterior

s.l.s. arbore

s DO-UNTIL

s c
c Nu
Da

pseudocod analitic

DO
s DO-UNTIL(s,c)
UNTIL c
Transformarea lui do-until în structură privilegiată

DA
c

NU s

do-until(s, c) = block2(s, while-do(, s))

Transformarea lui while-do cu ajutorul lui do-until

NU DA
c

NU
c
DA

while-do(c, s) = if-then(c, do-until(s, )) = if-then-else(c, do-until(s, ), )


Structura repetitivă cu numărător
s.l.s. arbore
DO-FOR(vi,vf,vr)
v=vi

Da
vvf
s

s
Nu
DO FOR v=vi,vf,vr
v=v+vr pseudocod s
ENDDO

analitic DO-FOR(v,vi,vf,vr,s)
Niteratii = [(vf - vi) / vr] + 1

Niteratii > 0

Dacă vi  vf  vr > 0

Dacă vi  vf  vr < 0

Transformarea lui do-for în structură privilegiată

do-for(v,vi,vf,vr,s)= block2(v=vi, while-do(vvf, block2(s, v=v+vr)))


ORGANIZAREA INTERNĂ A
DATELOR

 Informaţia, data şi cunoştinţa


 Clasificarea datelor
 Structuri statice de date
 Structuri dinamice de date
CLASIFICAREA DATELOR
Abordare la nivel logic

• După natură:
- numerice: naturale, întregi, reale, complexe;
- alfabetice
- alfanumerice
- logice

• După numărul de valori în timpul execuţiei programului:


- variabile
- constante propriu-zise (literali)
- constante simbolice

• După numărul de valori memorate concomitent:


- elementare (scalare)
- structurate (structuri de date)
Clasificarea structurilor de date

• După adresa fizică de memorie în timpul execuţiei:


- structuri statice
- structuri dinamice
• După modul de referire a elementelor:
- cu acces secvenţial
- cu acces direct
• După natura elementelor:
- omogene
- eterogene

• După tipul elementelor:


- cu elemente date scalare
- cu elemente date structurate (structură recursivă)
• După mediul de memorare:
- interne (în memoria principală)
- externe (pe medii magnetice: fişiere, baze de date)
STRUCTURI STATICE DE DATE
Masivul: structură de date omogenă, cu acces direct, între elementele
căreia există o relaţie ierarhică, pe mai multe niveluri

Vectorul X

x1 x2 xn
• Reprezentare
internă
x1 x2 ... xi ... xn
D(xi)
X
• Referire element

Adr(xi) = Adr(X) + D(xi)


D(xi) = (r(xi) - 1) * l
r(xi) = i
A
Matricea
l1 l2 lm

a1,1 a1,2 a1,n am,1 am,2 am,n


• Reprezentare internă: lexicografică sau invers lexicografică

a1,1 a1,2 ... ai,j ... am,n


D(ai,j)
A
• Referire element

Adr(ai,j) = Adr(A) + D(ai,j)


D(ai,j) = (r(ai,j) - 1) * l
r(ai,j) = (i - 1) * n + j  memorare lexicografică
r(ai,j) = (j - 1) * m + i  memorare invers lexicografică
Masivul tridimensional

T(m,n,p) = vector m dimensional, de matrice n*p

y z
• Referire element

Adr(ti,j,k) = Adr(T) + D(ti,j,k)


D(ti,j,k) = (r(ti,j,k) - 1) * l
r(ti,j,k) = ((i - 1) * p + j - 1) * n + k  memorare lexicografică
r(ti,j,k) = ((k - 1) * n + j - 1) * m + i  memorare invers lexicografică
SUBPROGRAME
• Definiţie, utilitate
• Clasificare
- după numărul de valori returnate:
funcţii sau proceduri
- după poziţia faţă de apelator:
interne sau externe
- după aria de utilizare:
standard sau utilizator
Construcţia subprogramelor

Antet

tip-subprogram identificator-subprogram (listă parametri formali)

Parametrii formali: de intrare și de ieșire

Corp

Parte de declaraţii

Parte de instrucţiuni
Apelul subprogramelor

Program principal Transfer al Subprogram


controlului
execuţiei
Parte de declaraţii Parte de declaraţii

Parte de execuţie Transfer de Parte de execuţie


date
………. ……….
………. ……….
Apelul subprogramelor

identificator-funcţie (listă parametri reali)

identificator-procedură (listă parametri reali)

Transferul datelor între apelator și apelat

Transferul datelor prin parametri:


 prin valoare
 prin adresă

Transferul datelor prin variabile globale


Structura stivei la apelul subprogramelor

STIVA

Apelator A push pop


………………...
Apel subprogram S Variabile locale 1
3
………………… subprogramului S
Parametrii
2 2
subprogramului S
(adrese sau replici)
1 Adresa de revenire în 3
apelatorul A

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