Documente Academic
Documente Profesional
Documente Cultură
Algoritmii pentru care există posibilitatea repetării execuţiei unuia sau a mai multor paşi,
alcătuiesc categoria algoritmilor CICLICI.
Succesiunea de paşi care poate fi executată în mod repetat poartă denumirea de ciclu.
Numărul de repetări ale unui ciclu poate fi fix sau variabil.
Cea mai mare parte a algoritmilor utilizaţi în practică este reprezentată de algoritmi ciclici.
Aceşti algoritmi permit o descriere concisă a unor succesiuni de numeroşi paşi. Algoritmii
ciclici sunt indicaţi în special pentru a fi executaţi cu ajutorul calculatoarelor electronice.
În schema logică a unui algoritm ciclic, un ciclu este reprezentat printr – o săgeată care
porneşte dela o ieşire x1 a condiţiei logice până la locul de unde s-a început executarea
secvenţei de instrucţiuni de calcul.
Un algoritm ciclic poate avea mai multe cicluri, acestea putând fi incluse unul în celălalt
Procedeul de repetare a secvenţei de paşi se numeşte ciclare.
Structurile repetitive de bază care apar în schemele algoritmilor ciclici sunt de trei feluri:
1).Instrucţiunea de ciclare cu test final ( condiţia logică )
Adică testarea ( condiţia logică ) se face la sfârşit. Ea determină repetarea sub controlul unei
condiţii, a execuţiei unei secvenţe de instrucţiuni.
45
2). Dacă “contor” este mai mic sau egal cu valoarea finală se execută “Secvenţa A”, se adună 1 la
“contor” şi se reia cu pasul 2).. Altfel, execuţia este încheiată.
APLICAŢII
a = 17, b = 7
Fie r = 17 - 7q
pasul 1: q = 0
pasul 2 : r = 17
pasul 3: dacă r < b, urmează pasul 7
Fie După fiecare testare dacă r > 7 , se repetă
altfel urmează pasul 4
pasul 4: r = 17 - 7 = 10 şi q = 0 +1
pasul 5: rşi= 10
r >7 =10 -şi 7q�=
1 3 =1 +1 = 2
pasul 6: r = 3 < 7
pasul 7: terminat r = 3
paşii.
46
Generalizare Fie
a, b �=+Σ<
� a bq r , q, r �şi 0 r b
r = a - bq
pasul 1: q := 0
pasul 2: r := a
pasul 3: Dacă r < b urmează pasul 7
altfel urmează paşii 4,5
pasul 4: r := a - bq
pasul 5: q := q +1
pasul 6: Dacă r < b urmează pasul 7
altfel urmează paşii 3,4,5
pasul 7: terminarea algoritmului
47
Când se realizează cele două subprocesele de calcul.
Pentru primul subproces de calcul avem: x1 = 1 şi y1 = 1, y2 = 0
f ( 1,1, 0) = 1
Pentru al doilea subproces de calcul avem: x1 = 0 şi y1 = 0, y2 = 1
f ( 0, 0,1) = 1
Aplicăm formula disjunctivă : f ( x1 , y1 , y2 ) = x1 y1 + x2 y2 este formula de structură cu condiţia
i �n şi cele două subprocese de calcul. Avem schema:
Mai putem scrie y1 = uvw unde:
u - este variabila boolleeană asociată lui i := i +1
v - este variabila booleeană asociată lui x := f ( x )
w- variabila booleană asociată subprocesului de calcul care constă în reluarea întregului subproces
căruia i-a asociat variabila y1
Putem pune echivalenţa uy2 � y2 deoarece livrarea rezultatului final ( xn ) nu-l putem să-l
efectuăm fără a efectua subprocesul de calcul i := i +1 , deoarece de abia după ce i a parcurs
toate valorile dela 1 la n putem vorbi de livrarea rezultatului.
Formula de structură de mai sus devine :
f ( x1 , y1 , y2 ) = x1 y1 + x1 y2 = xuvw + x1uy2 = u ( x1vw + x1 y2 )
f ( x1 , y1 , y2 ) = u ( x1vw + x1 y2 ) este ultima formulă a algoritmului ciclic cu variabilă contor
Exemple:
1). Să se descrie cu ajutorul schemei logice un algoritm de calculul sumei
numrerelor : x1 , x2 , x3 ,......., x100
48
Soluţie.
100
1 � a�
l= �l+ �
� �
� � 2l 2 = l 2 + a � l 2 = a � l = a
�
2� l �
x1 , x2 , x3 ,....., xn .... � l = a
Şirul ( xn ) n�1 este descrescător. Cu cât rangul termenului din şir
este mai mare cu atât mai mult el se apropie de valoarea
a . Termenul cu rangul 100, x100 este foarte apropiat de
valoarea lui a .
În modul acesta putem calcula rădăcina pătrată dintr-un număr
a > 0 , cu o aproximaţie oricât dorim de apropiată
( prin exces deoarece xn > a ).
Dacă 0 �a <1 atribuim lui x0 :=1
Soluţie
Informaţia iniţială a algoritmului de calcul a lui P ( x ) , este alcătuită din coeficienţii polinomului
a0 , a1 , a2 , a3 ,....., an şi x .
Un procedeu practic este aducând polinomul la o formă de recurenţă :
49
P ( x) = ( ......( ( a0 x + a1 ) x + a2 ) x + a3 ) x +...... + an- 1 ) x + an
P0 = a0
P1 = P0 + a1
P2 = P1 x + a2
Notăm cu : Deci am obţinut:
P3 = P2 x + a3
........................
Pn = Pn- 1 x + an
Pi = Pi- 1 x + ai unde i = 1, 2,3,...., n
Algoritmul este ciclic.
Schema algoritmului este:
k
4). Să se scrie schema logică a algoritmului de tipărire a combinărilor Cn ,
pentru k = 1, 2,3,......, n unde n fiind dat.
Soluţie.
k n - k +1 k - 1
Se foloseşte formula de recurenţă: Cn = �
Cn , înseamnă
k
că algoritmul este ciclic.
În acest caz ne interesează rezultatele intermediare ca:
Cn1 , Cn2 , Cn3 , Cn4 ,.........., Cnn nu numai rezultatul final.
Schem logică este:
50
6). Să se calculeze f : �� �, f ( x ) = x n
Soluţie.
f1 = x
f 2 = xx = xf1
f3 = xxx = xf 2
f 4 = xxxx = x ( xxx ) = xf 3
...........................................
f n = xf n- 1
Formula de recurenţă este:
f i := x �f i- 1 cu f 0 :=1 si i = 1, 2,3,..., n
7). Să se calculeze
Pn = n !
Soluţie
n ! = n ( n - 1) ! � Pn = n �
Pn- 1 , P0 = 0! = 1
Algoritmul este ciclic, a cărui schemă logică este:
P1 = x1
P2 = x1 �
x2 = P1 �
x
P3 = x1 � x3 = ( x1 �
x2 � x2 ) x3 = P2 �
x3
..........................................................
Pn = Pn- 1 � xn
Formula de recurenţă este:
Pi = Pi- 1 � xi cu P1 = x1 si i = 1, 2,3, 4,....., n
51
Algoritmul este ciclic. Schema logică este:
Soluţie.
P0 = 0
P1 = 0 + x1 y1 = P0 + x1 y1
P2 = 0144
+244 1 + x2 y2 = P1 + x2 y2
x1 y3
P1
P3 = 0144444
+ x141 + x2 y4
y244444 23+ x3 y3 = P2 + x3 y3
P2
................................................................
Pn = ( 0 + x1 y1 + x2 y2 + x3 y3 + ..... + xn- 1 yn- 1 ) + xn yn = Pn- 1 + xn yn
144444444444444442 44444444444444443
Pn- 1
� Pi = Pi- 1 + xi yi 0 =i0
cu Pşi =1, 2,3,....,
n
este formula de recurenţă
Algoritmul este ciclic. Avem schema logică a lui:
52
Apoi după fiecare testare şi când condiţia este îndeplinită, este necesară o altă variabilă T , care
numără numerele pozitive cu iniţializarea T := 0 şi apoi T := T +1
12). Selecţionarea celui mai mare numă dintr-un şir de numere date:
a1 , a2 , a3 ,......., an date.
53
Soluţie.
m1 = max ( a1 )
m2 = max ( a1 , a2 ) = max ( m1 , a2 )
m3 = max ( a1, a2 , a3 ) = max ( m2 , a3 )
m4 = max = ( a1 , a2 , a3 , a4 ) = max ( m3 , a4 )
.....................................................................
mn = max ( a1 , a2 , a3 ,......, an- 1 , an ) = max ( mn- 1 , an )
deci avem:
�ai dacă mi- 1 < ai este un
M = mi = max ( mi- 1 ; ai ) = � �
�
� mi dacă mi- 1 �ai
algoritm ciclic
54
Deci în şirul a1 , a2 , a3 , a4 ,........, an dacă ai > ai +1
executăm inversiubea prin instrucţiunile :
t � ai şi ai � ai +1 şi ai +1 � t
exemplu:
a1 ; a2 ; a3 ; a4 ; a5
82,9 - 33, 2 315,12 173,5 - 15
a1 > a2 nu facem schimbarea
a2 < a3 facem schimbarea
a1 ; a2 ; a3 ; a4 ; a5
82,9 315,12 - 33, 2 173,5 - 15
a3 < a4 facem schimbarea
a1 ; a2 ; a3 ; a4 ; a5
82,9 315,12 173,5 - 33, 2 - 15
a4 < a5 facem schimbarea
a1 ; a2 ; a3 ; a4 ; a5
82,9 315,12 173,5 - 15 - 33, 2
Aceste instrucţiuni se repetă la fiecare inversiune, deci
formează o structură ciclică.
Deşi s-a parcurs inspectarea întregului şir, el nu este
ordonat deoarece a1 < a2 din exemplul de mai sus.În
alte situaţii e posibil ca după inspectarea întregului şir
să avem surpriza să fie ordonat. Deci avem nevoie de
o altă informaţie dacă este sau nu este ordonat după
întreaga parcurgere. Informaţia este cu două valor da sau nu ( 1;0) ; deci notăm cu Inv o nouă
�Inv := 0 nici-o inversiune
variabilă booleeană ca o condiţie logică. � � această
�
�Inv := 1 a existatcel puţin o inversiune
variabilă este modificată şi testată. Deci acum putem întocmi şi schema logică a algoritmului.
Soluţie.
�
a11 a12 a13 .... a1n ��
�
� �
�
a21
� a22 a23 .... a2 n �
�
�
A =�
� �Avem două variabile
�
�.... .... .... .... .... �
�
�
�
� �
�
�
am1
� am 2 am 3 .... amn ��
contor: i �{1, 2,3,..., n} şi j �{1, 2,3,...., m}
55
Avem două condiţii logice: i �n şi j �m .
Pentru fiecare valoare întreagă a lui i dela 1 la n, se face ca j să parcurgă toate
valorile întregi dela 1 la m.
Este un algoritm ciclic deoarece se repetă paşii pentru i cât şi pentru j pentru a descrie
elementele matricei. Când i este fix şi j variabil se descrie o coloană. Când j este fix iar i este
variabil se descrie o linie
Putem construi schema logică
n m
Soluţie
n m
S = ��aij = a11 + a12 + a13 + ..... + a1m
i =1 j =1
56
16 ). Să se scrie un algoritm pentru calculul sumei a două matrici.
A+B = S
Soluţie.
Conform definiţiei avem Sij = aij + bij ; unde i �1, m si j �1, n
�
a11 a12 a13 ...... a1n �� �
b11 b12 b13 ...... b1n ��
�
� � �
� �
�
a21 a22 a23 �
�
...... a2 n � �
b21 b22 b23 ...... b2 n �
�
� �şi B = � �
A =�
� �
� �
�
...
� ... ... ...... .... �
�
� �
...
� ... ... ...... .... �
�
�
� � � �
�
�
am1
� am 2 am3 ...... amn ��
� �
�
�m1 bm 2
b bm 3 ...... bmn ��
�
�
a11 + b11 a12 + b12 a13 + b13 .... a1n + b1n � �
�
� �
�
a21 + b21
� a22 + b22 a23 + b23 .... a2 n + b2 n �
� Avem două cicluri : unul inclus în
�
S = A + B =�
� �
�
�
...
� ... ... .... ... �
� celălalt, deoarece ciclul cu j = 1, n se
� �
�
�
�
am1 + bm1
� am 2 + bm 2 am 3 + bm 3 .... amn + bmn � � repetă şi el după
i =1, m de m ori
57
17 ). Înmulţirea matricilor înlănţuite şi pătrate.
Soluţie
�
a11 a12 a13 ...... a1n � �
b11 b12 b13 ...... b1 p �
�
�
� �
� �
� �
�
a21
� a22 a23 ...... a2n ��
�
�
b21
� b22 b23 ...... b2 p �
�
�
A =� �şi B = �
� �
�
�
...
� ... ... �
...... .... �
� �
...
� ... ... ...... .... �
�
�
� �
� �
� �
�
�
�
am1
� am 2 am 3 ...... amn �� �
bn1 bn 2 bn3 ...... bnp ��
�
�
c11 c12 c13 ...... c1 p �
�
�
� �
�
c21
� c22 c23 ...... c2 p �
�
�
Cmp = Amn �
Bnp =�
� �
�
...
� ... ... ...... .... �
�
�
� �
�
�
�
cm1 cm 2 cm 3 ...... cmp ��
�
n
58
Dăm lui i valoarea i := 1 şi se obţine :
c11.c12 , c13 ,......, c1 p elementele de pe linia I a matricei produs. Mărim pe i cu i := i +1 , până când
i = m şi se generează cele m linii ale matricei produs.
Schema întreagă a algoritmului de calculul produsului a două matrici este redată mai jos:
59
18 ). Să se determine câte elemente nule sunt pe fiecare linie dintr-
o matrice.
Soluţie.
60
19 ). Să se afle numărul de elemente pozitive de pe fiecare coloană a
matricei.
Soluţie
Soluţie.
61
C = { c1 , c2 , c3 ,....., c p } = { a1 , a2 , a3 ,......, am } �{ b1 , b2 , b3 ,......, bn } unde:
c1 = ai1 = b j1 , c2 = ai2 = b j2 , c3 = ai3 = b j3 ,......, ck = aik = b jk deci avem o condiţie logică: ai = b j
Aceste comparaţii se repetă după i =1, m şi j = 1, n , formând cicluri. Mai este necesară o altă
variabilă contor: k := 0, k := k +1 care numără elementele comune.
62