Пасхалка

Я работаю в фирме, выполняющей различные госзаказы для Министерства Обороны в IT-области. Создаем 3D-обучалки для солдат. Вечер пятницы, до конца рабоче для ещё целый час. Сижу, моделирую в своё удовольствие, так как всю "текучку" уже выполнил. Открыл свою модель, всё равно уже доделал там всё. Залез в отделение за механиком-водителем танка, поставил там огромную плазму, красный диван и систему 5+1. Любуюсь. Вдруг влетает шеф. "Срочно! Нужны модели этих деталей к вечеру!". Ну я по привычке ctrl+S и вперед, выполнять указания. Через час успел со всем справиться, довольный собираюсь домой. Мне перед уходом говорят "выложи в общую сетку всё, что намоделил". Я выложил и довольный ушел домой. Сейчас еду в автобусе и понимаю. Моя модель шла с пометкой "завершенная", её и дальше отправить не глядя могли. А на следующих этапах только окружение и подписи делают, некогда им внутрь заглядывать. Короче говоря. Дорогой безимянный солдат, который найдет в своей обучалке по танку телевизор: ты прости, но в реальности его там не будет.
Вы смотрите срез комментариев. Показать все
5
Автор поста оценил этот комментарий

Тестировщиков у вас, я как понимаю, нэма?

раскрыть ветку (39)
4
Автор поста оценил этот комментарий

Мы сами себе тестировщики))

раскрыть ветку (38)
5
Автор поста оценил этот комментарий

Пичаль-беда) Но вообще телевизор в танке лучше, чем кенгуру, что сбивают вертолет)

4
Автор поста оценил этот комментарий
Делал модель автовокзала , и у меня с 0.001% вместо автобуса мог выехать зрк пэтриот
раскрыть ветку (36)
1
Автор поста оценил этот комментарий
Как?
раскрыть ветку (35)
3
Автор поста оценил этот комментарий
Я не программист, но

esli random = 0,001 to
 zaezjauet tehnika.zrk.patriot

konetz esli

раскрыть ветку (34)
2
Автор поста оценил этот комментарий
Только рандом должен быть меньше или равен, а не просто равен.

И где блок inache?

раскрыть ветку (19)
1
Автор поста оценил этот комментарий

Чтобы получить вероятность 0.001% (один на сто тысяч), нужно строгое равенство.


Примерно так:

x = rand(100 000);

if (x == 1)

__zrk.patriot

else

__avtobus


Для языков С/С++ rand(100000) даст значение от 0 до 99 999 (не загоняясь про псевдорандом и равномерное распределение), то есть сто тысяч вариантов. После этого полученное число надо сравнить с одним из значений (причём неважно, будет это 0, 1, или 46 398), поэтому равенство должно быть строгим.

раскрыть ветку (9)
1
Автор поста оценил этот комментарий
Но ведь если можно получить только целые ненулевые числа, то "х==1" и "х<=1" эквивалентны.

Чем неравенство лучше? Рассмотрим вероятность 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, то неравенство везде заменяется на строгое.

раскрыть ветку (8)
1
Автор поста оценил этот комментарий

В С++ (как и в чистом С) семя рандома передаётся в 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. Как раз для лучшей читаемости шанса "один на некоторое число" и стоит пользоваться строгим равенством.

раскрыть ветку (7)
Автор поста оценил этот комментарий
esli random = 0,001 to

Вот здесь явно подразумевался рандом (не в целых числах) на промежутке (0;100]. Другое дело, что это будет давать нужную вероятность только при рандоме с тремя и только тремя знаками после запятой.

А вот с <= будет работать правильно при рандоме с любым количеством знаков после запятой (не меньше трех, разумеется).

Если же подразумевался рандом на промежутке [0;100), то неравенство меняется на строгое и все опять работает правильно.

раскрыть ветку (6)
Автор поста оценил этот комментарий

Про количество знаков соглашусь.

раскрыть ветку (5)
Автор поста оценил этот комментарий
В паскале блок inache не обязателен
раскрыть ветку (8)
Автор поста оценил этот комментарий
Но ведь, если не поехал "патриот", то должен ехать автобус...
раскрыть ветку (7)
Автор поста оценил этот комментарий

