b:array [1..MAX_M] of integer; { hodnoty medzikruzi }
vv:array [1..MAX_M] of integer; { vektor riesenia }
{ najtazsia cast programu }
{ bude generovat jednotlive kombinacie zasahov }
function DalsiVektor:boolean;
var i:integer;
begin
i:=m; { budeme pouzivat tuto premennu }
vv[i]:=vv[i]+1; { zvysim hodnotu posledneho }
DalsiVektor:=true;
{ pokial mi presahuje pocet vystrelov v }
{ zmenim na 0 a zvacsim dalsie medzikruzie v poradi }
while( vv[i]>v ) do
begin
vv[i]:=0;
{ test ci mozem zmenit dalsie }
if( i=1 )then
begin
DalsiVektor:=false; { uz som na konci }
end
else
begin
i:=i-1; { menim dalsie medzikruzie }
vv[i]:=vv[i]+1;
end;
end; { while }
end;
{ funkcia zisti celkovy pocet vystrelov }
function PocetVystr:integer;
var poc:integer;
begin
poc:=0;
for i:=1 to m do
poc:=poc+ vv[i];
PocetVystr:=poc;
end;
{ funkcia zisti kolko ma vektor bodov }
function PocetBodov:integer;
var i:integer;
vys:integer;
begin
vys:=0;
for i:=1 to m do
vys:=vys+ vv[i]*b[i];
PocetBodov:=vys;
end;
{ vypise pozadovany vektor }
procedure VypisVektor;
var i:integer;
begin
Write('(');
for i:=1 to m do
begin
if (i=m) then
Write(vv[i],')')
else
Write(vv[i],',');
end;
WriteLn;
end;
BEGIN
{ uvod }
ClrScr;
WriteLn('Program na zistenie kombinacii zasahov pre dosiahnutie poctu bodov.');
WriteLn;
{ nastavim default hodnoty - znulujem }
for i:=1 to MAX_M do vv[i]:=0;
poc:=0;
{ zacneme riesit ulohu }
WriteLn;
while( DalsiVektor ) do
begin
{ kontrola vektora }
if( PocetVystr=v ) then { pocet vystrelov OK }
if( PocetBodov=z )then { pocet bodov OK }
begin
inc(poc);
Write('Riesenie ',poc:2,': ');
VypisVektor;
end;
end;