Sunteți pe pagina 1din 9

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 ..

INFORMATICA

Tema 2. Algoritmi: caracteristici, reprezentare, implementare


Obiective

s urmreti execuia algoritmilor pas cu pas


s identifici valorile variabilelor la fiecare pas
s creezi algoritmi repetitivi

Fia de documentare 2.3. Programarea structurat (III)

Structura repetitiv
O structur repetitiv se caracterizeaz prin posibilitatea efecturii repetitive a
unei secvene de instruciuni, ct timp este ndeplinit o anumit condiie sau
pna cnd se ndeplinete o anumit condiie. Repetiia secvenei de instruciuni
se numete iteraie.
Structurile repetitive se mai ntalnesc sub numele de structuri ciclice sau cicluri.
Exist trei tipuri de structuri repetitive:
- Structura cu numr necunoscut de repetiii cu test iniial (CT TIMP sau
WHILE)
- Structura cu numr necunoscut de repetiii cu test final (EXECUTA - CT TIMP
sau DO-WHILE)
- Structura cu numr cunoscut de repetiii (PENTRU sau FOR)

Structura repetitiv cu test iniial - CT TIMP sau WHILE


Structura repetitiv cu test iniial are dou componente:

conditia, o expresie logic ce poate fi evaluat prin valoarea TRUE sau


FALSE, condiie pe care o notm cu c;

actiune, o secven de instruciuni ce se vor execut repetat, notat cu a,


aciune asociat cu EXECUT;

Folosind notaiile fcute, structur repetitiv cu test iniial se poate scrie astfel:
ct timp c execut
|
a
|

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

Principiul de executre este urmtorul:


Ct timp condiia c este adevarat, se execut secvena de instruciuni a.
Execuia se oprete cnd condiia c nu mai este adevarat.
Observaii:
Pentru ca structur repetitiv s nu intre ntr-un ciclu infinit, trebuie ca
secvena de instruciuni s modifice cel puin una din variabilele care intervin
n condiie astfel nct aceasta s poat deveni fals la un moment dat.
Dac de la bun nceput condiia are valoarea fals, secvena de
instruciuni nu se execut nici mcar o data.

Exemplu: Suma cifrelor


S consideram urmatoarea problem: Se citete un numr n, ntreg, cu cel
mult 9 cifre. Se cere s se afieze suma cifrelor numrului n.
Explicarea algoritmului: Rezolvarea presupune c se extrag pe rnd cifre
din numr i se adaug la sum. Soluia se poate exprima n cuvinte astfel: CAT
TIMP numrul este diferit de zero (deci mai sunt cifre de extras), EXECUT
extrage i elimin ultima cifr din numrul n apoi adaug cifra la sum.
Soluia are dou componente:

condiia, trascris prin numrul este diferit de zero;


aciune transcris prin extrage i elimin ultima cifr din numrul n apoi
adaug cifra la sum;

Notnd numrul dat cu n, cifra eliminat cu c i suma cifrelor cu s,


algoritmul de rezolvare va fi:

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

n ntreg //date de intrare


c ntreg //date de manevr
S ntreg //date de ieire
citete n
S 0
ct timp
|
c n
|
n n
|
S S
|

n>0 execut
% 10 //extrag cifra
/ 10 //elimin cifra
+ c //adun la sum

scrie s

Structura repetitiv cu test final EXECUT CT TIMP sau DO WHILE


Ca i structur repetitiv cu test iniial, structur repetitiv cu test final are
aceleai dou componente:

condiia, o expresie logic ce poate fi evaluat prin valoarea TRUE sau


FALSE, condiie pe care o notm cu c;

actiune, o secven de instruciuni ce se vor executa repetat, notat cu a,


aciune asociat cu EXECUT;

n structur repetitiv cu test final mai nti se execut secvena de


instruciuni a i apoi se evalueaz condiia. De aici i numele de structur cu
test final.
n pseudocod forma general a structurii repetitive cu test final este:
execut
|
a
ct timp c

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

Denumim aceast structur n mod obinuit EXECUT CT TIMP sau DO


WHILE, nsa exist variante la fel de utilizate ale acestei structuri i
anume: REPET PN CND sau REPEAT UNTIL.
Observaii:
Pentru ca structur repetitiv s nu intre ntr-un ciclu infinit, trebuie ca
secvena de instruciuni s modifice cel puin una din variabilele care intervin
n condiie astfel nct aceasta s poat deveni fals la un moment dat.
Spre deosebire de structur repetitiv cu test iniial, structur repetitiv cu
test final efectueaz o data secvena de instruciuni nainte de a testa
condiia.

Exemplu: numrul de vocale


S considerm urmatoarea problem: Se citete de la tastatur o propoziie
scris cu litere mici, terminat cu . (punct) . Se cere s se afieze
numrul de vocale din prpoziie.

Explicarea algoritmului: Rezolvarea problemei se face citind succesiv


caracterele din propoziie n variabila c, pna citim caracterul . . Pentru fiecare
caracter citit verificm dac este vocal (a, e, i, o, u) i dac da, il numram.
Soluia se poate exprima n cuvinte astfel: EXECUT citete un caracter i dac
este vocal se crete contorul CT TIMP caracterul citit este diferit de . .

Avem dou componente:

condiie, trascris prin caracterul citit este diferit de punct ;

aciune transcris prin citete un caracter i dac este vocal se


crete contorul;

Rezolvarea algoritmului din exemplu este:

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

c caracter //date de intrare


