Sunteți pe pagina 1din 13

Capitolul III.

Proiectarea algoritmilor
No
iuni de programare structurat
(continuare)
Reamintim :
Principiul program
rii structurate : orice algoritm avnd o singur
intrare
i o singur
ie
ire poate fi
reprezentat ca o combina
ie de structuri simple
i de trei structuri de control :
- secven
a
- decizia
- ciclul cu test ini
ial
F

r
a contraveni principiilor program
rii structurate, se tolereaz
si urm

toarele structuri de control (ce


asigur
o descriere mai compact
a algoritmilor)
- ciclul cu test final
- ciclul cu contor
- selec
ia
3. Structuri de control ciclice
Structurile de control n care un grup de opera
ii se execut
n mod repetat se numesc structuri ciclice
sau iterative.
implementarea ra
ionamentelor umane de tip iterativ

ciclic
este caracterizat
prin :
- corpul ciclului - secven
a de ac
iuni care se execut
n mod repetat
- rela
ia de condi

ionare a ciclului expresia a c


rei evaluare asigura num
rul finit de
repet
ri (finitudine)

rul de repet
ri poate fi cunoscut sau necunoscut a priori. 3.1 Ciclul cu test iniial (condiionat anterior)
Enun 3.1.1 : Programatorul alege un numr (ntre 1 i 50) i cere utilizatorului acelui program s l
ghiceasc.
Obs. n condiiile n care intervalul de alegere este extins, se poate limita numrul de ncercri
(Tem Introducei n soluie restricia ca utilizatorul s ghiceasc numrul din maximum 25 de
ncercri) . Structura de tip ciclu cu test iniial se descrie n general astfel :
ct timp expresie_condiie execut
| *secven
|_
unde: expresie_condiie reprezint relaia de condiionare a ciclului, iar secven, corpul ciclului.
Execuia acestei structuri se face astfel :
1
echivalent, are valoarea de adevr adevrat, se continu cu pasul 2

contrar execuia ciclului se

ncheie.
2

ena ce constituie corpul ciclului, dup care se revine la pasul 1

Observaii :
- dac de la nceput, deci la intrarea n execuie a ciclului, condiia nu este ndeplinit, corpul
ciclului nu se execut niciodat;

- corpul ciclului trebuie s acioneze asupra condiiei, modificnd-o n sensul n care, la un moment
dat aceasta s nu mai fie ndeplinit, pentru a asigura un numr finit de execuii ale corpului ciclului.
- structura se preteaz acelor aplicaii n care numrul de iteraii nu este cunoscut a priori i nu
exist garania faptului c secvena ce reprezint corpul ciclului de execut cel puin o dat.
expresie_conditie
* Secventa
DA NU
corpul cicluluiSoluie 3.1.1 :
atribuie nr_secret
scrie Ghiceste numarul !
citete n
ct timp n nr_secret execut
| scrie N-ai ghicit !!! Incearca din nou !
| citete n
|_
scrie Felicitari, ai ghicit !!!
stopEnun 3.1.2: Pentru un numr n precizat de valori preluate de la consol se cere s se calculeze i
s se afieze suma i produsul acestora (nu este necesar pstrarea n memorie a tuturor
termenilor introdui). Soluie 3.1.2.a:
start
citete n
atribuie s
atribuie i
ct timp i <= n execut
| citete x

| atribuie s
| atribuie p
| atribuie i
|_
scrie s,p
stop3.2 Ciclul cu contor
Structura de tip ciclu cu contor se descrie n general astfel :
pentru contor = val_in, val_fin, pas execut
| *secven
|_
Modul de execuie al acestei structuri rezult din echivalena ce se poate stabili cu secvena de mai
jos, care confirm nenclcarea principiilor programrii structurate :
atribuie contor
ct timp contor <= val_fin execut
| *secven
| atribuie contor
|_
contor <=
valoare_finala
* Secventa
DA NU
contor <-- valoare_initiala
contor <-- contor + pas
corpul cicluluiObservaii :
- dac de la nceput, deci de la intrarea n execuie a ciclului, valoarea iniial a contorului este

strict mai mare dect valoarea final a acestuia, corpul ciclului nu se execut niciodat
- n cazul folosirii ciclului cu contor, iniializarea contorului, testul asupra valorii finale a acestuia,
precum i actualizarea contorului sunt incluse implicit n cuvintele cheie ale structurii.
- structura se preteaz acelor aplicaii n care numrul de iteraii este cunoscut a priori.
- structura de tip ciclu cu contor este o structura tolerat, ea asigurnd o descriere mai compact a
algoritmilor.
Soluie 3.1.2.b:
start
citete n
atribuie s

,p

pentru i = 1, n execut
| citete x
| atribuie s
| atribuie p
|_
scrie s,p
stop
Tem : Completai soluia astfel nct s se calculeze i s se afieze media aritmetic a termenilor
nenuli preluai de la consol.Enun 3.1.3: Se preia de la consol un ir de valori ntregi strict pozitive. Se
cere s se calculeze i s se
afieze suma acestora precum i numrul valorilor introduse. Sfritul sesiunii este marcat prin
introducerea unui numr negativ. Soluie 3.1.3 :
start
atribuie s
atribuie nrp
citete x

ct timp x > 0 execut


