Чтобы получить вероятность 0.001% (один на сто тысяч), нужно строгое равенство.
Примерно так:
x = rand(100 000);
if (x == 1)
__zrk.patriot
else
__avtobus
Для языков С/С++ rand(100000) даст значение от 0 до 99 999 (не загоняясь про псевдорандом и равномерное распределение), то есть сто тысяч вариантов. После этого полученное число надо сравнить с одним из значений (причём неважно, будет это 0, 1, или 46 398), поэтому равенство должно быть строгим.
Чем неравенство лучше? Рассмотрим вероятность 0,003% (не стал брать 0,002% из-за напрашивающейся идеи сократить). По логике выше нужно выбрать три числа (пусть будут 1,2,3) и писать условие if(x==1 || x==2 || x==3).
А теперь фокус, это условие эквивалентно if (x<=3). Думаю пояснять, почему "x<=3" лучше использовать, чем "x==1 || x==2 || x==3", не надо.
Я уж молчу о том, что параметры рандомизатора неизвестны. С чего, например, взято, что он рандомит целые числа? Скажем, если рандомится два знака после запятой, то со строгим равенством получим шанс уже 1 к 10 миллионам. А с нестрогим - все те же 1 к 100000. Учитывать параметры? А они известны?
PS И да, в C++ (про чистый С хз) в качестве параметра для rand передается семя рандома, а не верхняя граница диапазона.
PPS Если можно получить 0, то неравенство везде заменяется на строгое.
В С++ (как и в чистом С) семя рандома передаётся в srand - инициализацию генератора, а в rand как раз передаётся верхняя граница диапазона.
Неравенство лучше в случае 0.003% и 0.002% из-за наглядности и краткости. Но это другой случай, т.к. там условию удовлетворяет несколько значений, а не одно.
Если можно получить только целые ненулевые числа, то два условия (x==1, x<=1) действительно эквивалентны (хотя строгое равенство будет более наглядным), но тогда почему там именно должно быть нестрогое неравенство? Можно использовать как равенство, так и неравенство - именно к этому я и докопался.
Если рандомится два знака после запятой (не будем вдаваться в вычисления с плавающей точкой) и сравнения
esli random = 0,001 to
то получим неверное условие. Если же рандомятся три знака после запятой в положительных числах, то верхняя граница, равная 100, даст вероятность 1 к 100000. Если же используются неотрицательные числа, т.е. есть ноль, то нестрогое сравнение даст шанс 2 к 100000, или 1 к 50000, в то время как строгое неравенство оставит те же 1 к 100000 вне зависимости от имплементации.
P.S. Как раз для лучшей читаемости шанса "один на некоторое число" и стоит пользоваться строгим равенством.
esli random = 0,001 to
Вот здесь явно подразумевался рандом (не в целых числах) на промежутке (0;100]. Другое дело, что это будет давать нужную вероятность только при рандоме с тремя и только тремя знаками после запятой.
А вот с <= будет работать правильно при рандоме с любым количеством знаков после запятой (не меньше трех, разумеется).
Если же подразумевался рандом на промежутке [0;100), то неравенство меняется на строгое и все опять работает правильно.
Я же сказал - я не программист. Индусы ведь не программисты, верно?
esli state ne = 1 to
esli random = 0,001 to
zaezjauet tehnika.zrk.patriot
state = 1
konetz esli
konetz esli
esli state ne = 1 to
esli random ne = 0,001 to
zaezjauet tehnika.gorodskaya.avtobus
state = 0
konetz esli
konetz esli
state = 0
И в бесконечный цикл его. И запрятать это всё в функцию, вызываемую через GOTO.
Ну ты и извращенец. Зачем тебе так много Esli?И так можно:
publichiya funkciya SospavnitAvtobus(){
zahuyariniyTransport ZahuyariniyTransport = new zahuyariniyTransport();
Chislo RandomnoeChislo = ZahuyaritRandomnoeChislo();
Esli(Chislo != 0,001){to;}
Inache{ZahuyariniyTransport = new tehnika.zrk.patriot();}
}
Хотя возможно я написал говнокод.
Сразу видно, учился по старым учебникам хрен знает у кого. Ты что, про перспективные языки программирования не слыхал? Вот как надо!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--------------------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<------------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>
Ты тип Chislo (а не переменную RandomnoeChislo) сравниваешь с 0,001
Так что да, тот ещё говнокод.
min = 1;
max = 1000;
x = random(min,max);
if ( x=1 ) {
obj = tehnika.zrk_patriot;
} else {
obj = tehnika.bus;
}
А зачем юзать переменную, когда можно сразу функцию создания объекта на сцене вызвать с параметром tehnika?)
'=' присваивает значение (ну, в Python точно), в твоем случае должно быть '==', хотя на самом деле '<='
а) Рандом совершенно не обязательно вернет целое число.
б) Даже если рандом возвращает целое число, при получении вероятности "m из n" потребуется m сравнений типа "равно" либо всего одно сравнение типа "меньше или равно" (если рандом может выдать нуль - сравнениe типа "меньше"). В нашем случае m и так равно 1, но что, если нужная вероятность вырастет?
а) на вопрос никак не влияет.
б) если нужная вероятность вырастет, то условие сравнения придётся менять в обоих случаях.
а) Влияет, и еще как. Для примера: однократное сравнение-равенство на промежутке (0;100] даст один шанс на 100 при рандоме целых чисел, один шанс на 1000 при рандоме чисел с одним знаком после запятой, один шанс на 10000 при двух знаках и так далее... В то же время условие "x<=1" всегда даст 1 шанс на 100 (при рандоме на этом промежутке). Ну и условие "x<=0.001" всегда даст 1 шанс на 100000, если рандомятся числа минимум с тремя знаками.
б) Ну все-таки, это был "общий вид". Оттуда в общем-то нужно было понять, что "равно" практически всегда хуже, чем "меньше или равно" и никогда не лучше. Соответственно имеет смысл использовать его везде.
а) Зато сравнение-равенство будет верным вне зависимости от того, включена нижняя граница или верхняя, и при чтении кода сразу понятно, что нужно единственное значение.
б) Я понял, что Вы пытаетесь сказать, но всё же пока что останусь при своё мнении насчёт предпочтения равенства неравенству в случае единственного значения.