Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подбор делимого и делителя так, чтобы частное было целым числом (http://www.flasher.ru/forum/showthread.php?t=187044)

mihael_p 12.11.2012 17:06

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

Код AS3:

for (var i:int = 0; i < sizeW; i++)
{
        for (var j:int = 0; j < sizeH; j++)
        {
.....
            case "/":
              var arr:Array = simpleDivide();
              if (arr != null)
              {
                  fd = arr[0];
                  sd = arr[1];
                  aswr = arr[2];
              }
 
              break;
.....
      }
}
private function simpleDivide():Array
{
        var fd = int( lowValue + ( Math.random() * ( highValue - lowValue + 1 ) ));
        var sd = int( lowValue + ( Math.random() * ( highValue - lowValue + 1 ) ));
 
        if (fd < sd)
        {
                sd = fd - int( 1 + ( Math.random() * ( 5 - 1 + 1 ) ));
                if (sd <= 0)
                {
                        sd = 1;
                }
        }
        var aswr:* = fd / sd;
        if( ( aswr% 1.0 ) == 0 )
        {
                return [fd, sd, aswr];
        }else {
                return null;
        }
}

Вроде работает, но только когда приходит массив а не null, а что делать когда приходит null - не знаю... как запустить заново процесс подбора цифр ...

Подскажите как быть?

lexa2000lexa 12.11.2012 18:21

Делал что то подобное и применил вот такой подход
Код AS3:

function simpleDivide():Array
{
        var aswr = int( lowValue + ( Math.random() * ( highValue - lowValue + 1 ) ));
        var sd = int( lowValue + ( Math.random() * ( highValue - lowValue + 1 ) ));
        var fd = aswr*sd
        return [fd, sd, aswr];
 
}


wvxvw 12.11.2012 18:55

Ну как бы это фундаментальная теорема о том, что все числа состоят из уникального набора простых множителей. А то, что вы наблюдаете - это ее следствие. Т.е. два разных взаимно-простых числа больших двойки по определению нельзя разделить друг на друга так, чтобы получилось целое число...
Я бы пошел от обратного: брал бы какое-то число и уможал его на два случайно выбранных числа, в таком случае изначально выбранное число и было бы ответом. Т.е.
Код AS3:

var x:int = Math.sqrt(Math.random() * int.MAX_VALUE);
var multiplierA:int = Math.sqrt(Math.random() * int.MAX_VALUE);
var multiplierB:int = Math.sqrt(Math.random() * int.MAX_VALUE);
return [x * multiplierA, x * multiplierB];

EDIT:

Ой, я думал речь идет о нахождении числа, которое делит два других.
Ну так а если просто нужно найти любые X, Y, такие чтобы X / Y - целое, то достаточно:
Код AS3:

var maxMultiplier:int = Math.sqrt(int.MAX_VALUE);
var x:int = Math.random() * maxMultiplier;
var y:int = Math.random() * maxMultiplier;
return [x * y, y, x];



Часовой пояс GMT +4, время: 09:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.