bash.im ithappens.me zadolba.li
5460

Не знаю пароль, но вижу ориентир

Попросили помочь с программой по одному околокомпьютерному предмету. Как всегда, программа уже кем-то сдавалась, «там уже всё работает, ты только подправь чуток, чтобы выглядело по-другому».

В двух словах о самой задаче: необходимо рассчитать матрицу значений, которая затем ломаным контуром делится на две части, имеющие некий экономический смысл. В зависимости от того, в какой из частей находится элемент, делается вывод.

Открываю проект, вижу привычную уже картину: полное отсутствие форматирования, однобуквенные переменные и имена компонентов по умолчанию, комментариев нигде нет. Благо алгоритм самой задачи нехитрый, так что разобраться, где в этом коде что, было не шибко сложно. Форматирую, правлю — и в самом конце программы нахожу настоящий шедевр.

Рассчитанные значения выводились в таблицу на форме, при этом ячейки прямо на ходу раскрашивались в зависимости от того, в какую из двух частей матрицы они попали. Думаете, красоты ради раскрашивались? Вот и я так думал, пока в конце не увидел это:

a := Canvas.Pixels[n-10,k-10];
if TColor(a) = clRed then begin otvet := … end else otvet := …

Окончательное решение программа принимала на основе цвета ячейки таблицы! Ей-богу, я окосел. Объявить массив и занести в него номера ячеек, образующих контур, наверное, слишком скучным показалось — лучше потыкать в пиксели на форме. Особенно весело было нажать на кнопку «Рассчитать», потом на секунду свернуть окно программы и наблюдать девственно чистую белую таблицу, о перерисовке содержимого которой, разумеется, никто не позаботился. Разумеется, сделать вывод после этого программа уже не могла.

Я понимаю, человек был далёк от программирования и писал только чтобы сдать лабу, но такого «изобретательного» подхода, признаться, ранее я не встречал никогда.