Я создаю систему таблиц умножения в PHP.
Ввод этой системы — это номер таблицы и количество вопросов.
Таблица 1 пропускается, поэтому 2 для ввода таблицы
На данный момент я просто заполняю массив следующим образом:
$nCount = $_POST['count'];
$nHighest = $_POST['table'];
$aSums = [];
$nCounter = 0;
while($nCount > 0){
$cSumString = rand(2, $nHighest) . "*" . rand(1, 10);
$aSums[$nCounter] = $cSumString
$nCount--;
$nCounter++;
}
Я хочу разобрать вопросы несколькими способами:
3 * 5 = ... (normal)
... * 5 = 25 (first number to fill in)
8 * ... = 16 (second to fill in)
Это должно быть рандомизировано.
Пример:
1 * 2 = ...
6 * ... = 12
... * 4 = 20
8 * 4 = ...
2 * ... = 6
Единственное, что я знаю, что должно быть в состоянии сделать это, так что это переключатель, но я не могу заставить его работать с опережением, поэтому, если кто-нибудь сможет дать мне толчок в правильном направлении, я буду признателен. Я не прошу instacode, просто несколько советов было бы здорово.
$nCount = $_POST['count'];
$nHighest = $_POST['table'];
$aSums = [];
$leftOut = ['leftFactor', 'rightFactor', 'product'];
for ($i = 0; $i <= $nCount; $i++) {
$leftOutRand = rand(0, count($leftOut) - 1);
$factor = rand(1, $nHighest);
$product = rand(0, $nHighest) * $factor;
switch($leftOut[$leftOutRand]) {
case 'leftFactor':
$cSumString = '...' . ' * ' . $factor . ' = ' . $product;
break;
case 'rightFactor':
$cSumString = $factor . ' * ' . '...' . ' = ' . $product;
break;
case 'product':
$cSumString = rand(1, $nHighest) . ' * ' . rand(1, $nHighest) . ' = ' . '...';
break;
}
$aSums[$i] = $cSumString;
}
Пример вывода:
2 * ... = 4
... * 2 = 6
1 * 1 = ...
... * 2 = 6
3 * ... = 12
2 * ... = 2
2 * 4 = ...
4 * ... = 0
3 * 1 = ...
2 * 1 = ...
... * 4 = 16
1 * ... = 2
... * 2 = 2
1 * 4 = ...
3 * ... = 9
2 * 3 = ...
2 * ... = 6
... * 1 = 3
... * 4 = 4
1 * 1 = ...
... * 3 = 9
<?php
$total = 4;
$table = 7;
$generate_pair = function() use ($table)
{
$first = rand(1, 10);
$last = rand(2, $table);
return [$first, $last];
};
$pairs = [];
while (count($pairs) < $total) {
$pair = $generate_pair();
if(!in_array($pair, $pairs))
$pairs[] = $pair;
}
$questions = array_map(function ($v) {
return sprintf('%d * %d', $v[0], $v[1]);
}, $pairs);
var_dump($questions);
Пример вывода:
array(4) {
[0]=>
string(5) "7 * 3"[1]=>
string(5) "5 * 7"[2]=>
string(5) "5 * 2"[3]=>
string(5) "6 * 2"}
Я лично поместил бы его в массив и прочитал бы оттуда, тогда легче получить его через переключатель, как упомянул Марк Лабенски, и я сделал бы это так:
$questpertable = floor($questions / ($table-1));
$nTableCounter = 2;
$array = [];
for ($nX = 0; $nX < ($table-1); $nX++){
for ($nY = 0; $nY < $questpertable;){
$left = rand(1, 10);
$right = $tablecounter;
$answer = $left * $right;
$array[$nY] = array($left, $right, $answer );
$Y++;
}
$tablecounter++;
}
Единственное, чего здесь не хватает, так это остаточной стоимости, которую вам нужно будет найти, чтобы это исправить.