Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Деление рандомных чисел без остатка (https://javascript.ru/forum/jquery/72911-delenie-randomnykh-chisel-bez-ostatka.html)

Gzz 06.03.2018 12:21

Деление рандомных чисел без остатка
 
Добрый день. Ситуация такая:
Пользователь на сайте выбирает разряд чисел(двухзначное, трехзначное) и операцию (умножение, деление). Генерируется два числа рандомно и пользоатель дает ответ в input, дальше проверка ответа верно или нет. С умножением проблем нет. А вот с делением проблемка.
var int1;
        var int2;
        if (razryad == 21) {
            int1 = Math.floor((Math.random() * 99) + 10);
            int2 = Math.floor((Math.random() * 9) + 2);
            $('#questions tr').remove();
            if (int1 % int2 == 0) {
            	$('#questions').append('<tr><td class="q1">' + int1 + '</td></tr>');
        	    $('#questions').append('<tr><td class="q2">' + int2 + '</td></tr>');
            } else {
                for(;int1 % int2 != 0;){
                    int2 = Math.floor((Math.random() * 9) + 2);
                    if (int1 % int2 == 0) {
                        $('#questions tr').remove();
                    	$('#questions').append('<tr><td class="q1">' + int1 + '</td></tr>');
                	    $('#questions').append('<tr><td class="q2">' + int2 + '</td></tr>');
                	    break;
                    }
                }
            }
            if (operation == 'divide') {
                if(int1/int2 == answer) {
                     $('.answ'+cntr).css('visibility', 'visible');
                     $('.answ'+cntr+' td').append(answer);
                } else {
                    var right = int1/int2;
                    $('.answ'+cntr).css('visibility', 'visible');
                    $('.answ'+cntr+' td').append(answer + '/' + right);
                }
            }
        }

Проверка идет на деление без остатка. Первое число не трогаю, а в цикле генерирую второе пока не будет делится без остатка. Вроде работает, но периодически сайт виснет и не закрывается. Консоль молчит. Подскажите как можно реализовать. Я недавно начал изучать jquery.

Nexus 06.03.2018 12:34

Цитата:

Сообщение от Gzz
но периодически сайт виснет и не закрывается

А чего вы ожидали, когда писали цикл в строке 11?
Он будет рандомно генерировать значение для "int2" до тех пор, пока "int1" не будет без остатка делиться на "int2".

рони 06.03.2018 12:35

Gzz,
может вы не учли, что 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 нельзя разделить без остатка на 2 ... 11

Gzz 06.03.2018 12:36

Цитата:

Сообщение от Nexus (Сообщение 479892)
А чего вы ожидали, когда писали цикл в строке 11?
Он будет рандомно генерировать значение для "int2" до тех пор, пока "int1" не будет без остатка делиться на "int2".

Вот и спрашиваю решение, чтобы сайт не вис. Подскажите может это делать ajax-ом на php файл?

Dilettante_Pro 06.03.2018 12:38

Gzz,
Цитата:

Сообщение от Gzz
Первое число не трогаю, а в цикле генерирую второе пока не будет делится без остатка

Первое случайное число совершенно не обязательно должно делиться без остатка, и цикл поиска делителя будет бесконечным.
Попробуйте наоборот - по второму по случайному множителю создавать первое

Gzz 06.03.2018 13:23

Цитата:

Сообщение от рони (Сообщение 479893)
Gzz,
может вы не учли, что 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 нельзя разделить без остатка на 2 ... 11

Цитата:

Сообщение от Dilettante_Pro (Сообщение 479895)
Gzz,

Первое случайное число совершенно не обязательно должно делиться без остатка, и цикл поиска делителя будет бесконечным.
Попробуйте наоборот - по второму по случайному множителю создавать первое

Спасибо, так и сделал. Генерирую первое число по второму.

Gzz 06.03.2018 13:32

Dilettante_Pro, а подскажите еще вот что. Только что рандомом мне выдало 104 и 4. Хотя
var int1 = Math.floor((Math.random() * 99) + 10);

Dilettante_Pro 06.03.2018 14:45

Gzz,
Цитата:

Сообщение от Gzz
Только что рандомом мне выдало 104

И что вас удивляет?
Math.random() выдает диапазон от 0 до 1
Math.random() * 99 выдает диапазон от 0 до 99
И еще + 10

Могло и 109 выдать.

рони 06.03.2018 15:01

Gzz,
<script>
function fn() {
  var int1 = Math.floor(Math.random() * 81 + 20),
  int2 = Math.floor(Math.random() * 9 + 2);
  int1 = (int1 / int2 | 0) * int2;
  return [int1, int2];
}
for (var i = 0; i < 59; i++) {
  var a = fn().join("/");
  document.write(a + "=" + eval(a) + "<br>");
};

</script>


Часовой пояс GMT +3, время: 14:38.