Я же сказал - я не программист. Индусы ведь не программисты, верно?


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.

раскрыть ветку (6)
Автор поста оценил этот комментарий

Ну ты и извращенец. Зачем тебе так много Esli?И так можно:


publichiya funkciya SospavnitAvtobus(){


zahuyariniyTransport ZahuyariniyTransport = new zahuyariniyTransport();

Chislo RandomnoeChislo = ZahuyaritRandomnoeChislo();


Esli(Chislo != 0,001){to;}


Inache{ZahuyariniyTransport = new tehnika.zrk.patriot();}


}

Хотя возможно я написал говнокод.

раскрыть ветку (5)
Автор поста оценил этот комментарий

Сразу видно, учился по старым учебникам хрен знает у кого. Ты что, про перспективные языки программирования не слыхал? Вот как надо!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--------------------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-----.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<----------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<--.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------------------------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<------------------------------------------------------------------------------------------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<++++++++++++++.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<-------.>[-]>[-]<<[->+>+<<]>>[-<<+>>]<---.>

раскрыть ветку (3)
Автор поста оценил этот комментарий

Ты тип Chislo (а не переменную RandomnoeChislo) сравниваешь с 0,001


Так что да, тот ещё говнокод.

Автор поста оценил этот комментарий

min = 1;

max = 1000;

x = random(min,max);

if ( x=1 ) {

     obj = tehnika.zrk_patriot;

} else {

     obj = tehnika.bus;

}

раскрыть ветку (4)
Автор поста оценил этот комментарий

А зачем юзать переменную, когда можно сразу функцию создания объекта на сцене вызвать с параметром tehnika?)

раскрыть ветку (3)
Автор поста оценил этот комментарий

Для читаемости.

Автор поста оценил этот комментарий

Это всё для наглядности. Я же не знаю, какая структура объектов в реальной программе.

Автор поста оценил этот комментарий

В некоторых языках можно и так:


obj = random(1,1000)=1 ? tehnika.zrk_patriot : tehnika.bus;

Автор поста оценил этот комментарий

'=' присваивает значение (ну, в Python точно), в твоем случае должно быть '==', хотя на самом деле '<='

раскрыть ветку (8)
Автор поста оценил этот комментарий

Откуда меньше-то?

раскрыть ветку (7)
Автор поста оценил этот комментарий

а) Рандом совершенно не обязательно вернет целое число.

б) Даже если рандом возвращает целое число, при получении вероятности "m из n" потребуется m сравнений типа "равно" либо всего одно сравнение типа "меньше или равно" (если рандом может выдать нуль - сравнениe типа "меньше"). В нашем случае m и так равно 1, но что, если нужная вероятность вырастет?

раскрыть ветку (6)
Автор поста оценил этот комментарий

а) на вопрос никак не влияет.

б) если нужная вероятность вырастет, то условие сравнения придётся менять в обоих случаях.

раскрыть ветку (5)
Автор поста оценил этот комментарий

а) Влияет, и еще как. Для примера: однократное сравнение-равенство на промежутке (0;100] даст один шанс на 100 при рандоме целых чисел, один шанс на 1000 при рандоме чисел с одним знаком после запятой, один шанс на 10000 при двух знаках и так далее... В то же время условие "x<=1" всегда даст 1 шанс на 100 (при рандоме на этом промежутке). Ну и условие "x<=0.001" всегда даст 1 шанс на 100000, если рандомятся числа минимум с тремя знаками.

б) Ну все-таки, это был "общий вид". Оттуда в общем-то нужно было понять, что "равно" практически всегда хуже, чем "меньше или равно" и никогда не лучше. Соответственно имеет смысл использовать его везде.

раскрыть ветку (4)
Автор поста оценил этот комментарий

а) Зато сравнение-равенство будет верным вне зависимости от того, включена нижняя граница или верхняя, и при чтении кода сразу понятно, что нужно единственное значение.


б) Я понял, что Вы пытаетесь сказать, но всё же пока что останусь при своё мнении насчёт предпочтения равенства неравенству в случае единственного значения.

раскрыть ветку (3)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку