Program zistí akými kombináciami zásahov do terča sa dá dosiahnuť požadovaný počet bodov Z v pascale
Delphi & Pascal (česká wiki)
Kategorija: Programy zos Pascalu
Program: Terc.pas, Terclight.pas, Terc2.pas
Subor exe: Terc.exe, Terc2.exe
Subor ubuntu: Terc
Ukažka: Terc.txt, Terc2.txt
Program: Terc.pas, Terclight.pas, Terc2.pas
Subor exe: Terc.exe, Terc2.exe
Subor ubuntu: Terc
Ukažka: Terc.txt, Terc2.txt
Program zistí akými kombináciami zásahov do terča sa dá dosiahnuť požadovaný počet bodov Z. Určí všetky vektory P ( P[1] .. P[M] ) a počet zásahov do medzikružia. Nakoniec vypíše všetky možné riešenia a ich počet (0, 1, 2,
). Podrobný postup riešenia nájdete v Terc.txt.
Ako všade aj tu platí že sa dá naprogramovať jednodušia verzia TercLight.pas ktorá ale nieje taká výkonná.
Nakoniec ešte uverejňujem verziu Terc2.pas od prispievateľky s nickom Quetocek. Vďaka nej je k dispozícii aj dokumentácia.
Ako všade aj tu platí že sa dá naprogramovať jednodušia verzia TercLight.pas ktorá ale nieje taká výkonná.
Nakoniec ešte uverejňujem verziu Terc2.pas od prispievateľky s nickom Quetocek. Vďaka nej je k dispozícii aj dokumentácia.
{ Akymi kombinaciami zasahov sa da dosiahnut definovany pocet bodov } { Zadanie: } { - Pocet medzikruzi v terci M } { - Bodove hodnoty jednotlivych medzikruzi B[1] .. B[M] } { - Celkovy pocet vystrelov V } { - Celkovy pocet nastrielanych bodov v terci Z } program terc; uses crt,dos; const MAX_M=20; var m:integer; { pocet medzikruzi, globalna premenna } v:integer; { pocet vystrelov, globalna premanna } z:integer; { celkovy pocet nastrielanych bodov } i:integer; { pomocna premenna } poc:integer; { pocet rieseni } 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; { zistenie pociatocnych hodnot } Write('Zadaj pocet medzikruzi v terci (max=', MAX_M, '):'); ReadLn(m); for i:=1 to m do begin Write('Zadaj hodnotu medzikruzia B[',i,']='); ReadLn(b[i]); end; WriteLn; Write('Zadaj celkovy pocet vystrelov:'); ReadLn(v); Write('Zadaj pozadovany pocet nastrielanych bodov:'); ReadLn(z); { 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; { zhodnoti kolko nasiel rieseni } if( poc=0 )then WriteLn('Pre zadane hodnoty neexistuje ziadne riesenie.') else WriteLn('Celkovo najdene ', poc, ' krat.'); END.