Autor Zpráva
gogy27
Profil
Robim si taku mensiu online hru typu penalty futbalove. nejde teraz o to ale newiem ako spravit 2-3 veci.

1. budem mat tam okolo 50 tymov mozno postupne aj viac a newiem ako spravit ich zaradovanie do tabulky. v jednej tabulke bude 12 muzstiev a budu sa postupovat zostupovat atd.. a teraz ako by ste riesili prave tieto 2 veci. Odohra sa 22 zapasov a po nich bude tzv.: play-off s uz iba 8 muzstvami a tie spodne 2 budu vypadavat do nizsej ligy (tabulky) a z nizsej ligy budu finalisti play-off postupovat) aky by ste spravili na toto script?

2. ako spravit vylosovanie zapasov. Aby som nemusel vypisovat rucne kazdeho s kazdym a vo viacerych tabulkach. Aky by ste spravili na toto script?

Dakujem a budem vdacny kazdemu zapasu
Joker
Profil
gogy27
Odohra sa 22 zapasov a po nich bude tzv.: play-off s uz iba 8 muzstvami a tie spodne 2 budu vypadavat do nizsej ligy (tabulky) a z nizsej ligy budu finalisti play-off postupovat) aky by ste spravili na toto script?
Nevidím v tom nějaký extra zádrhel. Prostě na základě nějakých kritérií (která jste nám neřekl) se vybere daný počet nejlepších a ti postoupí?
S čím přesně je problém?

2. ako spravit vylosovanie zapasov. Aby som nemusel vypisovat rucne kazdeho s kazdym a vo viacerych tabulkach. Aky by ste spravili na toto script?
Každý s každým není rozlosování, ne? :-)
To jsou prostě jen dva cykly v sobě: pro každý existující tým A udělej: pro každý existující tým B: pokud B není zároveň A, založ zápas A vs. B
...takhle by to bylo, pokud se hrají i odvety, tj. hraje třeba jednička s desítkou a pak zase desítka s jedničkou.
Pokud se odvety nehrají, tj. každý s každým jen jeden zápas, tak: pro každý tým A od prvního do předposledního udělej: pro každý tým B od A-tého do posledního udělej: pokud A není zároveň B, založ zápas A vs B.
Aesir
Profil
gogy27:
2. ako spravit vylosovanie zapasov. Aby som nemusel vypisovat rucne kazdeho s kazdym a vo viacerych tabulkach.

To je poměrně jednoduchá kombinatorika.
gogy27
Profil
2. ako spravit vylosovanie zapasov. Aby som nemusel vypisovat rucne kazdeho s kazdym a vo viacerych tabulkach. Aky by ste spravili na toto script?
Každý s každým není rozlosování, ne? :-)
To jsou prostě jen dva cykly v sobě: pro každý existující tým A udělej: pro každý existující tým B: pokud B není zároveň A, založ zápas A vs. B
...takhle by to bylo, pokud se hrají i odvety, tj. hraje třeba jednička s desítkou a pak zase desítka s jedničkou.

mohol by si mi to ukazat na nazornom priklade ?

Nevidím v tom nějaký extra zádrhel. Prostě na základě nějakých kritérií (která jste nám neřekl) se vybere daný počet nejlepších a ti postoupí?
S čím přesně je problém?


No samozrejme to bude podla bodov a je problem s prikazom pre premiestnenie poslednych dvoch tymov z nadradenej (vyssej) tabulky do nizsej a naopak.
gogy27
Profil
Aesir
jj wem ze kombinatorika tam je vyuzivane ale nwm ju dat do cyklu
Aesir
Profil
gogy27:
jj wem ze kombinatorika tam je vyuzivane ale nwm ju dat do cyklu

