Имя: Пароль:
LIFE
Юмор
OFF: Пошел программист за покупками
, , ,
0 Ненавижу 1С
 
гуру
12.08.11
09:43
1. 11 33% (22)
2. 1 27% (18)
3. 10 27% (18)
4. -1 9% (6)
5. 3% (2)
Всего мнений: 66

Жена посылает мужа-программиста в магазин. Даёт ценные указания:
-Купи палку колбасы. Если будут яйца, купи десяток.
Приходит счастливый муж, протягивает десять палок колбасы.
Жена:-???
Муж:
-Яйца были!

Сколько колбасы должен был купить программист?
142 Сергей Д
 
12.08.11
11:11
(141) С++ это зло
143 Asmody
 
12.08.11
11:12
(141) [А еще некошерно передавать результат одной функции как параметр другой без промежуточной переменной] — ага, функциональщикам это расскажи
144 Ненавижу 1С
 
гуру
12.08.11
11:13
(137) зря
смотри как удобнее было бы в запросе вместо
ВЫБОР
 КОГДА А=1 ТОГДА Б
 КОГДА А=2 ТОГДА В
 ИНАЧЕ 0
КОНЕЦ КАК П

писать:
А=1?Б:А=2?В:0 КАК П
145 Ненавижу 1С
 
гуру
12.08.11
11:13
(141) нормально все, надо не лениться писать const почаще
146 Jolly Roger
 
12.08.11
11:14
(137) а ну понятно. а то уж я испугался :-)
147 Stepa86
 
12.08.11
11:14
(141) тут мнения расходятся, видел рекомендации по убиению промежуточных переменных (то ли у Фаулера, то ли у Макконнелла) и видел рекомендации по их использованию (у Мартина).

Если функция меняет состояние системы и из ее имени это не очевидно (или делает кроме основной операции еще чо нить), то надо оторвать несколько яиц программисту
148 Xapac
 
12.08.11
11:14
(141)мда
149 Stepa86
 
12.08.11
11:16
(144) я не уверен, что даже после минутной медитации правильно понял второй вариант
150 Адинэснег
 
12.08.11
11:16
151 Дикообразко
 
12.08.11
11:18
(80) патч был в (11)
152 Jolly Roger
 
12.08.11
11:18
(141) кстати да. в этом случае вполне согласен. проверка остатка, в принципе, трудоемкая процедура, поэтому ее лучше было бы вынести в отдельную строку...
153 Jolly Roger
 
12.08.11
11:18
+(152) в смысле, ресурсоемкая
154 Ненавижу 1С
 
гуру
12.08.11
11:19
155 dmpl
 
12.08.11
11:23
(142) C++ - это инструмент. Опасный в использовании, зато позволяющий сделать почти все. Вплоть до указания, какие инструкции процессора использовать.

(147) 1. Все лишние переменные компилятор уберет сам. Так что при грамотном использовании нет даже проблем с повышенным расходом памяти (эти переменные либо имеют регистровый тип, либо точно так же временно создаются и потом уничтожаются).

2. Программист может об этом и не знать - взял базовый класс, немного поменял и... попал. Я видел в одном драйвере 3 раза перегруженный оператор =, который в итоге писал значение не только в переменную, но и в PCI-устройство...
156 KishMish
 
12.08.11
11:24
(0) Кто сказал что надо купить колбасы там же написано "десяток". Может это название такое Молоко "Десяток"... может надо было принести несколько купюр по 10 рублей.
Задача поставлена не корректно
157 Сергей Д
 
12.08.11
11:24
(152) Ну тогда ассемблер еще лучше. Вообще никаких ограничений.
158 Сергей Д
 
12.08.11
11:26
(156) Нечеткая логика, однако (есть такой раздел математики)
159 Stepa86
 
12.08.11
11:26
(155) 1. там загвозка не в экономии памяти, а в удобстве для рефакторинга и/или для чтения
2. это примерно то же самое, что не проезжать перекресток на зеленый, потому что есть идиоты, гоняющие на красный
160 luckyluke
 
12.08.11
11:26
(156) да, эту ситуацию мы уже рассмотрели.
161 байт
 
12.08.11
11:26
ПалкаКолбасы = 0;
Если БудутЯйца Тогда
  ПалкаКолбасы = 10;
Иначе
  ПалкаКолбасы = 1;
КонецЕсли;

БудутЯйца = Истина;
ПалкаКолбасы =

