Evo ga. Ova procedura pisiniz bi mogla da ima samo 3 reda kada ne bi sve ispisane nizove pamtila, i pri svakom sledecem pozivu proveravala da li je vec isti ispisan na ekran.
Code:
const
MaxN=100;
type
niz = array[1..MaxN] of integer;
var
a: niz;
pam:array[1..200] of niz;
poz,i,n:integer;
procedure pisiniz(nz: niz;n:integer);
var
i,j: integer;
forma:niz;
nadjen, isti:boolean;
begin
for i := n+1 to maxn do
forma[i]:=0;
for i := 1 to n do
forma[i]:=nz[i];
nadjen := false;
for i := 1 to poz do
begin
isti := true;
for j := 1 to maxn do
isti:=isti and (pam[i,j]=forma[j]);
nadjen := nadjen or isti;
end;
if not nadjen then
begin
inc(poz);
for i := 1 to maxn do
pam[poz,i]:=forma[i];
for i :=1 to n do
write(nz[i]);
writeln;
end;
end;
procedure razvoj(a: niz; duz:integer);
var
pa:niz;
i,j:integer;
begin
for i:= 1 to duz - 1 do
begin
for j := 1 to i-1 do
pa[j]:= a[j];
pa[i]:=a[i]+a[i+1];
for j:= i+2 to duz do
pa[j-1]:=a[j];
pisiniz(pa, duz-1);
if (duz > 3) and ((i mod 2)=1) then
razvoj(pa,duz-1);
end;
end;
begin
write('Unesi n = ');
readln(n);
for i := 1 to n do
a[i]:= 1;
pisiniz(a,n);
razvoj(a, n);
poz:=0;
readln;
end.