コード例 #1
15
ファイル: Lotto.php プロジェクト: zsebtanar/zsebtanar_v4
 function Generate($level)
 {
     if ($level <= 3) {
         $max = rand(4, 5);
         $pull = rand(2, 3);
     } elseif ($level <= 6) {
         $max = rand(6, 8);
         $pull = rand(3, 5);
     } else {
         $max = rand(9, 12);
         $pull = rand(4, 7);
     }
     $pull_text = [2 => 'kettőt', 3 => 'hármat', 4 => 'négyet', 5 => 'ötöt', 6 => 'hatot', 7 => 'hetet'];
     $numbers = range(1, $max);
     $chosen = $numbers;
     shuffle($chosen);
     $chosen = array_slice($chosen, 0, $pull);
     sort($chosen);
     // // Original exercise
     // $max = 5;
     // $pull = 3;
     // $numbers = [1,2,3,4,5];
     // $chosen = [2,3,5];
     $question = 'Az osztály lottót szervez, melyben az $' . implode(',', $numbers) . '$ számok közül húznak ki ' . $pull_text[$pull] . '. Tamás ' . The($chosen[0]) . ' $' . implode(',', $chosen) . '$ számokat jelöli be a szelvényen. Számítsa ki annak a valószínűségét, hogy Tamásnak telitalálata lesz!';
     $all = binomial_coeff($max, $pull);
     $page[] = 'Az összes lehetséges húzás száma:$${' . $max . '\\choose ' . $pull . '}=' . $all . '$$';
     $page[] = '<b>Megjegyzés</b>: az eredményt számológéppel a <b>nCr</b> gombbal lehet kiszámolni:<br /><div class="text-center"><kbd>' . $max . '</kbd> <kbd>Shift</kbd> <kbd>nCr</kbd> <kbd>' . $pull . '</kbd> <kbd>=</kbd></div>';
     $page[] = 'A kedvező esetek száma $1$.';
     $page[] = 'A keresett valószínűség a kedvező és összes eset hányadosa, tehát <span class="label label-success">$\\frac{1}{' . $all . '}$</span>.';
     $hints[] = $page;
     $correct = array(1, $all);
     $solution = '$\\frac{1}{' . $all . '}$';
     return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints, 'type' => 'fraction');
 }
コード例 #2
0
 function Hints($n, $k)
 {
     $binom = binomial_coeff($n, $k);
     $page[] = 'Fogalmazzuk át a kérdést: hányféleképpen választhatunk ki $' . $k . '$ különböző számot a halmaz $' . $n . '$ eleme közül?';
     $page[] = 'Ezt a számot az <b>ismétlés nélküli kombináció</b> segítségével tudjuk kiszámolni.';
     $page[] = '$' . $n . '$ elem közül $' . $k . '$ különböző darabot ' . '${' . $n . '\\choose ' . $k . '}$-féleképpen (ejtsd: <i>"' . $n . ' alatt a ' . $k . '"</i>) lehet kiválasztani.';
     $page[] = '$${' . $n . '\\choose ' . $k . '}=\\frac{' . $n . '!}{' . $k . '!(' . $n . '-' . $k . ')!}=\\frac{' . strval(fact($n)) . '}{' . strval(fact($k)) . '\\cdot' . strval(fact($n - $k)) . '}=' . $binom . '$$';
     $page[] = '<b>Megjegyzés</b>: az eredményt számológéppel a <b>nCr</b> gombbal lehet kiszámolni:<div class="text-center"><kbd>' . $n . '</kbd> <kbd>Shift</kbd> <kbd>nCr</kbd> <kbd>' . $k . '</kbd> <kbd>=</kbd></div>';
     $page[] = 'Tehát a részhalmazok száma <span class="label label-success">$' . $binom . '$</span>.';
     $hints[] = $page;
     return $hints;
 }
