program rozklad; const MAX = 35; F = 3; { format } type CISLO = 1..MAX; var VYST : text; S : string; Pocet : longint; N : CISLO; A : array [CISLO] of integer; procedure tisk(Mez:integer); const F = 3; var I:integer; begin write(VYST,A[1]:F); for I:=2 to Mez do write(VYST,' +',A[I]:F); writeln(VYST); end; procedure rozk(Zbyva,MaxScit,ActInd : integer); { vyplni pole A[ActInd] az A[Konec] rozkladem } { cisla Zbyva, muze pouzit pouze scitance mensi } { nebo rovne parametru MaxScit } var I:integer; begin if Zbyva = 0 then begin Pocet:=Pocet+1; write(VYST,Pocet:5,':'); tisk(Actind-1); end else begin if MaxScit>Zbyva then MaxScit:=Zbyva; for I:=MaxScit downto 1 do begin A[ActInd]:=I; rozk(Zbyva-I,I,ActInd+1); end; end; end; begin writeln('Zadej jmeno vystupniho souboru'); readln(S); assign(VYST,S); rewrite(VYST); while not eof do begin readln(N); writeln(VYST,'-----------',N,'-----------'); Pocet:=0; rozk(N,N-1,1); writeln('Pro cislo ', N:3, ' existuje ', Pocet:5, ' rozkladu'); writeln(VYST,'Pro cislo ', N:3, ' existuje ', Pocet:5, ' rozkladu'); end; end.