10
162 байт
 
12.08.11
11:28
Посмотрел ветку там оказывается уже все накодили)))))))))))
163 Сергей Д
 
12.08.11
11:28
(161) Еще раз. Кто вам сказал, что словие поставлено именно так. В задаче сказано: купи палку колбасы. БЕЗУСЛОВНО. И потом: ЕСЛИ ... ТО ... Так что 1 палку надо купить обязательно.
164 Dismk
 
12.08.11
11:28
Если не накручивать, то 11

11
165 VasiL-V
 
12.08.11
11:31
не иначе

11
166 Erhov_egor
 
12.08.11
11:34
точно

10
167 Сергей Д
 
12.08.11
11:35
Активность спала. Все едят колбасу.
168 dmpl
 
12.08.11
11:39
(157) К сожалению, уже есть ограничения. Например, самомодифицирующийся код в лучшем случае исполняется медленно, в худшем - глючит.

(159) 1. Ну, тут не надо бросаться в крайности. Если промежуточная переменная улучшит читаемость кода - она должна быть создана.

2. Тот драйвер, похоже, писал истинный адепт ООП... что недалеко от идиота. Я бы понял 1 перегрузку - действительно удобно использовать оператор = для записи в PCI-устройство и чтения из него. Но 3 раза перегружать - это уже слишком.

Тут ведь основная проблема в том, что при использовании чужого кода все равно нельзя точно предсказать, когда меняется состояние в чужом коде, а когда нет... и когда оно вдруг начнет меняться. А отдельная переменная исключает подобную неоднозначность, и становится как-то пофиг - меняется там что-то или нет.
169 zGainer
 
12.08.11
11:40
Попросили запостить :)

колбаса=0 (по умолчанию)
колбаса=колбаса+1
если есть яйца
      колбаса=колбаса+10

11
170 MaxS
 
12.08.11
11:48
(2) Наверное хороший программист, если есть карманные деньги на 10 палок колбасы.

Сейчас если подумать, то 11. Но давно, когда это был не (бо... муз. инструмент), все считали, что 10.

10
171 Xapac
 
12.08.11
11:50
у кого 11 те не правильные программисты
172 Xapac
 
12.08.11
11:50
(171)Верней у кого 10-ть.
173 Stepa86
 
12.08.11
11:52
(172) а у кого 1?
174 MaxS
 
12.08.11
11:53
(173) значит это ещё не программист.
175 Xapac
 
12.08.11
11:54
(173)
Поулчается код:

УсловиеНачатьИначе
 КпитьКолбасы(1)
Если естьЯйца Тогда
 КупитьКолбасы(10)
УсловиеКонец;
176 MaxS
 
12.08.11
12:05
По моему, чтобы жену не обидеть, он должен не 11, а 10 купить. Т.к. они всегда вначале одно говорят, потом другое. ;)
Сидя на заднем сиденье авто показывает рукой направо и говорит поворачивай вон туда, налево.
177 Xapac
 
12.08.11
12:07
(176)Тогда он вообще дурак)
А вообще это не программист должен был так купить, а сисадмин, который четко выполнял по мануалу.
178 Aprobator
 
12.08.11
13:13
пятницо так пятницо

Процедура КупитьКолбасы()
    Если ЕстьЯйца() Тогда
        КупитьДесяток()
    Иначе
        КупитьПалку()
    КонецЕсли;
КонецПроцедуры

10
179 Jofa
 
12.08.11
13:33
Товар = Справочник.Номенклатура.НайтиПоНазванию("Колбаса");

Купить(Товар, 1);

Если ЕстьЯйца() Тогда
   Купить(Товар, 10);
КонецЕсли;

11
180 n0ther
 
12.08.11
13:34
люблю колбасу

11
181 Lenka_Boo
 
12.08.11
13:34
В ТЗ недостаточно информации.
"-Купи палку колбасы. Если будут яйца, купи десяток. "
Отсутствует И/ИЛИ
Если  "И" по-умолчанию, то 11 палок. "ИЛИ" - 10.
182 Jofa
 
12.08.11
13:36
(181)Нам что дали то и перепутали . .
183 Seeker
 
12.08.11
13:43
11
сначала 1 потом +10.

11
184 БалбесВ1с
 
12.08.11
13:47
Кто возьмется написать конфу 1С:Яйцо или колбаса?
Наработки есть,см.ветку.
185 Сергей Д
 
