2. Particularităţi de implementareParticularităţi de implementare
Generarea şi cercetarea consecutivă a
elementelor mulţimii S.
Utilizarea funcţiilor şi procedurilor pentru
fiecare din subproblemele:
◦ Verificarea apartenenţei elementului cercetat si la
soluţie
◦ Plasarea elementului curent în soluţie
◦ Generarea următorului element al mulţimii
(dacă e necesar)
3. ProblemăProblemă
Să se scrie un program care determină toate
secvenţele binare de lungime n, fiecare din ele
conţinînd nu mai puţin de k cifre de 1.
Intrare: numere naturale n, 1<n<20, şi k, k<n,
se citesc de la tastatură.
Ieşire: fiecare linie a fişierului text OUT. TXTva
conţine câte o secvenţă binară distinctă, ce
corespunde condiţiilor din enunţul problemei.
4. Analiza problemeiAnaliza problemei
Numărul secvenţelor binare de lungime
n este 2n
, finit.
(vezi: Informatica, manual pentru clasa X)
Prin urmare, pentru problema dată poate
fi aplicată metoda trierii.
6. Separarea subproblemelorSepararea subproblemelor
Generarea secvenţelor binare de lungime n
cu r, r>k unităţi
Generarea
secvenţelor
binare de
lungime n
Determinarea
numărului de
unităţi în
secvenţa curentă
Prelucrarea
soluţiei
curente
7. Structuri de date
tablou unidimensional cu n elemente, ce pot
primi valoarea 0 sau 1. Pentru problema
propusă n nu depăşeşte valoarea 20.
fişier text pentru stocarea soluţiei.
8. Algoritm
Iniţializăm variabilele n şi k, fişierul de ieşire, tabloul B.
Pasul 1. Cercetarea secvenţei curente
Se calculează numărul de unităţi (r) în secvenţa curentă B
Pasul 2. Prelucrarea soluţiei
Dacă r ≥ k, secvenţa curentă Beste înscrisă în fişierul de ieşire.
Pasul 3. verificarea prezenţei secvenţelor necercetate
Dacă r = n se închide fişierul de ieşire, apoi STOP.
Pasul 4. Generarea secvenţei următoare
Dacă B[ n] =0 atunci B[ n] ⇐ 1
în caz contrar: i ⇐ n
atât timp cât B[ i ] = 1 repetăm
B[ i ] ⇐ 0; i ⇐ i –1;
pentru indicele curent i B[ i ] ⇐ 1
10. Funcţii
f unct i on numara1: i nt eger;
var
s, j : i nt eger;
begi n
s: =0;
f or j : =1 t o n do s: =s+b[ j ] ;
numara1: =s;
end;
11. Proceduri
procedure scri e;
var j : i nt eger;
begi n
f or j : =1 t o n do wri t e ( f , b[ j ] ) ;
wri t el n( f ) ;
end;
procedure urmat or ( var x: secvent a01) ;
var j : i nt eger;
begi n j : =n;
whi l e x[ j ] =1 do
begi n x[ j ] : =0; j : =j - 1; end;
x[ j ] : =1;
end;
12. Blocul de calcul
begi n
readl n( n, k) ;
assi gn( f , ' OUT. TXT' ) ; rewri t e( f ) ;
f or i : =1 t o n do b[ i ] : =0;
repeat
r: = numara1;
i f r >= k t hen scri e;
i f r < n t hen urmat or( b) ;
unt i l r=n;
cl ose( f ) ;
end.
13. În concluzie deducem că avantajul
principal al algoritmilor bazaţi pe metoda
trierii constă în faptul că programele
respective sunt relativ simple, iar
depanarea lor nu necesită teste
sofisticate.
Editor's Notes
Mulţimea S nu va mai conţine elemente necercetate după generarea secvenţei formate doar din uintăţi