コード例 #3
0
ファイル: Kerteszet.php プロジェクト: zsebtanar/zsebtanar_v4
 function Generate($level)
 {
     $flower = rand($level, 2 * $level);
     $all = $flower + rand(1, 2);
     $p = rand(80, 95) / 100;
     // // Original exercise
     // $flower = 8;
     // $all 	= 10;
     // $p 		= 0.91;
     $question = 'A kertészetben a sok virághagymának csak egy része hajt ki: $' . round2($p) . '$ annak a valószínűsége, hogy egy elültetett virághagyma kihajt. Számítsa ki annak a valószínűségét, hogy $' . $all . '$ darab elültetett virághagyma közül legalább $' . $flower . '$ kihajt! Válaszát három tizedesjegyre kerekítve adja meg!';
     $text = 'Ha $' . $all . '$ virághagyma közül legalább $' . $flower . '$ hajt ki, az azt jelenti, hogy ';
     for ($i = $flower; $i <= $all; $i++) {
         $text .= '$' . $i . '$';
         if ($i == $all - 1) {
             $text .= ' vagy ';
         } elseif ($i == $all - 2) {
             $text .= ', ';
         }
     }
     $text .= ' virághagyma hajt ki.';
     $page[] = $text;
     $page[] = 'Vizsgáljuk meg ezeket az eseteket külön-külön!';
     $hints[] = $page;
     $order = 1;
     for ($i = $flower; $i <= $all; $i++) {
         $p_i = binomial_coeff($all, $i) * pow($p, $i) * pow(1 - $p, $all - $i);
         $page = [];
         $page[] = '<b>' . $order . '. eset:</b> $' . $all . '$ virághagyma közül $' . $i . '$ hajt ki.';
         $page[] = '$' . $all . '$ virághagyma közül $' . $i . '$-' . Dativ($i) . ' összesen ${' . $all . '\\choose ' . $i . '}$-féleképpen lehet kiválasztani.';
         $page[] = 'Annak a valószínűsége, hogy ' . The($i) . ' $' . $i . '$ hagyma kihajt: $' . round2($p, 4) . '^{' . $i . '}$.';
         $page[] = 'Annak a valószínűsége, hogy ' . The($all - $i) . ' $' . strval($all - $i) . '$ hagyma nem hajt ki: $(1-' . round2($p, 4) . ')^{' . strval($all - $i) . '}$.';
         $page[] = 'Így ennek az esetnek a valószínűsége összesen:$${' . $all . '\\choose ' . $i . '}\\cdot' . round2($p, 4) . '^{' . $i . '}\\cdot(1-' . round2($p, 4) . ')^{' . strval($all - $i) . '}\\approx' . round2($p_i, 4) . '$$';
         $hints[] = $page;
         $p_all1[] = round1($p_i, 4);
         $p_all2[] = round2($p_i, 4);
         $order++;
     }
     $hints[][] = 'A keresett valószínűség tehát $' . implode('+', $p_all2) . '=' . round2(array_sum($p_all1), 5) . '$, aminek a három tizedesjegyre kerekített értéke <span class="label label-success">$' . round2(array_sum($p_all1), 3) . '$</span>.';
     $correct = round1(array_sum($p_all1), 3);
     $solution = '$' . $correct . '$';
     return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints);
 }