| atribuie s
| atribuie nrp
| citete x
|_
scrie s, nrp
stop
Tem : Completai soluia astfel nct s se calculeze i s se afieze produsul termenilor pari preluai de
la consol.3.3 Ciclul cu test final (condiionat posterior)
Structura de tip ciclu cu test final se descrie n general astfel :
repet
*secven
ct timp expresie_condiie
unde: expresie_condiie reprezint relaia de condiionare a ciclului, iar secven, corpul ciclului.
Execuia acestei structuri se face astfel :
1

l ciclului

2
valoarea de adevr adevrat, se revine la pasul 1
expresie_conditie
* Secventa
NU DA
corpul cicluluiObservaii :
- corpul ciclului se execut cel puin o dat ;
- corpul ciclului trebuie s acioneze asupra condiiei, modificnd-o n sensul n care, la un moment
dat aceasta s nu mai fie ndeplinit, pentru a asigura un numr finit de execuii ale corpului ciclului.

- structura se preteaz acelor aplicaii n care numrul de iteraii nu este cunoscut a priori i exist
garania faptului c secvena ce reprezint corpul ciclului de execut cel puin o dat
- structura de tip ciclu cu test final este o structura tolerat, ea asigurnd o scriere mai compact a
algoritmilor, ea putnd fi descris echivalent :
*secven
ct timp expresie_condiie execut
| *secven
|_
- implementarea standard n programarea structurat a structurii de tip ciclu cu test final se
descrie n general n pseudocod astfel :
repet
*secven
pn cnd expresie_condiie
Execuia acestei structuri se face astfel :
1

na ce constituie corpul ciclului

2
are valoarea de adevr fals, se revine la pasul 1

ui se ncheie.

Se observ cu uurin faptul c , n cazul structurii modificate, relaia de condiionare a ciclului este
negata expresiei care apare n structura standard, astfel nct repetarea corpului ciclului se face ct timp
condiia este ndeplinit i se ncheie n momentul n care condiia nu mai este ndeplinit .
Vom folosi n cele ce urmeaz structura modificat deoarece aceasta corespunde implementrii n
limbajul C a instruciunii aferente. Enun 3.3.1 : Se cere s se scrie un algoritm care afieaz mesajul
Continuai ?(D/N) ct timp de la
consol nu se tasteaz caracterul N sau n. (Tem - Descriei algoritmul folosind structura de ciclu cu test
iniial) Soluie 3.3.1
start

repet
scrie Continuai ?(D/N)
citete raspuns
ct timp raspuns N i raspuns n
scrie GATA!!!
stopEnun 3.3.2 : Se cere s se scrie un algoritm care preia de la consol un text, incheiat cu caracterul
punct.Soluie 3.3.2
start
scrie Introduceti un text. Tastati . pentru a incheia
repet
citete caracter
scrie caracter
ct timp caracter .
stop
Tem : Completai soluia astfel nct s se calculeze i s se afieze numrul de caractere ale propoziiei
citite de la consol.Enun 3.1.4. : Pentru un numr ntreg n, diferit de zero, preluat de la consol, se cere
s se calculeze i
s se afieze suma i numrul cifrelor sale n baza 10. Soluie 3.1.4. :
start
citete n
atribuie n
atribuie suma_cifre
atribuie numr_cifre
ct timp n 0 execut
| atribuie cifra_curent
| atribuie suma_cifre

restul mpririi lui n la 10


uma_cifre + cifra_curent

| atribuie numr_cifre
| atribuie n
|_
scrie suma_cifre, numr_cifre
stop
Tem : Completai soluia astfel nct afiarea numrului de cifre s fie corect inclusiv pentru cazul
n=0.Enun 3.3.2 : Se cere ca, pentru o valoare x preluat de la consol , |x|, s se calculeze valoarea
aproximativ a valorii funciei ex , cu o eroare inferioar unui precizat.
Se pleac de la dezvoltarea n serie a funciei ex :

! ! ! k!
x
3
x
2
x
1
x
e1
23k
x
care se mai poate scrie :

n
k10kn
nk
k
knk
k0
k
xRxt
k
x
tRxt
k
x
e , ( ) ! ( ), !
S notm cu e_aprox valoarea aproximativ a lui ex. Evident modulul erorii de aproximare care se
face trunchiind suma la n+1 termeni este :
| err | = | ex e_aprox| = | Rn(x) |
Se poate demonstra c , pentru orice n natural, dac :
0 < 2| x |
atunci :
| Rn(x) | < | tn |

Rezult c
| tn | < => | Rn(x) | = |err| <
Observaii :
1. Condiia suplimentar impus ca |x|
chiar de la n = 1.
2. Calculul termenilor sumei ca raport ntre o putere a lui x i un factorial este ineficient din punct
de vedere numeric, de aceea se caut o relaie de recuren. Soluie 3.3.2. :
start
citete x,
dac |x| <=0.5 atunci
| atribuie t
| atribuie k
| atribuie e_aprox
| repet
| atribuie t
| atribuie e_aprox
| atribuie k
| ct timp | t |
| scrie e_aprox
| altfel
| scrie Date eronate !
|_
stop
Tem :
1. Completai tabloul de evoluie a valorilor variabilelor algoritmului pentru cazul x=0.4 i

=0.0001
2. Scriei soluia complet a algoritmului de calcul a valorii aproximative a valorii ex (inclusiv
pentru cazul |x|>).
3. Modificai soluia astfel nct s se limiteze numrul maxim de iteraii n care se calculeaz
aproximarea la o valoare impus, MAX _ITER = 1000.

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