Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.03.2018, 12:21
Gzz Gzz вне форума
Новичок на форуме
Отправить личное сообщение для Gzz Посмотреть профиль Найти все сообщения от Gzz
 
Регистрация: 06.03.2018
Сообщений: 4

Деление рандомных чисел без остатка
Добрый день. Ситуация такая:
Пользователь на сайте выбирает разряд чисел(двухзначное, трехзначное) и операцию (умножение, деление). Генерируется два числа рандомно и пользоатель дает ответ в 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.

Последний раз редактировалось Gzz, 06.03.2018 в 12:24.
Ответить с цитированием
  #2 (permalink)  
Старый 06.03.2018, 12:34
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от Gzz
но периодически сайт виснет и не закрывается
А чего вы ожидали, когда писали цикл в строке 11?
Он будет рандомно генерировать значение для "int2" до тех пор, пока "int1" не будет без остатка делиться на "int2".
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2018, 12:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Gzz,
может вы не учли, что 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 нельзя разделить без остатка на 2 ... 11
Ответить с цитированием
  #4 (permalink)  
Старый 06.03.2018, 12:36
Gzz Gzz вне форума
Новичок на форуме
Отправить личное сообщение для Gzz Посмотреть профиль Найти все сообщения от Gzz
 
Регистрация: 06.03.2018
Сообщений: 4

Сообщение от Nexus Посмотреть сообщение
А чего вы ожидали, когда писали цикл в строке 11?
Он будет рандомно генерировать значение для "int2" до тех пор, пока "int1" не будет без остатка делиться на "int2".
Вот и спрашиваю решение, чтобы сайт не вис. Подскажите может это делать ajax-ом на php файл?
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2018, 12:38
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Gzz,
Сообщение от Gzz
Первое число не трогаю, а в цикле генерирую второе пока не будет делится без остатка
Первое случайное число совершенно не обязательно должно делиться без остатка, и цикл поиска делителя будет бесконечным.
Попробуйте наоборот - по второму по случайному множителю создавать первое
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2018, 13:23
Gzz Gzz вне форума
Новичок на форуме
Отправить личное сообщение для Gzz Посмотреть профиль Найти все сообщения от Gzz
 
Регистрация: 06.03.2018
Сообщений: 4

Сообщение от рони Посмотреть сообщение
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 Посмотреть сообщение
Gzz,

Первое случайное число совершенно не обязательно должно делиться без остатка, и цикл поиска делителя будет бесконечным.
Попробуйте наоборот - по второму по случайному множителю создавать первое
Спасибо, так и сделал. Генерирую первое число по второму.
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2018, 13:32
Gzz Gzz вне форума
Новичок на форуме
Отправить личное сообщение для Gzz Посмотреть профиль Найти все сообщения от Gzz
 
Регистрация: 06.03.2018
Сообщений: 4

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

Последний раз редактировалось Gzz, 06.03.2018 в 13:35.
Ответить с цитированием
  #8 (permalink)  
Старый 06.03.2018, 14:45
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Gzz,
Сообщение от Gzz
Только что рандомом мне выдало 104
И что вас удивляет?
Math.random() выдает диапазон от 0 до 1
Math.random() * 99 выдает диапазон от 0 до 99
И еще + 10

Могло и 109 выдать.
Ответить с цитированием
  #9 (permalink)  
Старый 06.03.2018, 15:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел без повторений в последующих генерациях Samik Общие вопросы Javascript 14 12.03.2023 00:35
Нужен генератор случайных чисел без Math.random Kirill_98 Учебные материалы 39 16.02.2018 22:20
Можно ли сравнивать переменные без чисел? Crinson Общие вопросы Javascript 0 13.07.2017 10:35
Делить без остатка Black_Sun Общие вопросы Javascript 9 01.02.2017 00:11
Сумма чисел фиббоначи без использования функций и массивов. mariaanina Общие вопросы Javascript 4 03.06.2014 17:22