Постановка задачи:
Переменная I представляет собой целое число. I принимает значения 1 или 2. Если I оказалось равным 1, то замените его на 2, и наоборот.
Свой вариант сравните с предложенными
варианты решения с комментариями
IF I='2' THEN I=1;
ELSE I=2;
----------
Недавний выпускник школы IBM. Не более одного из десяти окончивших эту школу знают разницу между 2 и "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:
----------
Программист на Фортране, только что закончивший курсы по PL/1. Да, старую собаку не научишь новым штукам! Это решение дает верный результат, но это всё, что можно про него сказать.
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);
----------
Computer scientist. Наверное, это самое умное решение. Однако такое "сальто-мортале" без комментариев оказывается весьма непонятным. Искусство требует жертв, а жертвой будет тот, кто будет разбираться в этой программе - может быть, сам автор спустя три месяца.
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;
----------
Хороший программист. Заметьте, что ни одно из предыдущих решений не проверяло диапазон значений I, а это весьма опасно. Вас не спасет ни структурность, ни фантастические алгоритмы, ни элегантность решения, если вдруг окажется, что I первоначально не было равно ни единице, ни двойке.
//по материалам www.smeshnoe.info
Задача для программиста с комментариями
Постановка задачи:
Переменная I представляет собой целое число. I принимает значения 1 или 2. Если I оказалось равным 1, то замените его на 2, и наоборот.
Свой вариант сравните с предложенными
варианты решения с комментариями
//по материалам www.smeshnoe.info
Переменная I представляет собой целое число. I принимает значения 1 или 2. Если I оказалось равным 1, то замените его на 2, и наоборот.
Свой вариант сравните с предложенными
варианты решения с комментариями
//по материалам www.smeshnoe.info