Опубликовано в Datamation, Март 1977
года (!)
Этот тест расскажет о вашем
программировании больше, чем вы хотели бы
знать.
Задача:
Переменная I представляет собой целое
число. I
принимает значения 1 или 2. Если I оказалось
равным 1, то замените его на 2, и наоборот.
Сравните ваше решение с десятью
предложенными. Найдите одно или несколько
наиболее похожих на ваше и прочитайте в
разделе "Категории" краткую
характеристику.
Вы можете кодировать на любом языке, но для
сравнения предпочтительнее использовать
PL/1.
Решения:
- IF I='2' THEN I=1;
ELSE I=2;
- IF I=2 THEN I=1;
IF I=1 THEN I=2;
- IF I=1 THEN GOTO SKIP;
I=1;
GOTO DONE;
SKIP:I=2;
DONE:
- J=2;
IF I=2 THEN J=1;
I=J;
- DECLARE SWITCH LABEL;
IF I=1 THEN SWITCH=ONE;
IF I=2 THEN SWITCH=TWO;
GOTO SWITCH;
ONE: I=2;
GOTO DONE;
TWO: I=1;
DONE:
- DECLARE ONETWO(2) FIXED BIN(31) INIT(2,1);
I=ONETWO(I);
- I=3-I;
- I=I-(I/2*2)+1;
- IF I=2
THEN DO;
I=1;
END;
ELSE DO;
I=2;
END;
- IF I=1 THEN I=2; ELSE DO;IF I=2 THEN I=1; ELSE DO;
PUT LIST('НЕДОПУСТИМОЕ ЗНАЧЕНИЕ I: ',I,'
ЗАМЕНЕНО НА 1');
I=1;
END;END;
Категории:
- Недавний выпускник школы IBM.
Не более одного из десяти окончивших эту
школу знают разницу между 2 и "2".
Удивительно, как можно вообще
программировать без знания столь
фундоментальных понятий. - Преподаватель программирования.
Это решение хуже предыдущего. Много ли,
однако, обучающих программированию сами
написали и отладили хотя бы одну
программу? - Программист на Фортране, только что
закончивший курсы по PL/1.Да, старую собаку не научишь новым
штукам! Это решение дает верный
результат, но это всё, что можно про него
сказать. - Программист на Ассемблере, прошедший
тот же курс.Это решение не является ни прямым, ни
эффективным. В нём есть та прелесть, что
оно не содержит самомодифицирующихся
кодов, но это лишь результат возврата на
землю после изучения языка высокого
уровня. - Системный аналитик.
Прекрасная иллюстрация для тех, кто
думает, что главная обязанность
системного аналитика - это разработка
такого алгоритма, в котором окажется
некомпетентным даже хороший и опытный
программист. - Computer scientist.
Наверное, это самое умное решение.
Однако такое "сальто-мортале" без
комментариев оказывается весьма
непонятным. Искусство требует жертв, а
жертвой будет тот, кто будет разбираться
в этой программе - может быть, сам автор
спустя три месяца. - Математик.
Очень похоже на предыдущее, столь же
элегантно, но опять-таки та же проблема:
как в этом разобраться? - Секретчик.
Программист, заботящийся о секретности
своей программы. Вот работа настоящего
композитора, и, конечно, никаких
комментариев. "Я могла бы придумать и
более запутанный способ, как это сделать",
- с гордостью сказала Белая Королева. - Структурный программист.
Каждому ясно, что сие произведение -
структурная программа. Но структурная
программа характеризуется не отступами
от края листа, а прежде всего наличием
внутренней логики. - Хороший программист.
Заметьте, что ни одно из предыдущих
решений не проверяло диапазон значений I,
а это весьма опасно. Вас не спасет ни
структурность, ни фантастические
алгоритмы, ни элегантность решения, если
вдруг окажется, что I первоначально не
было равно ни единице, ни двойке.