{ tieto 2 polia su zaroven globalnymi polami }
{ do pola vv si odovzdavaju jednotlive funkcie vygenerovane hodnoty }
b:array [1..MAX_M] of integer; { hodnoty medzikruzi }
vv:array [1..MAX_M] of integer; { vektor riesenia }
{ skolonovanie slova riesenie, slovencina moja }
function Sklon(poc:integer):string;
begin
case poc of
1: Sklon:='riesenie';
2: Sklon:='riesenia';
3: Sklon:='riesenia';
4: Sklon:='riesenia';
else
Sklon:='rieseni';
end;
end;
{ funkcia zisti celkovy pocet vystrelov }
function PocetVystr(m:integer):integer;
var poc:integer;
begin
poc:=0;
for i:=1 to m do
poc:=poc+ vv[i];
PocetVystr:=poc;
end;
{ najtazsia cast programu }
{ bude generovat jednotlive kombinacie zasahov }
{ POSTUP: }
{ -najdem od zadu posledne cislo vo vektore, ktore nema nulu }
{ -od tohoto cisla odpocitam 1 }
{ -pole za tymto cislom dopocitam do poctu vystrelov v }
{ -ak vsetky maju nulu koncim }
function DalsiVektor(m,v:integer):boolean;
var i:integer;
begin
vv[m]:=0;
{ najprv najdem od zadu posledne ktore nema nulu }
i:=m-1;
while((i>1) and (vv[i]=0)) do
i:=i-1;
{ je koniec? }
if((i=1) and (vv[i]=0))then
begin
DalsiVektor:=false;
end
else
begin
{ od tohoto cisla odpocitam 1 }
vv[i]:=vv[i]-1;
{ nastavim default hodnoty - znulujem }
for i:=1 to MAX_M do vv[i]:=0;
vv[1]:=v; { pocet vystrelov dam do prveho pola }
poc:=0;
{ zacneme riesit ulohu }
WriteLn;
while( DalsiVektor(m,v)) do
begin
{ kontrola vektora - pocet bodov OK }
if( PocetBodov(m)=z )then
begin
inc(poc);
Write('Riesenie ',poc:2,': ');
VypisVektor(m);
end;
end;