Category: it

Category was added automatically. Read all entries about "it".

Программисты на C оценят

 
1) #define TRUE FALSE //счастливой отладки

2) #define true ((rand() % 2) ? true : false)

P.S. Есть программный документ "10 самых грубых ошибок, которых следует избегать программисту на C". Половину из этих ошибок просто невозможно сделать на Pascal/Delphi :)  Хороший язык C, гибкий...

До чего народ на выдумку вострый!

 
Истории о хакерских проверках организаций на устойчивость.

http://offline.computerra.ru/2005/607/230671/

Не устаю восхищаться, до чего у нас народ вострый. Фокусы с ICQ и с телефоном я бы и сам проделал, но прочее - это уже достойно пера романиста...

Ма-а-аленький тест для программистов - контрольный ответ

 
Итак, напомню, условие было такое:
  • Переменные FromDate1 и ToDate1 типа "date" описывают естественный промежуток времени
  • Переменные FromDate2 и ToDate2 типа "date" описывают естественный промежуток времени
Нужно написать простенький IF для проверки, пересекаются ли эти два промежутка времени.

Разнообразие решений меня в некотором смысле порадовало. Там были и сложные условия:
IF ((FromDate1 >= FromDate2) AND
    (FromDate1 <= ToDate2)) OR 
   ((ToDate1 >= FromDate2) AND
    (ToDate1 <= ToDate2)) OR
   ((FromDate2 >= FromDate1) AND
    (FromDate2 <= ToDate1)) OR 
   ((ToDate2 >= FromDate1) AND
    (ToDate2 <= ToDate1)) THEN ...
И использование дополнительных функций:

bool within(date x, date from, date to) {return from!=to && x>=from && x<=to;}

if (within(FromDate1, FromDate2, ToDate2) || within(ToDate1, FromDate2, ToDate2) || within(FromDate2, FromDate1, ToDate1) || within(ToDate2, FromDate1, ToDate1)) { ... }


И подключение математики:

if (abs (ToDate1 - ToDate2) + abs (FromDate1 - FromDate2) <= ToDate1 + ToDate2 - FromDate1 - FromDate2) then

И даже неправильные (!) решения.

А ларчик просто открывался. Если у нас есть два естественных (т.е. неотрицательной продолжительности) промежутка времени, они НЕ пересекаются, если ToDate1 меньше FromDate2 или, наоборот, ToDate2 меньше FromDate1. В любом другом случае - пересекаются. Следовательно, условие может быть таким:

if not (ToDate2 < FromDate1 or ToDate1 < FromDate2) then

Или, чтобы избавиться от оператора "not":

if (ToDate2 >= FromDate1 and ToDate1 >= FromDate2) then

Мораль: часто программистская задача имеет гораздо более простое решение, чем кажется на первый взгляд.

Ма-а-аленький тест для программистов

 
Маленький тест для программистов, пишущих на процедурных языках (Паскаль, Си, Бэйсик, PL/SQL и т.п.). Дано:
  • Переменные FromDate1 и ToDate1 типа "date" описывают естественный промежуток времени
  • Переменные FromDate2 и ToDate2 типа "date" описывают естественный промежуток времени
Нужно написать простенький IF для проверки, пересекаются ли эти два промежутка времени (хотя бы и на один момент).

Предлагайте свои решения. Комментарии скринятся.

Только для программистов - остальные не поймут

 
Вычитал у хорошего человека Джоэла Сполски реплику, которая живо напомнила мне собственные годы в колледже. Подтверждаю:

Многие программисты на Си просто не знают, как заставить работать указатели. Я, как правило, не отказываюсь от кандидата из-за отсутствия у него какого-то навыка. Однако я обнаружил, что понимание указателей в Си — это не навык, а способность. В начале первого курса на факультете кибернетики набирается человек 200 вундеркиндов, писавших в четырехлетнем возрасте игрушки для Atari 800 на BASIC'е. Они хорошо проводят время, изучая Паскаль, но в один прекрасный день профессор заводит речь об указателях, и они внезапно перестают понимать. То есть абсолютно. 90% потока переходит на отделение политологии, обьясняя это тем, что на кибернетике мало симпатичных студенток. На самом же деле, по неизвестной причине часть человечества просто рождается без того отдела мозга, который понимает указатели. Указатели — это не навык, а способность, требующая особого мышления, и некоторые люди им просто не обладают.

От себя могу добавить ещё один камень преткновения для тех, у кого нет соответствующих генов: многомерные массивы. "Представьте себе одномерный массив" - студенты рисуют строчку клеточек. "Представьте себе двухмерный массив" - студенты рисуют табличку. "Представьте себе трёхмерный массив" - студенты чуть нервозно рисуют кубик. "Представьте себе четырёхмерный массив". Раздаётся характерный стук шариков, закатывающихся за ролики, по аудитории разносится запах горелой изоляции, в перерыве некоторые девушки начинают обсуждать положительные стороны работы секретаршей...