Documente Academic
Documente Profesional
Documente Cultură
1
În cadrul matematicii şi logicii, algoritmii apar ca metode generale pentru rezolvarea tuturor
problemelor dintr-o clasă dată. În perioada 1931-1947 s-au dezvoltat în cadrul logicii matematice un
număr de concepte de “algoritm” bine delimitate care precizează noţiunea intuitivă. Cele mai
importante sunt rezolvarea ecuaţiilor (J. Herbrand, K. Gödel, S.C., Kleene, aproximativ în perioada 1931-
1936), maşina lui Turing (A.M. Turing, 1936), - calcul (A. Church, 1936) şi conceptele algoritmice ale lui
E.L. Post (1936) şi A.A. Markov (1947).
Semnificativ este faptul că toate aceste noţiuni sunt echivalente în sensul că aceleaşi funcţii definite pe
domeniul numerelor naturale, aşa numitele funcţii recursive pot fi calculate prin fiecare din ele. Pe baza
acestei echivalenţe se poate adopta punctul de vedere prin care conceptul intuitiv de algoritm câştigă
astfel precizie. Acest punct de vedere a fost formulat în 1936 de către Church şi este cunoscut în
literatura matematică ca ipoteza lui Church.
O funcţie f definită pe mulţimea numerelor naturale se zice calculabilă dacă există un algoritm prin care
f(n) se poate găsi pentru orice valoare n a argumentului.
Ipoteza lui Church - o funcţie definită pe domeniul numerelor naturale este calculabilă dacă şi numai
dacă este recursivă.
1
Generalitatea reprezintă proprietatea algoritmului de a fi aplicabil tuturor problemelor din
clasa de probleme pentru care a fost elaborat.
Finitudinea algoritmului presupune că într-un timp determinat (un număr finit de paşi,
cunoscut sau necunoscut), problema se consideră soluţionată. În caz contrar algoritmul
ciclează, adică algoritmul va efectua la infinit transformări asupra datelor de intrare.
Claritatea (unicitatea) algoritmului presupune ordinea exactă a paşilor şi perfecta lor
determinare şi inteligibilitate; totul trebuie exprimat corect, fără ambiguităţi şi neclarităţi.
Deoarece activitatea de elaborare a unui algoritm este strâns legată de etapa următoare de
codificare şi transpunere într-un limbaj de programare (etapa de programare), este necesar ca
abordarea construcţiei şi analizei algoritmilor să se facă prin prisma principiilor programării
structurate.
Un program poate fi privit ca un sistem. Structura unui program, adică elementele şi relaţiile
dintre ele, a fost studiată atent odată cu dezvoltarea teoriei programării structurate.
Programarea structurată este o metodă de concepere, organizare, codificare, testare,
menţinere şi documentare a programelor.
Programarea structurată reprezintă modalitatea de ordonare a activităţii mentale desfăşurate
în scopul obţinerii de programe constituite din structuri fundamentale (secvenţială, alternativă,
repetitivă), în condiţiile minimizării efortului de programare, dar realizării unor produse
program fiabile şi de bună calitate.
Începutul programării structurate aparţine profesorului E.W. Dijkstra de la Universitatea
Eindhoven, care propune în 1965 construirea unor programe mai bune prin evitarea folosirii
instrucţiunii de salt necondiţionat (GOTO).
Fundamentarea matematică este făcută de Bőhm şi Jacopini într-un articol publicat în 1966, în
care demonstrează că sunt suficiente trei tipuri de structuri de transfer a execuţiei pentru a
exprima logica internă a oricărui program: secvenţa, selecţia şi iteraţia.
2
În 1974, Knuth2 prezintă două situaţii în care utilizarea instrucţiunii GOTO nu modifică claritatea
programelor.
a) situaţia în care se doreşte să se iasă din mai multe repetiţii ierarhizate pe nivele, astfel încât
să se ajungă pe primul nivel;
b) situaţia unei selecţii multiple în care variantele selectate sunt apropiate; în cazul în care
soluţia unei variante poate fi redusă la soluţia unei alte variante printr-un calcul simplu, cel mai
natural mod de a rezolva prima variantă este efectuarea unui salt necondiţionat.
În 1972 Mills dă o fundamentare riguroasă programării structurate, modelând programul cu
ajutorul conceptului de funcţie.
Schema logică (organigrama) este rezultatul unei analize inductive, care duce la o înlănţuire de
acţiuni şi teste. Făcând abstracţie de unele convenţii de reprezentare, organigrama unui proces
de calcul conţine 3 tipuri de simboluri:
a1
b) Predicatul (condiţie, expresie booleană, test) – ia valoarea de adevăr (T) sau de fals (F);
corespunzător acestor valori se continuă execuţia pe un arc sau pe celălalt:
T
F
c) Simbolul de regrupare – pentru a continua pe un singur arc; se asigură astfel ieşirea sau
intrarea într-o structură standard; se reprezintă:
2
Donald E. Knuth (n.1938), profesor emerit la Stanford University, este autorul lucrării The Art of
Computer Programming, una dintre cele mai apreciate lucrări în domeniul informaticii. Lucrarea conţine
mai multe volume: Fundamental Algorithms (vol. I), Seminumerical Algorithms (vol. II), Sorting and
Searching (vol. III), Combinatorial Algorithms (vol. IV) şi în pregătire Syntactic Algorithms (vol. V), estimat
să apară în 2020.
3
În continuare se prezintă în sinteză principalele structuri şi teoremele fundamentale legate de
acestea.
1) Structura D (Dijkstra) – conţine:
acţiunea elementară;
compoziţia (înlănţuirea secvenţială):
a b
F
unde a este o structură D,
P iar p este un predicat
a T
a
T
4
Se observă că se poate introduce pe ramura fals o acţiune elementară vidă, notată cu Ø,
obţinând astfel echivalenţa:
T
a P unde a este o structură D’,
iar p este un predicat
F
1
a1
1
an
n
Această diagramă se notează CASE-OF ( , a1 , a2 ,..., an ).
3) Structura L – este o structură oarecare „bine formată”, adică pe orice cale avem un drum de
la intrare la ieşire; poate conţine instrucţiuni de salt necondiţionat; nu există restricţii asupra
predicatelor.
Definiţia 3.1. Dacă o schemă logică are numai structuri D sau D’, atunci ea se numeşte schemă
logică structurată.
Definiţia 3.2. O structură S1 este convertibilă funcţional într-o structură S2 , dacă şi numai dac
pentru orice intrare, S2 calculează aceeaşi funcţie ca şi S1 .
5
Teorema de structură a lui Böhm şi Jacopini
a) Orice structură L este echivalentă funcţional cu o structură D sau D’.
b) În conversia funcţională a unei structuri L într-o structură D sau D’ sunt eventual folosite un
număr finit de variabile booleene de control.
Observaţie.
Teorema de structură a lui Böhm şi Jacopini permite transformarea unei scheme logice
nestructurate (structura L) într-o schemă logică structurată. Utilizarea abuzivă a instrucţiunii de
salt necondiţionat (GOTO) poate conduce la erori de programare fatale (cicluri infinite).
Consecinţa practică importantă a programării structurate este eliminarea lui GOTO sau o
utilizare cât mai mică (GOTO less).
6
Exemplu
Programul:
s1 s2
T s5
T
p4 s6
P= p1 F
s3
T
F
p2
F
F T
s4 p3
poate fi descompus succesiv până la ultimul nivel astfel:
7
SCHEME LOGICE STRUCTURATE
Schema logică (organigrama) este o reprezentare grafică a unui algoritm, care foloseşte diferite
figuri geometrice având o anumită semnificaţie; figurile sunt unite prin săgeţi care arată modul
în care acestea se înlănţuiesc.
Pentru sporirea clarităţii se admit următoarele simboluri grafice pentru reprezentarea
schemelor logice:
marchează ramificaţiile în
bloc de decizie
funcţie de o anumită condiţie
reprezintă o prescurtare a
ceea ce urmează să se
sau bloc de procedură dezvolte sau există şi doar se
utilizează
8
Aplicaţia 1. Diferenţa a două mulţimi date sub formă de vectori - structură L.
START
CITEŞTE M, N
A(I), I=1,..,M
B(J), J=1,..,N
L:=0; I:=1
J:=1
T
A(I) = B(J)
J := J+1
T
J <= N
F
L := L+1
C(L) := A(I)
I := I+1
T
I <= M
F
T F
L=0
SCRIE SCRIE
“Diferenţa vidă” C(I), I = 1,…,L
STOP
9
Aplicaţia 2. Diferenţa a două mulţimi date sub formă de vectori - structură D’.
START
CITEŞTE M, N
A(I), I=1,..,M
B(J), J=1,..,N
L:=0; I:=1
J:=1 ; LOGIC:=T
F T
A(I) = B(J)
J := J+1 LOGIC:= F
:= J+1
(J <= N)
AND T
LOGIC
F T L := L+1
LOGIC C(L) := A(I)
I := I+1
T
I <= M
F
T F
L=0
SCRIE SCRIE
“Diferenţa vidă” C(I), I = 1,…,L
STOP
10