Jak psal již Joker, jsou to dva vnořené cykly. První iteruje tolikrát, kolik je počet kol. Druhý tolikrát, kolik je (počet zápasů za kolo - 1). Konkrétní algoritmus je popsaný na wikipedii. Je to sice anglicky, ale pochopitelné je to, podle mě, i bez její znalosti. Dobře je tam popsán i problém s lichým počtem týmu a jak jej řešit.

V nejhorším si vzpomeňte na hru "chodí pešek okolo", však je to skoro to samé :)
gogy27
Profil
$i = 1
$tym = $tym_1 //bude vytiahnuty z databazy
while ($i <= 12) {
if ($i = 1){
$i++
}
else
echo = "$tym : $tym_$i";
}

Takto nejako?

btw: potom to bude pokracovat pre ostatne tymy samozrejme
Aesir
Profil
gogy27:
Za prvé je ta ukázka syntakticky špatně a za druhé jste vykouzlil krásný nekonečný cyklus ($i bude na konci každého průchodu rovna 2).
Ani jste to nezkusil spustit, že? :)
gogy27
Profil
Aesir
to bola len nazorna ukazka na rychlovku ze ci na to dobre idem samozrejme ze som na konci zabudol dat $i++ atd.. ale to bolo iba nazorne ze ci nejak takto sa to ma robit
Aesir
Profil
gogy27:
Podle mého na to jdete špatně. Já bych to viděl nějak takto:

$pocetTymu = 13;  
$n = (($pocetTymu & 1) == 0) ? $pocetTymu : $pocetTymu + 1;

$soupiska = array();
for ($i = 1; $i <= ($n - 1); $i++) {
    if (($pocetTymu & 1)==0)
        $soupiska[$i][] = "$i - $n";
      
    for ($j = 1; $j < ($n / 2); $j++) {
        $tym1 = (($n - $j + $i - 2) % ($n - 1)) + 1;
        $tym2 = (($i + $j - 1) % ($n - 1)) + 1;
        $soupiska[$i][] = "$tym1 - $tym2";
    }
}
print_r($soupiska);
gogy27
Profil
Aesir
prosimta mohol by si to nejak ten tvoj script okomentovat lebo v php nesom az zas taky skuseny
Aesir
Profil
gogy27:
Čemu konkrétně nerozumíte? Je to poze přepis odkazovaného postupu do PHP.
Výsledné pole $soupiska má cca tuto strukturu:
array (
    číslo kola => array (
            číslo zápasu => číslo týmu 1 - číslo týmu 2,
            ....
        ),
    ....
);
gogy27
Profil
Aesir
co robi toto?
$n = (($pocetTymu & 1) == 0) ? $pocetTymu : $pocetTymu + 1;

naco tam pouzivas a co teda robi tento znak &
Aesir
Profil
gogy27:
To je bitový operátor AND, používám ho zde ke zjištění, zda je počet týmu lichý či sudý.
To jsou ale naprosté základy, nebylo by lepší se je nejdříve naučit, než začnete programovat?
Joker
Profil
Aesir
To jsou ale naprosté základy, nebylo by lepší se je nejdříve naučit, než začnete programovat?
Nebyl bych tak přísný, to, že logickým součinem proměnné s jedničkou lze zjistit zda je sudá nebo lichá, je IMHO už dost pokročilá znalost.
Ale je fakt, že mezi základní znalosti patří alespoň poznat že to je operátor a podívat se na něj do manuálu
Aesir
Profil
Joker
Nebyl bych tak přísný, to, že logickým součinem proměnné s jedničkou lze zjistit zda je sudá nebo lichá, je IMHO už dost pokročilá znalost.
Tak to se omlouvám, vycházel jsem z toho, že ve všech způsobech výuky programování, které znám, se řadí výuka logických operací/členů před samotnou výuku algoritmů apod.
gogy27
Profil
som vedel ze to je operator ale nevedel som naco je tam pouzity :) zatial dakujem a ked budem mat nejaky problem napisem tu
gogy27
Profil
Joker este by som bol zvedavy ako by si to riesil ty ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: