Sunteți pe pagina 1din 27

ALGORITMI ŞI SCHEME LOGICE

STRUCTURATE

1. Caracteristicile algoritmilor
2. Iterativitate şi recursivitate
3. Reprezentarea algoritmilor
4. Descrierea structurilor fundamentale
5. Structurarea algoritmilor
6. Erorile în algoritmi
7. Proiectarea algoritmilor
8. Verificarea corectitudinii algoritmilor
9. Analiza algoritmilor
3. Reprezentarea algoritmilor –
prin scheme logice
Blocul de început/sfârșit

- pentru programul principal:

START STOP

- pentru module:

Denumire modul IEȘIRE

- pentru subprograme:
Denumire subprogram REVENIRE
Blocul de intrare/ieșire
(citire/scriere date)

- pentru citire, care reprezintă transferul datelor din exteriorul sistemului de calcul în
memoria principală, cu sau fără conversie:

Citește
lista_de_variabile

- pentru citirea de la tastatură se poate utiliza convenția:

lista_de_variabile
- pentru scriere, care reprezintă transferul datelor din memoria principală în
exteriorul sistemului de calcul, cu sau fără conversie:

Scrie
lista_de_date

- pentru afișarea pe monitor se poate utiliza convenția:

lista_de_date

Blocul de atribuire Blocul de apel de modul

v=e Nume modul


Blocul de ramificare

c 1  c2  …  cn = 1
c1 c2 … cn
ci  cj = 0,  i  j; i,j = 1,n

Pentru cazul n =2

NU DA
c
c c
Definiții:
• Schema logică - un graf orientat în care:
a) există un singur bloc START și un singur bloc STOP;
b) orice arc este etichetat cu una din următoarele informații: START sau STOP; o citire sau
o scriere; o atribuire; un predicat, în care caz extremitatea inițială a arcului este
extremitatea inițială a unui bloc de ramificație;
c) orice arc face parte din cel puțin un drum care începe cu blocul START și se termină cu
blocul STOP.

• Subschema logică - un graf orientat în care:


a) există un unic vârf inițial (în care nu sosesc arce) și un vârf final (din care nu pleacă
arce);
b) oricare arc este etichetat cu una din următoarele informații: START sau STOP; o citire
sau o scriere; o atribuire; un predicat, în care caz extremitatea inițială a arcului este
extremitatea inițială a unui bloc de ramificație;
c) dacă subschema conține blocul START (STOP), atunci extremitatea inițială (finală) a
blocului este chiar vârful inițial (final);
d) orice arc face parte din cel puțin un drum ce unește vârful inițial cu cel final.
S1
c c c c

S1 S2
S2 S

Structura Structura alternativă Structura repetitivă


secvenţială IF-THEN-ELSE WHILE-DO

• Schema logică structurată - se definește astfel:


I. Blocurile START, STOP, de intrare/ieșire şi de atribuire sunt s.l.s.;
II. Dacă s1 şi s2 sunt s.l.s., atunci și subschemele din figura de mai sus
(structura secvență, structura alternativă, structura repetitiva WHILE-DO)
sunt s.l.s. (cu respectarea condițiilor referito­are la START şi STOP).
III. Orice s.l.s. se obține plecând de la (I) și aplicând de un număr finit de ori
regulile (II).

• Teorema lui Jacopini: orice schemă logică este echivalentă cu o schemă logică
structurată
În practică se elaborează scheme logice structurate care folosesc mai multe configurații
(structuri) decât cele prezentate, numite structuri fundamentale.

Programarea structurată
-modalitatea de ordonare a activității mentale desfășurată în scopul obținerii de
programe (algoritmi) constituite din structuri fundamentale cu un grad de structurare
cât mai mare și în condițiile minimizării efortului de programare, dar obținerii unui
produs de cea mai bună calitate.
• Structurile fundamentale din programarea structurată:
1. Structura secvențială
2. Structura alternativă simplă
3. Structura pseudoalternativă
4. Structura alternativă multiplă
5. Structura repetitivă condiționată anterior
6. Structura repetitivă condiționată posterior
7. Structura repetitivă cu numărător
3. Reprezentarea algoritmilor - prin
pseudocod
• Cuvinte cheie
Exemple: WHILE-DO, IF-THEN-ELSE