12.08.11
14:14
(184) Колбасу уже давно съели.
186 ТатьянаТВ
 
12.08.11
15:48
Это какая больница?)
187 Дикообразко
 
12.08.11
15:48
(186) это программерская пятницо
188 opty
 
12.08.11
16:01
ТЗ не соответсвует стандартам и допускает двоякое толкование исполнения задачи . На дороаботку
189 zender
 
12.08.11
16:30
очевидно

10
190 Stim213
 
12.08.11
16:35
сделаю за 8500р
191 wertyu
 
12.08.11
16:37
Здесь голосовалку прикрутили, чтобы утвердить решение демократическим путём?

Есть предложение открыть голосовалку по числу Пи:
1. 3.1415...
2. 3
3. 4
4. 10^100
5. 10^(10^100)
192 n0ther
 
12.08.11
16:39
(191)

over 9000
193 wertyu
 
12.08.11
16:40
(192) первым в поиске по сайту стоит гугл, а лурка там вообще нет
194 Vladimirr
 
12.08.11
16:40
11 никак не получается. Жена должна была сказать "купи ещё десяток" для этого.

//Функция возвращает число колбас для покупки, тип возвращаемого значения - число
//Параметры: ЕстьЯйца - тип Булево
Функция ВернутьКолбасу(ЕстьЯйца)
    Возврат ?(ЕстьЯйца,10,1);
КонецФункции

10
195 zavsom
 
12.08.11
16:41
Вылить шампунь в руку , намылить голову, повторить.
196 wertyu
 
12.08.11
16:43
(195) тогда прогу придёься ещё и за шампунем идти, если конечно сможет из цикла выйти
197 DJ Anthon
 
12.08.11
16:54
для подчеркивания идиотизма программистов

11
198 DJ Anthon
 
12.08.11
16:54
но по смыслу

10
199 DJ Anthon
 
12.08.11
16:56
она описывает тех задание, а не алгоритм, если чо...
200 luckyluke
 
12.08.11
16:58
(200)
201 MaxS
 
12.08.11
16:58
(188) тут главнее результат, т.е. продукт. Когда он есть, можно обсудить  детали и скорректировать будущее ТЗ.
202 ТатьянаТВ
 
12.08.11
16:59
Домой!!!!!!!!!! Выходные!!!!!!!!!!!

Траляляляляля
203 kutshai
 
12.08.11
17:30
я муж. и мне жалко нервов.

1
204 Stim213
 
12.08.11
17:32
(202)обрадуй нас, что у тебя дома нет интернета
205 marvak
 
12.08.11
17:34
(0)
это точно тупой и нетворческий и тупой быдлокодер.
так что...
двойка

10
206 salvator
 
12.08.11
17:35
Настоящий мужик берет прозапас.

11
207 marvak
 
12.08.11
17:36
(206)
десять палок, этот перебор, однозначно.
хотя... если он был импотентом, то мог взять замену своим супружеским обязанностям
208 kittystark
 
12.08.11
18:46
не!
на самом деле все было так не так, муж воспользовался рекурсией:

//-- код жены --
Перем Жена;
Перем Корзина;

Процедура Купить( кто, что, корзина = 0 ) Далее
// муж условно-постоянная величина, не надо заморачиваться со справочником
// в качестве параметра "кто" лучше использовать Перечисление.РодственныеОтношения.Муж

СписокПокупок = СоздатьОбъект("СписокЗначений");
СписокПокупок .ДобавитьЗначение(1,"Колбаса(палка)");
СписокПокупок .ДобавитьЗначение(10,"Яйцо");


//-- код мужа --
Функция ЕстьЯйца( икс ) далее

Процедура Купить( кто, что, корзина = 0 )
   Если ПустоеЗначение(корзина) = 1 Тогда
       Корзина = СоздатьОбъект("СписокЗначений");
   КонецЕсли;

   товар = "";
   количество = что.ПолучитьЗначение(1,товар);
   Корзина.ДобавитьЗначение(
           Мин( количество, Регистр.ПартииНаличие.СводныйОстаток(,товар,,,,"Количество")),
           товар);
   Если ЕстьЯйца(кто) = 1 Тогда
       Купить( кто, что.УстановитьЗначение(1,10), корзина );
   КонецЕсли;
КонецПроцедуры

Функция ЕстьЯйца( икс )
   возврат ?( икс = Перечисление.РодственныеОтношения.Муж,1,0);