コード例 #4
0
function binomial($S, $Q, $k)
{
    $b_coeff = binomial_coeff($S, $k);
    return $b_coeff * pow($Q, $k) * pow(1 - $Q, $S - $k);
}
コード例 #5
0
    function Generate($level)
    {
        if ($level <= 3) {
            $male = rand(2, 3);
            $female = $male + rand(1, 2);
        } elseif ($level <= 6) {
            $male = rand(3, 4);
            $female = $male + rand(2, 3);
        } else {
            $male = rand(4, 5);
            $female = $male + rand(3, 4);
        }
        // // Original exercise
        // $male = 4;
        // $female = 5;
        $total = $male + $female;
        $min = $male - 1;
        $question = 'Egy állatkert a tigrisek fennmaradása érdekében tenyésztő programba kezd. Beszereznek $' . $male . '$ hím és $' . $female . '$ nőstény kölyöktigrist, melyeket egy kisebb és egy nagyobb kifutóban kívánnak elhelyezni a következő szabályok mindegyikének betartásával:
			<ol type="I">
				<li>' . NumText($min) . By($min) . ' kevesebb tigris egyik kifutóban sem lehet;</li>
				<li>a nagyobb kifutóba több tigris kerül, mint a kisebbikbe;</li>
				<li>mindkét kifutóban hím és nőstény tigrist is el kell helyezni;</li>
				<li>egyik kifutóban sem lehet több hím, mint nőstény tigris.</li>
			</ol>
			Hányféleképpen helyezhetik el a $' . $total . '$ tigrist a két kifutóban?<br />(A tigriseket megkülönböztetjük egymástól, és két elhelyezést eltérőnek tekintünk, ha van olyan tigris, amelyik az egyik elhelyezésben más kifutóban van, mint a másik elhelyezésben.)';
        for ($i = $min; $i <= $total; $i++) {
            if ($i == $min) {
                $page[] = 'Válogassuk szét az eseteket aszerint, hogy a kisebbik kifutóban hány tigris van!';
            } else {
                $page = [];
            }
            $page[] = '<b>' . strval($i - $min + 1) . '. eset:</b> a kisebbik kifutóban $' . $i . '$ tigris van, a nagyobbikban pedig $' . strval($total - $i) . '$.' . ($i == $min ? ' (Ennél kevesebb az I) feltétel miatt sehol sem lehet.)' : '');
            if ($i >= $total - $i) {
                $page[] = 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert a II) feltétel szerint a kisebb kifutóban kevesebb tigrisnek kell lennie, mint a nagyobbikban. (És itt meg is állhatunk, mert ha tovább növeljük a tigrisek számát, ez a feltétel úgy sem fog teljesülni.)';
                $hints[] = $page;
                break;
            }
            $page[] = 'Most válogassuk szét az eseteket aszerint, hogy ' . The($i) . ' $' . $i . '$ tigris közül hány nőstény!';
            for ($j = 0; $j <= $i; $j++) {
                $text = '<ul><li><i>' . strtoupper(The($i)) . ' $' . $i . '$ tigris közül $' . $j . '$ hím és $' . strval($i - $j) . '$ nőstény.</i><br />';
                if ($i == 0 || $j == 0) {
                    $text .= 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert a III) feltétel miatt nősténynek és hímnek is kell lennie a kifutóban.';
                } elseif ($j > $i - $j) {
                    $text .= 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert a IV) feltétel miatt nem lehet a kifutóban több hím, mint nőstény.';
                } elseif ($male - $j > $female - $i + $j) {
                    $text .= 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert ha ez azt jelentené, hogy a másik kifutóban $' . strval($male - $j) . '$ hím és $' . strval($female - $i + $j) . '$ nőstény van, viszont a IV) feltétel miatt nem lehet a kifutóban több hím, mint nőstény.';
                } else {
                    $female_opt = binomial_coeff($female, $i - $j);
                    $male_opt = binomial_coeff($male, $j);
                    $answers[] = $female_opt * $male_opt;
                    $text .= 'Ez az eset <span class="label label-success">jó</span>, mert minden feltételnek megfelel.
						<ul>
							<li>$' . $male . '$ hím közül $' . $j . '$-' . Dativ($j) . ' összesen ${' . $male . '\\choose ' . $j . '}=' . $male_opt . '$-féleképpen lehet kiválasztani;</li>
							<li>$' . $female . '$ nőstény közül $' . strval($i - $j) . '$-' . Dativ($i - $j) . ' összesen ${' . $female . '\\choose ' . strval($i - $j) . '}=' . $female_opt . '$-féleképpen lehet kiválasztani;</li>
							<li>Ha már tudjuk, hogy a kisebbik kifutóban melyik tigrisek vannak, akkor már azt is tudjuk, hogy a nagyobbikban melyikek vannak, tehát ezt nem kell külön kiszámolni.</li>
							<li>Ebben az esetben összesen $' . $male_opt . '\\cdot' . $female_opt . '=$<span class="label label-info">$' . strval($female_opt * $male_opt) . '$</span> különböző lehetőség.</li>
						</ul>';
                }
                $text .= '</li></ul>';
                $page[] = $text;
            }
            $hints[] = $page;
        }
        $page = [];
        $page[] = 'Tehát összesen $' . implode('+', $answers) . '=$<span class="label label-success">$' . array_sum($answers) . '$</span>-féleképpen lehet elhelyezni a tigriseket a két kifutóban.';
        $hints[] = $page;
        $correct = array_sum($answers);
        $solution = '$' . $correct . '$';
        return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints);
    }
コード例 #6
0
ファイル: test_math.php プロジェクト: pkeane/stvtools
<?php

function binomial_coeff($n, $k)
{
    $j = $res = 1;
    if ($k < 0 || $k > $n) {
        return 0;
    }
    if ($n - $k < $k) {
        $k = $n - $k;
    }
    while ($j <= $k) {
        $res *= $n--;
        $res /= $j++;
        //$res = bcmul($res, $n--);
        //$res = bcdiv($res, $j++);
    }
    return $res;
}
print binomial_coeff(455, 33);