Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.11.2011, 20:01
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 11  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Код AS3:
var t:Number = beetwin( 0, 3 ) ; // от 0 до 3 
 
	private function beetwin(param0:int, param1:int):Number
	{
		var temp:Number = param0 + Math.floor(Math.random() * (param1 - param0)) ; 
		return (temp == param0 || temp == param1)?beetwin(param0, param1):temp;
	}
Добавлено через 2 минуты
или даже так, универсальнее:
Код AS3:
var t:Number = beetwin( 0, 3, false ) ; // от 0 до 3, не включать границы диапазона в результат
 
	private function beetwin(param0:int, param1:int, incl:boolean):Number
	{
		var temp:Number = param0 + Math.floor(Math.random() * (param1 - param0)) ; 
		if ( incl ) {
			return temp;
		} else {
			return (temp == param0 || temp == param1)?beetwin(param0, param1, incl):temp;
		}
	}


Последний раз редактировалось Ookami; 06.11.2011 в 20:06.
Старый 06.11.2011, 20:03
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 12  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
две переменных использовать как минимум, как максимум, как первое исключение и как второе. бубна не хватает.
__________________
Humanity.push(new Man());

Старый 06.11.2011, 20:05
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 13  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
В данном примере параметр incl указывает, надо ли включать границы диапазона в результат. Но можно наверное еще оптимальнее сделать

Старый 06.11.2011, 20:09
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 14  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
вы наверно не поняли что мне нужно..
__________________
Humanity.push(new Man());

Старый 06.11.2011, 20:21
Newred вне форума Посмотреть профиль Отправить личное сообщение для Newred Посетить домашнюю страницу Newred Найти все сообщения от Newred
  № 15  
Ответить с цитированием
Newred
 
Аватар для Newred

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
Цитата:
Для программы необходимо число от 0 до 3.
ответ на этот вопрос был дан.

Цитата:
мне нужно еще с исключениями. ответ не должен быть равен с или c1.
Телепатических способностей не имею, что такое с1 и с ?

Старый 06.11.2011, 20:21
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 16  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Да, немного не так понял. Перечитал ваш код - все нормально на первый взгляд... Да и на второй тоже. Запустил у себя тест аналогично goodguy, получил zeros: 2493 ones: 2544 twos: 2484 threes: 2479

Старый 06.11.2011, 20:21
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 17  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
два параметра, коими не должен быть рандом.
__________________
Humanity.push(new Man());

Старый 06.11.2011, 20:22
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 18  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Newred, с1 и с2 это значения, которые надо исключить из результат

Старый 06.11.2011, 20:26
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 19  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Этому методу excludedRand, конечно, не хватает проверки на валидность аргументов, но если все правильно задавать, то работает путем:
Код AS3:
package  {
	import flash.display.Sprite;
	import flash.net.FileReference;
	/**
	 * ...
	 * @author DoctorSTaL
	 */
	public class TestClass extends Sprite{
 
		public function TestClass() {
			super();
 
			var max:int = 10;
 
			var resArr:Vector.<int> = new Vector.<int>(max);
			var r:int;
 
			var i:int = 10000;
			while(i--){
				r=excludedRand(max,1,5,7,3);
				resArr[r]++;
			}
			i = max;
			while (i--) {
				trace(i+" : "+resArr[i]);
			}
		}
 
		private function excludedRand(max:uint, ...excludes):uint {
			if (max <= excludes.length) throw(new ArgumentError("To many excludes."));
			if (excludes.sort(Array.NUMERIC|Array.UNIQUESORT) == 0) throw(new ArgumentError("You must use unique exclusions due to use excludedRand."));
			if (excludes[excludes.length - 1] >= max) throw(new ArgumentError("All exclusions shoud be less than max value."));
 
			var len:uint = max - excludes.length;
			var res:uint = uint(Math.random() * len);
			for (var i:int = 0; i < excludes.length; i++) {
				if (res >= excludes[i]) res++; else break;
			}
			return res;
		}
	}
 
}


Последний раз редактировалось crazyone; 06.11.2011 в 20:51. Причина: Добавил проверку аргументов
Старый 06.11.2011, 20:26
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 20  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Код с вашей функцией:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		private var _zeros:		int = 0;
		private var _ones:		int = 0;
		private var _twos:		int = 0;
		private var _threes:	int = 0;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			for (var j:int = 0; j < 10; j++ ) {
				_zeros = 0;
				_ones = 0;
				_twos = 0;
				_threes = 0;
				for (var i:int = 0; i < 10000; i++) {
					var rand:int = randExp();
					if (rand == 0) _zeros++;
					else if (rand == 1) _ones++;
					else if (rand == 2) _twos++;
					else if (rand == 3) _threes++;
				}
				trace("zeros: " + _zeros, "ones: " + _ones, "twos: " + _twos, "threes: " + _threes);
			}
		}
 
		private function randExp(c:int = -1,c1:int = -1):int {
			var t:int = Math.floor(Math.random() * 4);
			return (t == c || t == c1)?randExp(c, c1):t;
		}
	}
 
}
Трейс:
zeros: 2481 ones: 2619 twos: 2444 threes: 2456
zeros: 2518 ones: 2515 twos: 2515 threes: 2452
zeros: 2513 ones: 2517 twos: 2503 threes: 2467
zeros: 2506 ones: 2462 twos: 2560 threes: 2472
zeros: 2535 ones: 2474 twos: 2477 threes: 2514
zeros: 2470 ones: 2533 twos: 2541 threes: 2456
zeros: 2503 ones: 2448 twos: 2539 threes: 2510
zeros: 2532 ones: 2478 twos: 2445 threes: 2545
zeros: 2611 ones: 2406 twos: 2418 threes: 2565
zeros: 2583 ones: 2475 twos: 2432 threes: 2510

Не вижу проблемы с распределением нулей - все значения примерно поровну.

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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