function Generate($level) { $m = pow(-1, rand(1, 2)) * rand(1, 2); $b = rand(-5, 5); $A[0] = pow(-1, rand(1, 2)) * rand(1, 10); // Ax != 0 $A[1] = $A[0] * $m + $b; $B[0] = -$A[0]; $B[1] = $B[0] * $m + $b; // // Original exercise // $A = [-3,-1]; // $B = [3,7]; // $m = ($A[1]-$B[1])/($A[0]-$B[0]); // $b = $A[1] - $A[0]*$m; // print_r('m='.$m.', b='.$b.'<br />'); // print_r('A('.$A[0].';'.$A[1].'), B('.$B[0].';'.$B[1].') <br />'); $mfrac['nom'] = ($B[1] - $A[1]) / gcd($B[1] - $A[1], $B[0] - $A[0]); $mfrac['denum'] = ($B[0] - $A[0]) / gcd($B[1] - $A[1], $B[0] - $A[0]); $question = 'Írja fel a hozzárendelési utasítását annak a lineáris függvénynek, mely $' . ($A[0] < 0 ? '(' . $A[0] . ')' : $A[0]) . '$-' . To($A[0]) . ' $' . ($A[1] < 0 ? '(' . $A[1] . ')' : $A[1]) . '$-' . Dativ($A[1]) . ' és $' . ($B[0] < 0 ? '(' . $B[0] . ')' : $B[0]) . '$-' . To($B[0]) . ' $' . ($B[1] < 0 ? '(' . $B[1] . ')' : $B[1]) . '$-' . Dativ($B[1]) . ' rendel! (A hozzárendelési utasítást $x\\mapsto mx+b$ alakban adja meg!)'; $page[] = 'A hozzárendelés egy $y=mx+b$ alakú lineáris függvény lesz.'; $page[] = 'A függvény $' . ($A[0] < 0 ? '(' . $A[0] . ')' : $A[0]) . '$-' . To($A[0]) . ' $' . ($A[1] < 0 ? '(' . $A[1] . ')' : $A[1]) . '$-' . Dativ($A[1]) . ' rendel, azaz:$$' . $A[1] . '=' . $A[0] . '\\cdot m+b$$'; $page[] = 'Továbbá azt is tudjuk, hogy $' . ($B[0] < 0 ? '(' . $B[0] . ')' : $B[0]) . '$-' . To($B[0]) . ' $' . ($B[1] < 0 ? '(' . $B[1] . ')' : $B[1]) . '$-' . Dativ($B[1]) . ' rendel, azaz:$$' . $B[1] . '=' . $B[0] . '\\cdot m+b$$'; $hints[] = $page; $page = []; $page[] = '$$\\begin{eqnarray} I.\\quad& ' . $A[1] . '&=&' . $A[0] . '\\cdot m+b\\\\ II.\\quad& ' . $B[1] . '&=&' . $B[0] . '\\cdot m+b \\end{eqnarray}$$ Vonjuk ki az első egyenletből a másodikat! Ekkor a $b$-s tagok kiesnek:$$\\begin{eqnarray} ' . $A[1] . (-$B[1] < 0 ? '' : '+') . strval(-$B[1]) . '&=&(' . $A[0] . (-$B[0] < 0 ? '' : '+') . strval(-$B[0]) . ')\\cdot m+b-b\\\\ ' . strval($A[1] - $B[1]) . '&=&' . strval($A[0] - $B[0]) . '\\cdot m\\\\ \\frac{' . strval($A[1] - $B[1]) . '}{' . strval($A[0] - $B[0]) . '}&=&m\\\\ \\end{eqnarray}$$'; $page[] = 'Tehát az $m$ értéke <span class="label label-success">$' . (round($m) == $m ? $m : '\\frac{' . $mfrac['nom'] . '}{' . $mfrac['denum'] . '}') . '$</span>.'; $hints[] = $page; $page = []; $page[] = '$$\\begin{eqnarray} I.\\quad& ' . $A[1] . '&=&' . $A[0] . '\\cdot m+b\\\\ II.\\quad& ' . $B[1] . '&=&' . $B[0] . '\\cdot m+b \\end{eqnarray}$$ Most adjuk össze a két egyenletet! Ekkor az $m$-es tagok esnek ki:$$\\begin{eqnarray} ' . $A[1] . ($B[1] < 0 ? '' : '+') . $B[1] . '&=&(' . $A[0] . ($B[0] < 0 ? '' : '+') . $B[0] . ')\\cdot m+b+b\\\\ ' . strval($A[1] + $B[1]) . '&=&2\\cdot b\\\\ \\frac{' . strval($A[1] + $B[1]) . '}{2}&=&b\\\\ \\end{eqnarray}$$'; $page[] = 'Tehát a $b$ értéke <span class="label label-success">$' . $b . '$</span>.'; $hints[] = $page; $correct = [round1($m), $b]; $solution = '$m=' . round2($m) . '\\quad b=' . $b . '$'; return array('question' => $question, 'correct' => $correct, 'type' => 'array', 'solution' => $solution, 'hints' => $hints, 'labels' => ['$m$', '$b$']); }
function Generate($level) { $ppl = rand(20, 40); $rounds = rand(round($ppl / 2), round($ppl * 4 / 5)); $default = rand(3, 7) * 50; $extra = rand(5, 9); $total = $ppl - 1; $wins = rand(0, $total); // // Original exercise // $ppl = 31; // $rounds = 21; // $default = 250; // $extra = 7; // $total = $ppl-1; // $wins = 25; $wins = $wins == $rounds ? $wins + pow(-1, rand(0, 1)) : $wins; $defeats = $total - $wins; $points = $default + ($wins - $rounds) * $extra; $diff = $wins - $rounds; $question = 'Egy öttusaversenyen $' . $ppl . '$ résztvevő indult. A vívás az első szám, ahol mindenki mindenkivel egyszer mérkőzik meg. Aki $' . $rounds . '$ győzelmet arat, az $' . $default . '$ pontot kap. Aki ennél több győzelmet arat, az minden egyes további győzelemért $' . $extra . '$ pontot kap ' . The($default) . ' $' . $default . '$ ponton felül. Aki ennél kevesebbszer győz, attól annyiszor vonnak le $' . $extra . '$ pontot ' . The($default) . ' $' . $default . '$-' . From($default) . ', ahány győzelem hiányzik ' . The($rounds) . ' $' . $rounds . '$-' . To($rounds) . '. (A mérkőzések nem végződhetnek döntetlenre.) '; $type = 'int'; $question .= 'Hány pontot kapott a vívás során Péter, akinek $' . $defeats . '$ veresége volt?'; $correct = $points; $solution = '$' . $correct . '$'; $total = $ppl - 1; $diff = $wins - $rounds; if ($diff > 0) { $page[] = 'Mivel mindenki mindenkivel vívott, ezért Péternek összesen $' . $ppl . '-1=' . $total . '$ mérkőzése volt.'; $page[] = 'Péter $' . $total . '$ mérkőzésből $' . $defeats . '$-' . Dativ($defeats) . ' vesztett el, azaz a többi $' . $total . '-' . $defeats . '=' . $wins . '$ mérkőzést megnyerte.'; $page[] = 'Mivel Péter legalább $' . $rounds . '$ mérkőzést nyert, ezért kap $' . $default . '$ pontot.'; $page[] = 'Az előírt $' . $rounds . '$ mérkőzésen túl további $' . $wins . '-' . $rounds . '=' . $diff . '$ alkalommal nyert, ami további $' . $diff . '\\cdot' . $extra . '=' . strval($diff * $extra) . '$ pontot jelent.'; $page[] = 'Tehát Péter összesen $' . $default . '+' . strval($diff * $extra) . '=$ <span class="label label-success">$' . $correct . '$</span> pontot kapott.'; $hints[] = $page; } else { $diff *= -1; $page[] = 'Mivel mindenki mindenkivel vívott, ezért Péternek összesen $' . $ppl . '-1=' . $total . '$ mérkőzése volt.'; $page[] = 'Péter győztes meccseinek száma $' . $rounds . '$ helyett mindössze $' . $wins . '$ volt, ami $' . $diff . '$-' . With($diff) . ' kevesebb.'; $page[] = 'Ezért a $' . $default . '$ pontnál $' . $diff . '\\cdot' . $extra . '=' . strval($diff * $extra) . '$-' . By($diff * $extra) . ' kevesebb pontot kap.'; $page[] = 'Tehát Péter összesen $' . $default . '-' . strval($diff * $extra) . '=$ <span class="label label-success">$' . $correct . '$</span> pontot kapott.'; $hints[] = $page; } return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'type' => $type, 'hints' => $hints); }
function basic_subtraction_explanation($num1, $num2) { $digits1 = str_split($num1); $digits2 = str_split($num2); $length1 = count($digits1); $length2 = count($digits2); $remain_old = 0; $remain_new = 0; $diff = $num1 - $num2; $diff_digits = str_split($diff); $diff_length = count($diff_digits); $values = array("egyesek", "tízesek", "százasok", "ezresek", "tízezresek", "százezresek", "milliósok", "tízmilliósok", "százmilliósok", "milliárdosok", "tízmilliárdosok", "százmilliárdosok"); for ($ind = 0; $ind < $length1; $ind++) { // Get digits of current column $digit1 = array_pop($digits1); $digit2 = array_pop($digits2); $digit2b = $digit2 + $remain_old; // Define remainer $result_sub = $digit1 - $digit2b; if ($result_sub < 0 && $ind != $length1 - 1) { $remain_new = 1; $result_sub += 10; $digit1b = $digit1 + 10; $result_digit = $result_sub % 10; } else { $digit1b = $digit1; $result_digit = $result_sub; } $text = ''; $text = 'Nézzük meg ' . (in_array($ind, [0, 4]) ? 'az' : 'a') . ' ' . $values[$ind] . ' helyén lévő számjegyeket! '; if ($remain_old > 0 && $digit2 != NULL) { $text .= '(Az előző számolásnál kapott maradékot ' . The($digit2) . ' $' . $digit2 . '$-' . To($digit2) . ' adjuk: $' . $digit2 . '+' . $remain_old . '=' . $digit2b . '$.) '; } elseif ($digit2 == NULL) { $text .= 'Az üres helyre $0$-t írunk' . ($remain_old > 0 ? ', viszont a maradékot ne felejtsük el hozzászámolni! ' : '. '); } $text .= 'Mennyit kell adni ' . The($digit2b) . ' $' . $digit2b . '$-' . To($digit2b) . ', hogy $' . $digit1b . '$-' . Dativ($digit1b) . ' kapjunk? $' . $result_sub . '$-' . Dativ($result_sub) . ', mert $' . $digit2b . '+' . $result_sub . '=' . $digit1b . '$. '; if ($remain_new == 1) { $article = The($result_digit); $Article = str_replace('a', 'A', $article); $text .= $Article . ' $' . $result_digit . '$-' . Dativ($result_digit) . ' leírjuk alulra, az $1$-et pedig ' . (in_array($ind + 1, [0, 4]) ? 'az' : 'a') . ' ' . $values[$ind + 1] . ' fölé:'; } elseif ($result_digit != 0 || $ind < $diff_length) { $text .= 'Az eredményt írjuk le alulra:'; } $text .= basic_subtraction_generate_equation($num1, $num2, $ind); if ($ind == $length1 - 1) { $text .= 'Tehát a különbség $\\textcolor{green}{' . strval($num1 - $num2) . '}$.'; } $explanation[] = $text; $remain_old = $remain_new; $remain_new = 0; } return $explanation; }
function Generate($level) { $ppl = rand(20, 40); $rounds = rand(round($ppl / 2), round($ppl * 4 / 5)); $default = rand(3, 7) * 50; $extra = rand(5, 9); $total = $ppl - 1; $wins = rand(0, $total); // // Original exercise // $ppl = 31; // $rounds = 21; // $default = 250; // $extra = 7; // $total = $ppl-1; // $wins = 16; $wins = $wins == $rounds ? $wins + pow(-1, rand(0, 1)) : $wins; $defeats = $total - $wins; $points = $default + ($wins - $rounds) * $extra; $diff = $wins - $rounds; $question = 'Egy öttusaversenyen $' . $ppl . '$ résztvevő indult. A vívás az első szám, ahol mindenki mindenkivel egyszer mérkőzik meg. Aki $' . $rounds . '$ győzelmet arat, az $' . $default . '$ pontot kap. Aki ennél több győzelmet arat, az minden egyes további győzelemért $' . $extra . '$ pontot kap ' . The($default) . ' $' . $default . '$ ponton felül. Aki ennél kevesebbszer győz, attól annyiszor vonnak le $' . $extra . '$ pontot ' . The($default) . ' $' . $default . '$-' . From($default) . ', ahány győzelem hiányzik ' . The($rounds) . ' $' . $rounds . '$-' . To($rounds) . '. (A mérkőzések nem végződhetnek döntetlenre.) '; $type = 'int'; $question .= 'Hány győzelme volt Bencének, aki $' . $points . '$ pontot szerzett?'; $correct = $wins; $solution = '$' . $correct . '$'; if ($diff > 0) { $page[] = 'Bence $' . $default . '$ pontnál többet szerzett, ami azt jelenti, hogy legalább $' . $rounds . '$ mérkőzést nyert.'; $page[] = 'Számoljuk ki, Bence pontjainak száma mennyivel több, mint $' . $default . '$:$$' . $points . '-' . $default . '=' . strval($diff * $extra) . '$$'; $page[] = 'Ha ezt a számot elosztjuk $' . $extra . '$-' . With($extra) . ', megkapjuk, hogy hány további versenyt nyert Bence:$$' . strval($diff * $extra) . ':' . $extra . '=' . $diff . '$$'; $page[] = 'Tehát Bencének összesen $' . $rounds . '+' . $diff . '=$ <span class="label label-success">$' . $correct . '$</span> győzelme volt.'; $hints[] = $page; } else { $diff *= -1; $page[] = 'Bence $' . $default . '$ pontnál kevesebbet szerzett, ami azt jelenti, hogy kevesebb, mint $' . $rounds . '$ mérkőzést nyert.'; $page[] = 'Számoljuk ki, Bence pontjainak száma mennyivel kevesebb, mint $' . $default . '$:$$' . $default . '-' . $points . '=' . strval($diff * $extra) . '$$'; $page[] = 'Ha ezt a számot elosztjuk $' . $extra . '$-' . With($extra) . ', megkapjuk, hogy hány további versenyt vesztett el Bence:$$' . strval($diff * $extra) . ':' . $extra . '=' . $diff . '$$'; $page[] = 'Tehát Bencének összesen $' . $rounds . '-' . $diff . '=$ <span class="label label-success">$' . $correct . '$</span> győzelme volt.'; $hints[] = $page; } return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'type' => $type, 'hints' => $hints); }