Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   random numbers или про массивы (http://www.flasher.ru/forum/showthread.php?t=27041)

MbICH 10.02.2002 16:21

random numbers или про массивы
 
Вложений: 1
проблема, нужно чтото типа жеребъевщика, задаеш число, он генерирует числа от 1 до этого числа

проблема в том чтобы эти чистла не повторялись

не знаю че делать, помогите

вот что получилось, пока сделал толлько чтбы в паре чисел не было повторов, кароче смотрите сами, исходник там же ъ
вот она
или с массивами,думаю это дело нужно делать с ними))

[subway]design 10.02.2002 16:51

чтоб цифры не повторялись...
 
RANDOMIZE :D

(qBasic рулит!)

MbICH 10.02.2002 17:17

RANDOMIZE
 
а поподробнее?

[subway]design 10.02.2002 19:02

это шутка была...

а что бы не повторялись - делай цикл-проверку. У меня сейчас времени нет, пример не смогу дать.

MbICH 10.02.2002 20:48

не пойдет
 
a1 = random(b)+1;
c1 = random(b)+1;
if (a1 == c1) {
a1 = random(b);
}

если так, то можно сделать чтобы в паре не повторялиь, а мне нада чтобы все числа были разные, думаю больно большой код получится) если чисел 20 или 30они все равно повторяются)

Хрюндик 10.02.2002 22:21

//init part(add to the first frame!)
max = 26;//number
used = [];
//main part
number = random(max)+1;
for(var some in used){
if(used[some] == number) {
it_used = 1;
break;
}
}
if(it_used != 1){
trace(number);
used.push(number);
}
it_used = null;

должно работать, но не проверял....

valeris 11.02.2002 03:06

Мой вариант:

max=30;
function order (a, b) {
var name1 = random(max)+1;
var name2 = random(max)+1;

if (name1 < name2) {
return -1;
} else if (name1 > name2) {
return 1;
} else {
return 0;
}
}


r=new Array();

for (n=0; n<max; n++){ r[n]=n+1 };

r.sort(order);
r.sort(order);
r.sort(order);
r.sort(order);
r.sort(order);

ish 11.02.2002 08:27

вобще говоря, мне часто приходилось сталкиваться с подобными задачами, поэтому я давно для себя написал универсальный класс.

Код:

Object.prototype.RND=function(obj) {
this._rnd=new Array();
this._obj=obj;
this.randomize=function() {
if(this._obj!=undefined&&this._obj.__proto__==Array.prototype) {
delete this._rnd;
this._rnd=new Array();
var len=this._obj.length;
this.length=len;
for(var i=0;i<len;i++) {
this._rnd[i]=this._obj[i];
}
}
}
this.random=function() {
var len=this._rnd.length;
this.length=len;
if(len!=0) {
var n=random(len);
var temp=this._rnd[len-1];
this._rnd[len-1]=this._rnd[n];
this._rnd[n]=temp;
return this._rnd.pop();
} else {
return null;
}
}
ASSetPropFlags(this,null,7);
this.randomize();
}

все что нужно вставить в первый кадр ролика.

значит как работать, все просто:
есть массив со значениями, которые необходимо случайно выбирать с условием уникальности выбора. притом что значения массива могут быть любого типа :)
ну например:
values=["string",2,3,6,7,"c",8];

далее создаем обьект:
myRandom=RND(values);

для случайного и уникального выбора значения:
myVar=myRandom.random();

когда выбор будет исчерпан, функция будет возвращать null

для восстановления набора значений:
myRandom.randomize();

узнать сколько осталось "нетронутых" значений:
myRandom.length

пример:
Код:

values=[1,2,3,4,5,6,7,8,9];
trace("-== 1-st set ==-");
myRandom=new RND(values);
while(myRandom.length) {
trace(myRandom.random());
}
trace("-== 2-st set ==-");
myRandom.randomize();
while(myRandom.length) {
trace(myRandom.random());
}

:)

ish 11.02.2002 10:15

звиняйте, в сорс вкралась ошибка :)
тут правильно
Код:

Object.prototype.RNDGenerator=function(obj) {
this._rnd=new Array();
this._obj=obj;
this.randomize=function() {
if(this._obj!=undefined&&this._obj.__proto__==Array.prototype) {
delete this._rnd;
this._rnd=new Array();
var len=this._obj.length;
this.length=len;
for(var i=0;i<len;i++) {
this._rnd[i]=this._obj[i];
}
}
}
this.random=function() {
var len=this._rnd.length;
if(len!=0) {
var n=random(len);
var temp=this._rnd[len-1];
this._rnd[len-1]=this._rnd[n];
this._rnd[n]=temp;
var out=this._rnd.pop();
this.length=this._rnd.length;
return out;
} else {
return null;
}
}
ASSetPropFlags(this,null,7);
this.randomize();
}

Код:

myRandom=new RNDGenerator([1,2,3,4,5,6,7,8,9]);

trace("-== 1-st set ==-");
while(myRandom.length) {
trace(myRandom.random());
}

myRandom.randomize();

trace("-== 2-nd set ==-");
while(myRandom.length) {
trace(myRandom.random());


Fisher 11.02.2002 11:15

Хочу тоже поучаствовать :) Класов правда не сподобил, но два кусочка положу :p
Просто случайное число с проверкой чтоб подряд не шли.
do {
new=random (n);
} while (new==old);
old=new;

А вот это интересный кусосочек - просто от сердца отрываю :D Создает псевдослучайный массив.

ar=[];
for (i=0; i<20; ++i) {
ar.splice(random (10),0,i);
}
trace (ar);


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

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