Программисты, поясните что это
-
- Posts: 11
- Joined: 25 Apr 2006 06:48
- Location: Japan
Программисты, поясните что это
Программисты, поясните что это, please.
задачка для разминки мозгов для программистов, знающих язык C
Дан текст программы на C. Требуется найти три способа изменить в нем один
символ (не добавить, не убрать, не переставить - изменить один символ), так,
чтобы программа стала печатать 20 звездочек.
Oдин ответ найти относительно легко. Постарайтесь найти три разных.
правильных ответа есть только три, насколько известно.
Программа:
main()
{
int i, N=20;
for(i = 0 ; i < N ; i--)
printf("*");
}
_________________
задачка для разминки мозгов для программистов, знающих язык C
Дан текст программы на C. Требуется найти три способа изменить в нем один
символ (не добавить, не убрать, не переставить - изменить один символ), так,
чтобы программа стала печатать 20 звездочек.
Oдин ответ найти относительно легко. Постарайтесь найти три разных.
правильных ответа есть только три, насколько известно.
Программа:
main()
{
int i, N=20;
for(i = 0 ; i < N ; i--)
printf("*");
}
_________________
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Re: Программисты, поясните что это
Ryzhusya wrote:Программисты, поясните что это, please.
задачка для разминки мозгов для программистов, знающих язык C
Дан текст программы на C. Требуется найти три способа изменить в нем один
символ (не добавить, не убрать, не переставить - изменить один символ), так,
чтобы программа стала печатать 20 звездочек.
Oдин ответ найти относительно легко. Постарайтесь найти три разных.
правильных ответа есть только три, насколько известно.
Программа:
main()
{
int i, N=20;
for(i = 0 ; i < N ; i--)
printf("*");
}
_________________
вообщето она и так 20 должна печатать.
имеется ввиду чтото типа
Code: Select all
int i, N=21;
for(i = 0 ; i < N ; i--)
Code: Select all
int i, N=20;
for(i = 0 ; i <= N ; i--)
Code: Select all
int i, N=20;
for(i = -1 ; i < N ; i--)
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 2001
- Joined: 10 Nov 2004 00:34
- Location: MD
Re: Программисты, поясните что это
A. Fig Lee wrote:вообщето она и так 20 должна печатать.
Должна - не должна, а напечатает гораздо больше 20-ти.
-
- Уже с Приветом
- Posts: 2001
- Joined: 10 Nov 2004 00:34
- Location: MD
-
- Уже с Приветом
- Posts: 1609
- Joined: 03 Feb 2004 11:19
- Location: Moscow
-
- Уже с Приветом
- Posts: 2001
- Joined: 10 Nov 2004 00:34
- Location: MD
-
- Уже с Приветом
- Posts: 8255
- Joined: 23 Jul 2003 03:53
- Location: SPb - KW - NY - CT - MD
Вопрос, конечно, интересный...
Но у меня, почему-то, впечатление, что именно любители такого рода головоломок написали огромное количество кода, с которым приходится сталкиваться ежедневно. Когда этот код рано или поздно перестает работать, то самым разумным и быстрым оказывается - просто выбросить его к чертовой матери, и переписать заново, чтобы получился именно код, а не головоломка...![angry :angry:](./images/smilies/angry.gif)
Но у меня, почему-то, впечатление, что именно любители такого рода головоломок написали огромное количество кода, с которым приходится сталкиваться ежедневно. Когда этот код рано или поздно перестает работать, то самым разумным и быстрым оказывается - просто выбросить его к чертовой матери, и переписать заново, чтобы получился именно код, а не головоломка...
![angry :angry:](./images/smilies/angry.gif)
LG - Life's good.
But good life is much better.
But good life is much better.
-
- Уже с Приветом
- Posts: 15007
- Joined: 14 Jun 2005 11:50
- Location: Ukraine
SVK wrote:Вопрос, конечно, интересный...
Но у меня, почему-то, впечатление, что именно любители такого рода головоломок написали огромное количество кода,
Сомневаюсь. Такие задачи очень любят чистые теоретики. На практике нужно решать строго противоположные задачи повернуть мозги в противоположную сторону достаточно сложно.
с которым приходится сталкиваться ежедневно. Когда этот код рано или поздно перестает работать, то самым разумным и быстрым оказывается - просто выбросить его к чертовой матери, и переписать заново, чтобы получился именно код, а не головоломка...
Угу. Некоторые считают что
for (i=0,b=2,c=3;keyPress();i++){чего-то там} жутким хакерским приемом и устраивают истерику что сейчас он по-хакерски пишет, а завтра топор принесет.
-
- Уже с Приветом
- Posts: 8255
- Joined: 23 Jul 2003 03:53
- Location: SPb - KW - NY - CT - MD
KP580BE51 wrote:Угу. Некоторые считают что
for (i=0,b=2,c=3;keyPress();i++){чего-то там} жутким хакерским приемом и устраивают истерику что сейчас он по-хакерски пишет, а завтра топор принесет.
Ну, не надо передергивать.
![No-No! :nono#:](./images/smilies/nono.gif)
1) про топоры никакой речи, и даже никаких намеков, вообще не было - замечание просто игнорируется
2) насчет исходной "головоломки" - пояснение: претензии вызывает абсолютно бессмысленное требование исправить явную ошибку в коде "с помощью изменения одного символа кода" - ???!!!
![mad :х](./images/smilies/mad.gif)
![angry :angry:](./images/smilies/angry.gif)
Таких теоретиков нельзя подпускать на пушечный выстрел к реальной работе.
3) к примеру от KP580BE51 вообще никаких особых претензий и нет. Ну кроме как: в сколько-нибудь серьезном проекте названия переменных b, c, и даже i говорят обычно о полном отсутствии дум о будущей судьбе этого кода... В общем - "гори оно огнем, когда я получу свои почасовые..."
4) в качестве другого примера, из сотен других, которые я имел в виду в первоначальном постинге, могу привести такой реальный фрагмент (с заменой переменных на чуть более абстрактные имена):
Code: Select all
++(*((ULONG*)((char*)(((PSPECIALENTRYRECORD)
(prb123->spRecordKey))->spRecordID)
+sizeof(RecordID)-sizeof(ULONG))));
Я действительно устроил истерику в компании, когда мне пришлось разбираться, почему программа с такими вот фрагментами иногда выдает сомнительные результаты после нескольких лет якобы успешного использования. Мне милостливо разрешили эти места исправить.
Немного спустя я решил проверить по системе архивирования версий, откуда этот код произошел. Оказалось, лет 10 назад его написал мой нынешний начальник...
![Умник :gen1:](./images/smilies/bow.gif)
![My respect :hat:](./images/smilies/hat.gif)
LG - Life's good.
But good life is much better.
But good life is much better.
-
- Уже с Приветом
- Posts: 15007
- Joined: 14 Jun 2005 11:50
- Location: Ukraine
SVK wrote:3) к примеру от KP580BE51 вообще никаких особых претензий и нет.
Все уже сказали.
Ну кроме как: в сколько-нибудь серьезном проекте названия переменных b, c, и даже i говорят обычно о полном отсутствии дум о будущей судьбе этого кода... В общем - "гори оно огнем, когда я получу свои почасовые..."
Я вообще часто применяю и i и b и c. Я вообще не считаю нужным придумывать какое-то другое название переменной, если ее зона видимости влазит на один экран и ее назнавение очевидно.
Code: Select all
++(*((ULONG*)((char*)(((PSPECIALENTRYRECORD)
(prb123->spRecordKey))->spRecordID)
+sizeof(RecordID)-sizeof(ULONG))));
Тут согласен, попробовал его как-то более разумно отформатировать, ничего не получилось.
PS Стиль жутко вынь3.1 напоминает. Ой там такое любили.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
SVK wrote:Code: Select all
++(*((ULONG*)((char*)(((PSPECIALENTRYRECORD)
(prb123->spRecordKey))->spRecordID)
+sizeof(RecordID)-sizeof(ULONG))));
Я действительно устроил истерику в компании, когда мне пришлось разбираться, почему программа с такими вот фрагментами иногда выдает сомнительные результаты после нескольких лет якобы успешного использования. Мне милостливо разрешили эти места исправить.
классика жанра
![Very Happy :D](./images/smilies/icon_biggrin.gif)
называется secure your job for life
![Mr. Green :mrgreen:](./images/smilies/icon_mrgreen.gif)
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Re: Программисты, поясните что это
venco wrote:A. Fig Lee wrote:вообщето она и так 20 должна печатать.
Должна - не должна, а напечатает гораздо больше 20-ти.
а..
ну фиг с ним тады так:
Code: Select all
main()
{
int i, N=20;
for(i = 0 ; i < N ; N--)
printf("*");
}
Code: Select all
main()
{
int i, N=20;
for(i = 0 ; -i < N ; i--)
printf("*");
}
Code: Select all
main()
{
int i, N=20;
for(i = 0 ; i + N ; i--)
printf("*");
}
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 2001
- Joined: 10 Nov 2004 00:34
- Location: MD
SVK wrote:2) насчет исходной "головоломки" - пояснение: претензии вызывает абсолютно бессмысленное требование исправить явную ошибку в коде "с помощью изменения одного символа кода" - ???!!!
Не понимаю, в чём претензии к задаче? Это именно головоломка, без кавычек, задана в соответствующем форуме, не программистском.
Почему не было столько эмоций по поводу бедной собачки, которую заставили бессмысленно носиться между двумя друзьями?
![HBZ :pain1:](./images/smilies/pain25.gif)
-
- Уже с Приветом
- Posts: 5102
- Joined: 11 Aug 2004 02:49
venco wrote:Не понимаю, в чём претензии к задаче? Это именно головоломка, без кавычек, задана в соответствующем форуме, не программистском.
Почему не было столько эмоций по поводу бедной собачки, которую заставили бессмысленно носиться между двумя друзьями?
Что значит бессмысленно?
![No-No! :nono#:](./images/smilies/nono.gif)