Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Прикольная задачка
 
Программист Вася Пупкин решил написать программу, которая считает ворон, а потом определяет какой среди них процент белых.
После того как программа была написана и протестирована Вася отдал ее пользователю Пете Юзерову.
Через некоторое время Петя сообщил, что если за время работы программы ни одной вороны посчитано не было, то программа "ломается".
После трехчасового дебага Вася нашел строчку в которой происходит проблема:
rate = (100 * white)/total;
(программа написана на С)
Мимо проходил опытный программист Коля Хакеров и предложил решение проблемы, которое не требовало условного перехода.
Вопрос: что предложил Коля?
 
rate = (100 * white)/(total+!total);
Если ни одной вороны не подсчитано, получится rate = 0/1
 
а еще есть оператор "?"

p.s. "хакеровых" мочить, ибо внутри при любом решении задачи будет условный переход, так нафига программистов путать извратными решениями?
 
Цитата
buggzy пишет:
а еще есть оператор "?"
Так он ведь условный?

Цитата
buggzy пишет:
p.s. "хакеровых" мочить, ибо внутри при любом решении задачи будет условный переход, так нафига программистов путать извратными решениями?
Что ты имеешь в виду под "внутри"? На асме?
 
> Так он ведь условный?

в задаче было "условный переход". "?" - это условный переход?

> Что ты имеешь в виду под "внутри"? На асме?

угу. что-то мне подсказывает, что у интела нет инструкции "0 если 0, 1 если не ноль", и оно транслируется в несколько инструкций. щаз проверю, что с твоим кодом компилятор делает :)

....

неа, обходится без условных переходов: cmp и sete. хитрюги :)
 
Frozen, А каково было решение Коли Хакерова?
 
а коля try except заюзал! :)
 
На самом деле решений много, вот мое:
rate = 100 * (white + (white == 0))/(total + (total == 0))
 
[QUOTE]buggzy пишет:
а коля try except заюзал! :) [ /QUOTE]
Это ты к чему?
 
Цитата
Frozen пишет:
На самом деле решений много, вот мое:
rate = 100 * (white + (white == 0))/(total + (total == 0))
(white == 0) - совершенно излишне. Это получается, что если ни одной вороны не подсчитано, то 100% белых? По-моему правильным был бы ответ 0%
а (total == 0) - по результату то же самое, что и !total
 
Кстати, можно предположить, что total всегда будет равно 0, потому что в природе белых ворон не бывает :)
 
total всегда равно 0? по-моему, ты чуток перегрузился, пытаясь оптимизировать программу echo ;)
 
угу, опечатался.
 
А если ты хотел сказать, что white всегда равно нулю, то твоя формула
rate = 100 * (white + (white == 0))/(total + (total == 0))
будет давать неверный результат. 100*1/total
 
Людям свойственно исправлять одни ошибки на другие, это я к тому, что это уже второе мое решение, и тоже не правильное :(
Страницы: 1
Читают тему