Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Dobrý den, jaké jaké tahy s věží? :-) Nějaký slavný šachový problém? :-)
Offline
ne všechny tahy s věží které můžou nastat dělám program na inicializaci šachové partie a chtěl sem to dělat rekurzi a otestováním všechno možností co můžou nastat ale vím že maximální počet tahu co můžou nastat je 14 ... a však já jich budu muset udělat 28 .Jelikož nevím původní pozici .
Offline
↑ Mr.Pinker:
Nerozumím. Zkus přidat interpunkci a popiš problém podrobněji a srozumitelně. Uvědom si, že narozdíl od tebe vůbec nevíme, jaký problém řešíš.
Offline
Ale můžeme samozřejmě místo problému luštit zadání :-) Jen na problém pak už nezbyde :-)
Tak např. mne napadá, že věž má na prázdné šachovnici 14 možností se pohnout :-) Ale už mě nenapadá, co je "všech 28"? :-) Někdo nějaký tip? :-) Třeba, že mám dvě věže? :-) Na prázdné šachovnici? :-) Ale ne ve stejném řádku/sloupci? Ale jinak neznám pozici? :-) Jak zní otázka? :-)
Offline
↑ Pavel Brožek:
dělám program ,že na vstupu dostanu pozici bílého krále ,věž a jezdce a černého krále a mám zjistit že jestli sem schopný vynutit mat... pohyby jezdce a krále už sem nějak tak naprogramoval ,ale jde mi o to jestli i u věže budu muset naprogramovat jen 14 tahu a nebo všech 28 ....jelikož na začátku nevím jaký bude vstup u koně sem to udělal tam nevadilo ,kde bude tam třeba první tah sem udělal, když vstup bude [i,j] tak po tahu bude třeba [i+1,j+2] ted ale u tý věže nevím jak to mám udělat takhle krácenně ,jelikož tam musím ke každému indexu 7 přičít abych pokryl všechny když budu v levém dolním rohu ....a však když bude v pravém horním tak musím odečítat .
tak jestli neexistuje nějakej fígl ,jak to zkrátit ten počet tahů ,jelikož už takhle je složitost programu celkem velká ....
Offline
Podle toho, jak indexuješ šachovnici. Znáš funkci modulo? (konkrétně mod 8? :-)
Otázka je, zda je to skutečně největší problém toho algoritmu :-)
A ještě se dovolím zeptat, proč vynucování matu říkáš "inicializace šachové partie"? :-)
Offline
↑ claudia:
modulo mě zamozřejmě napadlo ale zároven já pak budu muset inicializovat ty tahy jestli je možné aby nastaly
či ne což mi pak modulo v tom udělám bych řekl u věže celkem dobrý chaos
Offline
↑ Mr.Pinker:
Žádal jsem tě, abys používal interpunkci, ale nezdá se, že bys to respektoval. Promiň, tohle se nedá číst, téma opouštím, claudia snad bude mít větší trpělivost.
Offline
No, vzhledem k tomu, že pan Růžovější má spoustu kladných bodů za pomoc jiným, zkusím neutéct hned :-) Ale také se přidám k prosbě - piš česky, gramaticky správně a hlavně srozumitelně.
Pro začátek bych potřebovala osvětlit význam věty "já pak budu muset inicializovat ty tahy jestli je možné aby nastaly".
Offline
no jelikož jako další funkci mám zjiťování zda-li může ten tah nastat nebo ne .
příklad stojím na [1,1] a chci se dostat na [7,1] což s věží samozřejmě není problém ,ale pak může tam nastat situace že třeba na [5,1] bude například můj kun a proto ten tah udělat nemohu
Offline
OK, nerozumím :-)
Ale to asi nevadí. Pokud tvrdíš, že problém zní "zjistit, jestli jsi schopen vynutit mat králem, jezdcem a věží", pak odpověď zní "ano". Za předpokladu, že jsi na tahu první. Je to možné dokonce i bez toho jezdce. Existuje na to algoritmus, který není tak těžké dohledat.
Offline
↑ claudia:
Já sem právě nemohl najít nic co by mi k tomu pomohlo tak sem to chtěl řešit pomocí rekurze že zkusím všechny možnosti s tím že to omezím na 5 tahů aby to nebylo tak náročný , jenže ted sem zjistil že nevím jak dál pohybovat s tou věží ...... Já to musím zjistit na omezenej počet tahu ten počet dostanu na vstupu
Offline
Dobře, pokud je to omezené na malý počet tahů, pak asi hrubé prohledávání možností dává smysl.
Takže rekurze je předpokládám taková, že předáváš pozici a počet zbývajících tahů. Pak zkoušíš postupně táhnout všemi třemi svými figurami a spustíš rekurzivně na nové pozice s umenšeným počtem zbývajících tahů (a pro všechny možnosti pohybu druhého krále).
Tahy věží nejsou složité. Řešení jsou různá. Nejjednodušší je asi zkoušet to postupně do všech čtyř směrů. Mám-li tedy věž na i-tém řádku a j-tém sloupci, tak zkusím:
a) táhnout nahoru
pro k od i-1 do 1
pokud na [k, j] není jiná figura
přesuň věž na [k, j]
volej rekurzivně
pokud na [k, j] je jiná figura
ukonči cyklus
b) táhnout dolu
pro k od i+1 do 8
...totéž
c) táhnout doleva
pro k od i-1 do 1
pokud na [i, k] není jiná figura
...analogicky
d) táhnout doprava
pro k od i+1 do 8
...totéž
-----
Takto rozhodně vždy vyzkouším nejvýše 14 tahů. Ač je to trochu rozvláčně naprogramováno. Výhodou je, že okamžitě vyfiltruješ ilegální tahy. Namísto abys nejprve vygeneroval všechny (např. tím přičítáním 1-7 mod 8) a pak filtroval, které jsou možné.
Offline
děkuji udělal sme to nějak obdobně, ale ted se potřebuji zeptat jestli nevíte, jak ověřit jestli někam můžu s bílým králem tedy jestli v okolí toho políčka kam chci jít není černý král
zatím sem pokročil takto
tohle sou tahy kone
procedure tahni
if tahy[1] then begin sacho[i,j]:=0 sacho[i+1,j+2] end else if tahy[2] then begin sacho[i,j]:=0 sacho[i+1,j-2]:=1 end else if tahy[3] then begin sacho[i,j]:=0 sacho[i+2,j-1]:=1 end else if tahy[4] then begin sacho[i,j]:=0 sacho[i+2,j+1]:=1 end else if tahy[5] then begin sacho[i,j]:=0 sacho[i-2,j-1]:=1 end else if tahy[6]then begin sacho[i,j]:=0 sacho[i-2,j+1]:=1 end else if tahy[7]then begin sacho[i,j]:=0 sacho[i-1,j-2]:=1 end else if tahy[8]then begin sacho[i,j]:=0 sacho[i-1,j+2]:=1 end else
tahy krale
if tah[9]= then begin sacho[i,j]:=0 sacho[i,j+1]:=2; end else if tah[10]= then begin sacho[i,j]:=0 sacho[i+1,j+1]:=2; end else if tah[11]= then begin sacho[i,j]:=0 sacho[i+1,j]:=2; end else if tah[12]= then begin sacho[i,j]:=0 sacho[i+1,j-1]:=2; end else if tah[13]= then begin sacho[i,j]:=0 sacho[i,j-1]:=2; end else if tah[14]= then begin sacho[i,j]:=0 sacho[i-1,j-1]:=2; end else if tah[15]= then begin sacho[i,j]:=0 sacho[i-1,j]:=2; end else if tah[16]= then begin sacho[i,j]:=0 sacho[i-1,j+1]:=2; end
tahy veze
if tah[17] then begin sacho[i,j]:=0 sacho[i-7,j]:=3; end else if tah[18] then begin sacho[i,j]:=0 sacho[i-6,j]:=3; end else if tah[19] then begin sacho[i,j]:=0 sacho[i-5,j]:=3; end else if tah[20] then begin sacho[i,j]:=0 sacho[i-4,j]:=3; end else if tah[21] then begin sacho[i,j]:=0 sacho[i-3,j]:=3; end else if tah[22] then begin sacho[i,j]:=0 sacho[i-2,j]:=3; end else if tah[23] then begin sacho[i,j]:=0 sacho[i-1,j]:=3; end else if tah[24] then begin sacho[i,j]:=0 sacho[i+1,j]:=3; end else if tah[25] then begin sacho[i,j]:=0 sacho[i+2,j]:=3; end else if tah[26] then begin sacho[i,j]:=0 sacho[i+3,j]:=3; end else if tah[27] then begin sacho[i,j]:=0 sacho[i+4,j]:=3; end else if tah[28] then begin sacho[i,j]:=0 sacho[i+5,j]:=3; end else if tah[29] then begin sacho[i,j]:=0 sacho[i+6,j]:=3; end else if tah[30] then begin sacho[i,j]:=0 sacho[i+7,j]:=3; end else if tah[31] then begin sacho[i,j]:=0 sacho[i,j+1]:=3; end else if tah[32] then begin sacho[i,j]:=0 sacho[i,j+2]:=3; end else if tah[33] then begin sacho[i,j]:=0 sacho[i,j+3]:=3; end else if tah[34] then begin sacho[i,j]:=0 sacho[i,j+4]:=3; end else if tah[35] then begin sacho[i,j]:=0 sacho[i,j+5]:=3; end else if tah[36] then begin sacho[i,j]:=0 sacho[i,j+6]:=3; end else if tah[37] then begin sacho[i,j]:=0 sacho[i,j+7]:=3; end else if tah[38] then begin sacho[i,j]:=0 sacho[i,j-1]:=3; end else if tah[39] then begin sacho[i,j]:=0 sacho[i,j-2]:=3; end else if tah[40] then begin sacho[i,j]:=0 sacho[i,j-3]:=3; end else if tah[41] then begin sacho[i,j]:=0 sacho[i,j-4]:=3; end else if tah[42] then begin sacho[i,j]:=0 sacho[i,j-5]:=3; end else if tah[43] then begin sacho[i,j]:=0 sacho[i,j-6]:=3; end else if tah[44] then begin sacho[i,j]:=0 sacho[i,j-7]:=3; end
a toto sou ověřování
tahy for i=1 to 44 do tahy[i]:=false ; if (i<8) and (j<7) and (sacho[i+1,j+2]=0); tahy[1]:=true ; if (i<8) and (j>2) and (sacho[i+1,j-2]=0); tahy[2]:=true ; if (i<7) and (j>1) and (sacho[i+2,j-1]=0); tahy[3]:=true ; if (i<7) and (j<8) and (sacho[i+2,j+1]=0); tahy[4]:=true ; if (i>2) and (j>1) and (sacho[i-2,j-1]=0); tahy[5]:=true; if (i<8) and (j<7) and (sacho[i-2,j+1]=0); tahy[6]:=true; if (i>1) and (j>2) and (sacho[i-1,j-2]=0); tahy[7]:=true; if (i<8) and (j<7) and (sacho[i-2,j-1]=0); tahy[8]:=true; if (j<8) and (sacho[i,j+1]=0) and ; tahy[9]:=true;
a ted nevím jak dál právě to ošetřit
Offline
↑ Mr.Pinker:
Asi by to chtělo ten kód rozložit do menších celků :-) Tohle je human-unreadable :-)
Offline
↑ Mr.Pinker:
A co to má dělat? :-)
Co značí obsahuje pole tahy[] popř. pole tah[]? Co je pole sacho[]? Proč tam někde nepoužiješ nějaký komentář, popř. cyklus. Proč jsou některé příkazy na dvaceti různých řádcích? Tohle není program, to je nevkus :-)
A proč u té věže nepoužiješ to, co jsem včera pacně vysvětlovala?
Offline
↑ claudia:
tahy[] a tah[] má bejt to jisté a má to bejt booleanové pole jestli ten tah může nastat a nebo ne . to je to co ověřuju ,přišel sem jak na koně ,ale u krále nevím jak zajistit ,aby na okolních pozicích cílového pole nebyl král.... využil sem toho v ouzkoušení tahu s tou věží ,sacho je šachovnice na které probíhá hra.
Offline