Documente Academic
Documente Profesional
Documente Cultură
Fie P o problem, soluia creia se afl printre elementele mulimii S cu un numr finit de elemente.
Schema de aplicare
STAR T
x s1 x satisface condiia problemei Includem x n soluie n S exist elemente necercetate d x un element necercetat din S
a n u d a n u
STO P
Problem prototip
Se consider numerele naturale din mulimea {1, 2, 3, ..., n}. S se determine toate elementele acestei mulimi, pentru care suma cifrelor este egal cu un numr dat m.
Schema de rezolvare
Pentru i de la 1 pn la n: Se calculeaz suma cifrelor numrului i. Dac suma cifrelor este egal cu m includem i n soluie Particulariti de implementare Generarea i cercetarea consecutiv a elementelor mulimii S.
Verificarea apartenenei elementului cercetat si la soluie Plasarea elementului curent n soluie Generarea urmtorului element al mulimii (dac e necesar) Problem S se scrie un program care determin toate secvenele binare de lungime n, fiecare din ele coninnd nu mai puin de k cifre de 1. Intrare: numere naturale n, 1<n<20, i k, k<n, se citesc de la tastatur. Ieire: fiecare linie a fiierului text OUT.TXT va conine cte o secven binar distinct, ce corespunde condiiilor din enunul problemei.
Analiza problemei
Numrul secvenelor binare de lungime n este 2n, finit. (vezi: Informatica, manual pentru clasa X) Prin urmare, pentru problema dat poate fi aplicat metoda trierii.
Modelul matematic
000 00 = 0; ...
n
000 01 = 1; ...
n
00 ... 010 = 2;
n
Elementele mulimii S pot fi interpretate ca numere {0, 1, 2, ..., 2n-1}, reprezentate pe n poziii binare. Pentru generarea consecutiv a secvenelor binare se va utiliza formula:
111 ... 11 = 2 n 1;
n
s0 = 0; si = si-1 + 1;
Separarea subproblemelor
Generarea secvenelor binare de lungime n cu r, r>k uniti
Structuri de date
tablou unidimensional cu n elemente, ce pot primi valoarea 0 sau 1. Pentru problema propus n nu depe valoarea 20. fiier text pentru stocarea soluiei.
Algoritm
Iniializm variabilele n i k, fiierul de ieire, tabloul B. Pasul 1. Cercetarea secvenei curente
Dac Dac
r k, secvena curent B este nscris n fiierul de ieire. r = n se nchide fiierul de ieire, apoi STOP.
in
att timp ct B[i]
B[i]
DECLARATII: Program Triere; const nmax=20; type secventa01= array[1..nmax] of 0..1; var b:secventa01; r,i,n,k:integer; f:text; FUNCTII: function numara1:integer; var s,j:integer; begin s:=0; for j:=1 to n do s:=s+b[j]; numara1:=s; end; PROCEDURRI: procedure scrie; var j: integer; begin for j:=1 to n do write (f,b[j]); end;
writeln(f);
procedure urmator (var x:secventa01); var j:integer; begin j:=n; while x[j]=1 do begin x[j]:=0; j:=j-1; end; end;
x[j]:=1;
BLOCUL DE CALCUL: begin readln(n,k); assign(f,'OUT.TXT');rewrite(f); for i:=1 to n do b[i]:=0; repeat r:= numara1; 4
if r >= k then scrie; if r < n then urmator(b); until r=n; close(f); end.