Usng jquery необходимо создать суммы деления без остатков - PullRequest
0 голосов
/ 14 апреля 2020

В моем текущем проекте я создаю случайные математические вопросники для абакуса. Таким образом, страница экзамена будет обслуживать суммы один за другим. Исходя из уровня студента, я генерирую суммы во внешнем интерфейсе, используя jquery и рендеринг, чтобы получить ответ ученика для проверки На определенном уровне мне нужно генерировать деления с нулевым остатком.

Итак, я использую функцию ниже, чтобы генерировать сумму, которая иногда возвращает неопределенное значение.

    tripleDigitSingleDigitWithoutRemainder: function()
    {
        var dividend = BOBASSESSMENT.general.randomIntFromInterval(100, 999);
        var divisor = BOBASSESSMENT.general.randomIntFromInterval(2, 9);
        console.log("out: " + dividend + "_" + divisor);
        console.log("remainder: " + (dividend % divisor));
        var result_val = "";

        // result_val  = dividend % divisor;


        if(dividend % divisor != 0)
        {
            console.log('loop_again');
            BOBASSESSMENT.general.tripleDigitSingleDigitWithoutRemainder();
        }else{
            result_val = dividend + "_" + divisor;
            console.log("return: " + result_val);
        }
        console.log("final_return: " + result_val);
        return result_val;

    }

, следовательно, пожалуйста, помогите мне здесь, чтобы сделать дальше.

требование состоит в том, чтобы показывать вопрос один за другим, а мне нужно, чтобы значение дивиденда и значение делителя давали остаток как 0. Это означает, что 16% 2 = 0, а не 16% 3 = 1.

Можете ли вы помочь здесь.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Как обсуждалось в комментариях, есть способ использовать al oop, чтобы повторить попытку с другими значениями вместо рекурсии:

tripleDigitSingleDigitWithoutRemainder: function()
{
    for(;;)
    {
        var dividend = BOBASSESSMENT.general.randomIntFromInterval(100, 999);
        var divisor = BOBASSESSMENT.general.randomIntFromInterval(2, 9);

        if(dividend % divisor == 0)
        {
            var result_val = dividend + "_" + divisor;
            console.log("return: " + result_val);
            return result_val;
        }
    }
}

Здесь у нас есть бесконечный l oop, и мы продолжаем цикл до у нас есть действительная проблема, а затем сразу же вернемся, когда мы делаем. for(;;) - это один из способов написать бесконечное l oop: есть другие, например, while (true) { ... }, если это понятнее - вам.

(Однако я предпочитаю подход в ответе Wimanicesir, который создает правильное значение вместо того, чтобы повторять попытки, пока мы не найдем один, что может занять гораздо больше времени.)

2 голосов
/ 14 апреля 2020

Как сказано в комментариях. Не лучше ли просто создать рабочее подразделение, создав его с помощью продукта?

function generate() {
  // Numbers [2-9]
  var small = Math.floor(Math.random() * 8) + 2

  // This will give the limit of current divider
  var limit = Math.ceil(900 / small)
  
  // We check the minimum now
  var minimum = Math.floor(100 / small)

  // We create a new random with given limit
  var big = Math.ceil(Math.random() * limit) + minimum

  // Create the product
  var product = big * small;

  return { question: product + ' / ' + small, answer: big }

}

console.log(generate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...