Показать сообщение отдельно
Старый 13.01.2008, 02:04   #12
jimon
 
Сообщений: n/a
Ответ: Выкладываем советы

если нам надо сгенерировать случайно число A - M раз, чило B - K раз и тд
то смотрим суда

вот сам код в два типа
Type TGeneratorPair
	Field Number%
	Field Count%
End Type

Type TGeneratorNums
	Field List:TList
	
	Method AddNum(num%,count%)
		If Not List Then List = New TList
		Local pair:TGeneratorPair = New TGeneratorPair
		pair.Number = num
		pair.Count = count
		List.AddLast(pair)
	End Method
	
	Method GetValue%()
		If Not List Then Return -1
		Local pair:TGeneratorPair = TGeneratorPair(List.ValueAtIndex(Rand(0,List.Count()-1)))
		pair.Count:-1
		If pair.Count < 1 Then List.Remove(pair)
		If List.Count() = 0 Then List = Null
		Return pair.Number
	End Method
End Type
вот как юзать (вбивал в браузере .. )

Local gen:TGeneratorNums = new TGeneratorNums

'  AddNum(число , сколько раз)
gen.AddNum(1,4)
gen.AddNum(4,5)
gen.AddNum(7,6)

Local num%

While num <> -1
	num = gen.GetValue()
	if num <> -1 then debuglog num
wend

gen = null
операция List.ValueAtIndex тормозная в стандартной либе БМ
потому для максимального быстродействия списком юзаем мою модификацию
 
Ответить с цитированием