КонецФукции

////уболтать жену не удалось,
////+переменная Жена не проинициализирована
//Купить(Жена, СписокПокупок, Корзина);

Я = Перечисление.РодственныеОтношения.Муж;
Купить(Я, СписокПокупок, Корзина);
Корзина.Выгрузить(Жена);


поэтому есть еще варианты:
-у него закончатся деньги,
-скупит всю колбасу,
-при огромных объемах колбасы и денег вылетит по переполнению стека/памяти
209 Asirius
 
12.08.11
19:41
Ответ три палки колбасы уже предлагали? Для совсем тру-прогов..
210 Escander
 
12.08.11
20:50
Кривая постановка допускающая многовариантную трактовку приводит к тому что у задачи несколько различных правильных ответов: 1, 10, 11.
211 Креатив
 
12.08.11
20:51
(0)Правда непонятно, что такое десяток?

1
212 VasilyKushnir
 
12.08.11
21:15
(210) Да  нет... не "Кривая постановка допускающая многовариантную трактовку" А "Кривая постановка допускающая лишь частичное решение задачи"
Смотрим;
"-Купи палку колбасы. " - отлично! купил палку.
"Если будут яйца, купи десяток." - купить десяток ЧЕГО? дальше решниия нет.

1
213 Escander
 
12.08.11
21:21
(212)ну типа каждый сам что ему будет удобнее то и поймёт.
214 VasilyKushnir
 
12.08.11
21:32
(213) :-)))))))) Ага:
жена говорит
- сходи в магазин - купи бутылку масла
муж приносит бутылку водку:
- бутылку взял, а на масло не хватило.
215 Escander
 
12.08.11
21:41
(214) не у вас чётко "бутылка масла", а вот было-бы так:
-Сходи купи бутылк масла, если будет оливковое - купи 2 бутылки.
Оливковое было в магазине, поэтому кроме бутылки подсолнечного купил 2 бутылки по 1л водки
216 VasilyKushnir
 
12.08.11
21:49
(215) Наверное только унас 2 бутылки == 2 бутылки водки (как само собой разумеющееся).
Сколько будет 0.5+0.5 любой иностранец скажет один. И только русский скажет литр.
217 Escander
 
12.08.11
21:53
(216) ну типа мы такие! На самом деле видел некоторых иностранцев.... в северных старнах с холодным климатом (Дания, норвегия, Финляндия) принято пить точно так-же как и у нас. Единственнгое там порядку поболее в мозгах у челов и например бухие за руль авто не полезут!
218 marty0701
 
12.08.11
22:11
Так то она ничего не описывает, жена - бух, выдала пару строчек... тут, кстати зависит от того как понял прог, ведь жена не говорила где точка или еще что, тупо выпалила весь текст, так что.... если прог понял как запятую, то 10, если осознал, что точка, то 1, если моск замылился, купил 10+1
219 Zaid
 
23.08.11
15:09
Функция ПокупкаКолбасы()
  Количество = 1;
  Если ЕстьЯйца() Тогда
     Количество = 10;
  КонецЕсли;
  Возврат Количество;
Конецфункции

10
220 nbIx
 
23.08.11
15:12
(219)+1

10
221 Mikeware
 
23.08.11
15:16
Программист из банка не вышел на работу. Через день начальство заволновалось (ну, конфиденциальность, безопасность и все такое...), вызвали Службу безопасности. Те поехали к нему домой. Звонят - никто не открывает. Но вроде какие-то звуки есть. Решили ломать дверь. Взломали дверь – а программист сидит в ванне, вода холодная, сам – синий, в руках почти пустой тюбик шампуня. На тюбике написано- "Выдавить шампунь, намылить голову, смыть, повторить..."
222 Lyekka
 
23.08.11
15:21
Замечание про десяток относилось к яйцам.
а не к колбасе.

1
223 Rovan
 
гуру
23.08.11
15:22
(217) пить они может и пьют только врядли у них это так сильно вошло в фольклор!
наверно иностранный официант не везде поймет что вы заказали если просите "Для начала мне просто 100 грамм"
224 Humandra
 
23.08.11
15:29
На самом деле, программист была и жена. Но начинающий видимо.

Она спросила:
если будут яйца, купи десяток.

Не-программист попросит: купи 1 колбасу и 10 яиц.
А она позаботилась о том, чтобы метод:
КупитьЯйца
не вывалился с эксепшионом при попытке купить несуществующие объекты :))))