nr ntreg //date de ieire
nr 0
execut
| citete c
| dac (c=asau c=esau
| | c=isau c=osau c=u)
| |
atunci
| | nr nr + 1 //numar vocala
| |
ct timp c.
scrie nr

Structura repetitiv cu numr cunoscut de repetiii PENTRU sau


FOR
n pseudocod forma general a structurii repetitive cu numr cunoscut de repetiii
este:
pentru contor exp_i, exp_f execut
|
a
|
unde:

exp_i i exp_f sunt expresii ale cror valori sunt evaluate n cadrul
repetiiilor;

contor este o variabil ce va lua prima dat valoarea expresiei iniiale


exp_i, urmnd apoi s se modifice pn la valoarea expresiei finale exp_f;

a este secven de instruciuni ce se va executa repetat;

Principiul de funcionare al structurii repetitive cu numr cunoscut de repetiii


este urmtorul (am fcut presupunerea c exp_i <= exp_f):

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

Pasul 1: Se evalueaz exp_i (expresia iniial);


Pasul 2: Se atribuie variabilei contor valoarea expresiei exp_i;
Pasul 3: Se evalueaz exp_f (expresia final);
Pasul 4: Dac valoarea variabilei contor este mai mare dect valoarea expresiei
exp_f, atunci se iese din structur repetitiv. Dac valoarea varibilei contor este
mai mic sau egal cu valoarea expresiei exp_f, atunci se execut secvena de
instruciuni a i se incrementeaz (i mrete valoarea cu 1) valoarea variabilei
contor, dup care se reia pasul 3.

Observaii:
Exp_i i exp_f pot fi expresii de evaluat sau doar variabile simple ce au valori
date.
De regul folosim structuri repetitive cu numr cunoscut de repetiii n care
dorim ca variabila contor s creasca de la exp_i la exp_f, caz n care evident
valoarea exp_i trebuie s fie mai mica dect exp_f.
ntr-o astfel de structur, secvena de instruciuni se execut de (exp_f exp_i
+1) ori. Dac ns folosind acest tip de structur, valoarea iniial a lui exp_i este
mai mare dect exp_f, atunci secvena de instruciuni a nu se execut
niciodat.
Dac forma structurii PENTRU este:
pentru contor exp_i, exp_f, x execut
|
a
|
unde x este o variabil numeric, atunci contorul va crete din x n x. Cnd x
lipsete din structur PENTRU, contorul, crete cu 1.
n structurile repetitive cu numr cunoscut de repetiii n care dorim ca
variabila contor s scad de la exp_i la exp_f, trebuie ca exp_i >= exp_f, iar
variabila contor va scdea din x n x sau cu cte o unitate. Dac ns folosind
acest tip de structur, valoarea iniiala a lui exp_i este mai mica dect exp_f,
atunci secvena de instruciuni a nu se execut niciodat.

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

Exemplu: Suma primelor n numere naturale


Se consider urmatoarea problem: Se citete un numr natural n. S se afieze
suma primelor n numere naturale.
De exemplu dac n =10 atunci algoritmul va afia 55, deoarece
S=1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Explicarea algoritmului: Se observ ca trebuie s calculm o sum cu


numr cunoscut de termeni. Rezolvarea problemei se face deci folosind o
structur repetitiv cu numr cunoscut de repetiii.
Algoritmul va fi urmtorul:
n ntreg //date de intrare
S ntreg //date de ieire
i ntreg //date de manevr
citete n
S 0
i 1
pentru i = 1, n execut
| S S + i
|
scrie S

Se observ c folosind scheme logice nu se poate reprezenta structur


PENTRU dect cu ajutorul uneia din structurile repetitive cu testare iniial sau
final.

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

Transformri dintr-un tip de structur repetitiv n altul

Simularea structurii repetitive WHILE cu DO-WHILE se face astfel:


ct timp c execut
|
a
|

Dac c atunci
|execut
||
a
|ct timp c
|

Se observ c este necesar testarea iniial a condiiei deoarece, spre


deosebire de structur WHILE, structur DO-WHILE efectueaz cel puin o
dat secvena nainte de a testa condiia.
Simularea structurii repetitive DO-WHILE cu WHILE se face astfel:
execut
|
a
ct timp c

a //se execut secvena a


ct timp c execut
|
a
|

Se observ c n acest caz este necesar s executm o dat secvena


de intruciuni n afara ciclului.
Cele dou structuri (WHILE i DO - WHILE) sunt echivalente (nefiind necesar
existena ambelor), ns n funcie de problem, vom alege structur repetitiv
adecvat, care este mai potrivit pentru descrierea clar a algoritmului.

Simularea structurii repetitive FOR cu WHILE se face astfel:


pentru contor vi,vf execut Contor vi
|
a;
ct timp contor<=vf execut
|
|
a;
|
contor contor + 1;
|
Se observ c n acest caz este necesar s scriem explicit instruciunea
care crete contorul cu 1.

Simularea structurii repetitive FOR cu DO - WHILE se face astfel:

2009 Giovanna Stanica

1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 .. INFORMATICA

pentru contor vi,vf executContor vi


|
a;
Dac contor<=vf atunci
|
| execut
| |
a;
| |
contor contor + 1;
| ct timp contor<=vf
|
Dintre toate aceste structuri repetitive, singura indispensabil este
cea cu test iniial (CT TIMP sau WHILE), celelalte putnd fi obinute din
aceasta, dup cum am vzut mai sus.

2009 Giovanna Stanica