• Instrucțiuni:
• Declarații
• Instrucțiuni executabile

• Comentarii
Exemplu: : /* text */
Instrucțiuni executabile – 1
• Citirea datelor de la tastatură: read listă-de-variabile
Exemple:
read n;
read a,b,c;
read n, (x(i), i=1,n);
read m,n, ((a(i,j), i=1,m), j=1,n)

• Afișarea datelor pe monitor: write listă-de-date


Exemple:
write ma,mg,mh;
write “Suma = “, s;
write (x(i), i=1,n);
write ((a(i,j), i=1,m), j=1,n)
Instrucțiuni executabile – 2
• Atribuirea: v=e
Exemple:
s=0;
mh=2*a*b/(a+b);
z(i)=x(i)+y(i);
c(i,j)=c(i,j)+a(i,k)*b(k,j)

• Instrucțiunile de ramificare:
• IF-THEN-ELSE
• IF-THEN
• CASE-OF

• Instrucțiunile repetitive:
• WHILE-DO
• DO-UNTIL
• DO-FOR
4. Descrierea structurilor fundamentale
din programarea structurată
Structura secvenţială (liniară)

s.l.s. arbore pseudocod


{
BLOCK s1;
s2;
s1 ...
sn
}

s2 s1 s2 … sn

analitic: BLOCKn(s1,s2,…,sn) cu n2


sn
Structură PRIVILEGIATĂ !
Exemple
• Interschimbarea a două elemente
a b
2
{
aux=a;
a=b; 1 3
b=aux
}
aux

• Salvarea pozițiilor într-un vector


{
k=k+1;
poz(k)=i
}
Structurile alternative - selecţia simplă
s.l.s. arbore

Nu Da IF-THEN-ELSE
c

s2 s1 c s1 s2

pseudocod analitic

if c then
s1
IF-THEN-ELSE(c,s1,s2)
else
s2
endif Structură PRIVILEGIATĂ !
Exemple
• Maximul dintre două numere, a și b
if a>b then
max=a
else
max=b
endif

• Calculul expresiei e=(a+b)/c


if c≠0 then
{
e=(a+b)/c;
write e
}
else
write "Numitor 0!"
endif
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
Exemplu
• Dacă a>b atunci să se interschimbe cele două numere
if a>b then
{
aux=a;
a=b;
b=aux
}
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( c,s1) =


= IF-THEN-ELSE(c,, s1) = IF-THEN-ELSE( c,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
i=v1: s1;
arbore
i=v2: s2;
CASE-OF i ...
i=vn: sn
else s
endcase
s1 s2 ... sn s
Transformarea în structură privilegiată
s.l.s pseudocod
if i=v1 then
NU DA
i=v1 S1

NU DA else
i=v2 s1 if i=v2 then
S2
s2
else
NU DA ....
i=vn if i=vn then

s sn Sn

else

S
endif
........
endif
endif
arbore
IF-THEN-ELSE

i=v1 S1 IF-THEN-ELSE

i=v2 S2 IF-THEN-ELSE

..........................................................

IF-THEN-ELSE

i=vn Sn S

analitic
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))…)
Exemplu
 10, x  5;
8, x  0;

Calculul funcției f(x), cu x  Z și f ( x)  
20, x  2;
2 x 2 , x  Z \  5,0,2;

case of x
x=-5: f = -10;
x=0: f = 8;
x=2: f = 20;
else: f = 2*x*x
endcase
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
Structura repetitivă cu numărător
s.l.s. arbore

DO-FOR(v,vi,vf,vr)
v=vi

Da s
vvf

s
Nu
do for v=vi,vf,vr
v=v+vr pseudocod s
enddo

Observație:
analitic DO-FOR(v,vi,vf,vr,s)
dacă vi≤vf, atunci vr0 (contorul crește)
Observație:

Dacă vi≥vf, atunci vr0 (contorul descrește)

s.l.s.

v=vi

DA N = [(vf - vi) / vr] + 1


v≥vf
NU s
N>0
v=v+vr
Exemple
Transformări în structuri privilegiate
Întrebări pe platformă
Discuții pe baza întrebărilor

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