-1
225 vesh
 
23.08.11
15:29
Разные предложения. Задания умете читать. Программист оно и задания должен уметь понимать.
Жена сказала ей надо "Зашибись", а остальное не важно

1
226 Humandra
 
23.08.11
15:32
(225) Но программистом была начинающим и невнимательным.
Потому что упустила обработку исключительных ситуаций при покупке 1 колбасы.
И не учла, что покупаемый во второй процедуре объект надо явно объявлять по типу (или язык был нетипизированный?)
227 Aprobator
 
23.08.11
15:45
внимание вопрос - решение подобной проблемы у 1С ника занимает уже 11 дней - какова эффективность данного работника?
228 Leeloo
 
23.08.11
16:25
Купить(ПалкаКолбасы);
   Если ТипЗначенияСтр(Десяток)="Число" Тогда
        Для Н=1 по Десяток Цикл
             Купить(ПалкаКолбасы);
        КонецЦикла;
   ИначеЕсли ТипЗначенияСтр(Десяток)="Яйцо" Тогда
        Для Н=1 по Десяток Цикл
             Купить(Яйцо);
        КонецЦикла;
   Иначе
        Купить(Десяток);
   КонецЕсли;

11
229 Leeloo
 
23.08.11
16:27
Купить(ПалкаКолбасы);
Если ЕстьЯйца()=1 Тогда
  Если ТипЗначенияСтр(Десяток)="Число" Тогда
       Для Н=1 по Десяток Цикл
            Купить(ПалкаКолбасы);
       КонецЦикла;
  ИначеЕсли ТипЗначенияСтр(Десяток)="Яйцо" Тогда
       Для Н=1 по Десяток Цикл
            Купить(Яйцо);
       КонецЦикла;
  Иначе
       Купить(Десяток);
КонецЕсли;

  КонецЕсли;

1
230 Aprobator
 
23.08.11
16:40
*с тоской вздыхая* не видать программисту нормальной яичницы с колбасой.
231 Armin
 
23.08.11
16:46
(228) Такой раздутый алгоритм приводит к тому, что программист начинает тупить когда его посылают в магазин за колбасой. =)
Вот оптимизированный ваниант:

КупитьКолбасы(?(ЕстьЯйца=Истина,10,1));
232 Sj
 
23.08.11
16:54
ПалкаКолбасы = 10 & ЕстьЯйца + 1
233 Megas
 
23.08.11
16:58
10 - 11 в зависимости от того на чём он программист.
К примеру в C счёт с 0 а в pascal с 1

10
234 Jaffar
 
23.08.11
17:49
кстати, в оригинале http://community.otseti.ru/comment/reply/7/747.htm - "Дорогой, купи, пожалуйста, палку колбасы, И (однозначно И!!! - никаких ИЛИ!!!) если будут яйца, то купи десяток."
(219) функция называется не ПокупкаКолбасы(), а ПокупкаВМагазине(), а процедура КупитьКолбасу() там идет до всяких Если. Поэтому -

11
235 Ненавижу 1С
 
гуру
23.08.11
21:41
Смотрю тема затронула за живое, а я только из отпуска вернулся ))
236 Megas
 
24.08.11
09:44
(235) О да я на автора не обратил внимание -)
Тогда ответ :
0 или Null или Неопределено:  вообще всё зависит от того что он увидел по дороге. =)

PS Он одинесником был =)

237 окси
 
24.08.11
09:46
Умора.
238 miki
 
24.08.11
09:57
(234)в оригинале было ", а если...".
Иначе теряется вся соль и появляются бредовые инсинуации типа сабжа.
Да и сама фраза с "И" режет слух - не инструктируют так бабы мужиков.
239 Повелитель
 
24.08.11
10:04
(238)
Правильно, настоящие жены программистов 1с, пишут инструкцию для покупок, только 1с-совместимо :))
240 MaxS
 
24.08.11
13:29
Если бы в 1С функции учитывали жизненный опыт, опыт поколений, тогда программист купил бы палку колбасы и 10 яиц.

Но до искусственного интеллекта в персональных компах ещё далеко.
241 Jaffar
 
24.08.11
23:38
(238) да, я слышал именно такую версию, но гугль не смог ее найти - пришлось довольствоваться союзом "И".
(240) "Но до искусственного интеллекта в персональных компах ещё далеко."
а в одинэсниках? :-)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший