:: Игры Разума
Re: Задачка
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
i=2/m.i
Ratings: 0 negative/0 positive
Re: Задачка
Baga

Сообщений: 540
Откуда: г. Махачкала
Дата регистрации: 03.06.2006
Пора теперь проверитть, к какой категории программистов Вы относитесь.

Сравните ваше решение с десятью предложенными. Найдите одно или несколько наиболее похожих на ваше и прочитайте в разделе "Категории" краткую характеристику.
Вы можете кодировать на любом языке, но для сравнения предпочтительнее использовать PL/1.
Решения:
1)
IF I='2' THEN I=1;
ELSE I=2;
2)
IF I=2 THEN I=1;
IF I=1 THEN I=2;
3)
IF I=1 THEN GOTO SKIP;
I=1;
GOTO DONE;
SKIP:I=2;
DONE:
4)
J=2;
IF I=2 THEN J=1;
I=J;
5)
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:
6)
DECLARE ONETWO(2) FIXED BIN(31) INIT(2,1);
I=ONETWO(I);
7)
I=3-I;
8)
I=I-(I/2*2)+2;
9)
IF I=2
THEN DO;
I=1;
END;
ELSE DO;
I=2;
END;
10)
IF I=1 THEN I=2$ ELSE DO$IF I=2 THEN I=1$ ELSE DO$
PUT LIST('YTLJGECNBVJT PYFXTYBT I^ '?I?' PFVTYTYJ YF 1')$
I=1$
END$END$
Категория
1) Выпускник школы IBM. Не более одного из десяти окончивших эту школу знают разницу между 2 и "2". Удивительно, как можно вообще программировать без знания столь фундаментальных понятий.
2) Преподаватель программирования. Это решение хуже предыдущего. Много ли, однако, обучающих программированию сами написали и отладили хотя бы одну программу?
3) Программист на Фортране, только что закончивший курсы по PL/1. Да, старую собаку не научишь новым штукам! Это решение дает верный результат, но это всё, что можно про него сказать.
4) Программист на Ассемблере, прошедший тот же курс. Это решение не является ни прямым, ни эффективным. В нём есть та прелесть, что оно не содержит самомодифицирующихся кодов, но это лишь результат возврата на землю после изучения языка высокого уровня.
5) Системный аналитик. Прекрасная иллюстрация для тех, кто думает, что главная обязанность системного аналитика - это разработка такого алгоритма, в котором окажется некомпетентным даже хороший и опытный программист.
6) Computer scientist. Наверное, это самое умное решение. Однако такое "сальто-мортале" без комментариев оказывается весьма непонятным. Искусство требует жертв, а жертвой будет тот, кто будет разбираться в этой программе - может быть, сам автор, спустя три месяца.
7) Математик. Очень похоже на предыдущее, столь же элегантно, но опять-таки та же проблема: как в этом разобраться?
8) Секретчик. Программист, заботящийся о секретности своей программы. Вот работа настоящего композитора, и, конечно, никаких комментариев. "Я могла бы придумать и более запутанный способ, как это сделать", - с гордостью сказала Белая Королева.
9) Структурный программист. Каждому ясно, что сие произведение - структурная программа. Но структурная программа характеризуется не отступами от края листа, а прежде всего наличием внутренней логики.
10) Хороший программист. Заметьте, что ни одно из предыдущих решений не проверяло диапазон значений I, а это весьма опасно. Вас не спасет ни структурность, ни фантастические алгоритмы, ни элегантность решения, если вдруг окажется, что I первоначально не было равно ни единице, ни двойке.


------------------
Багавудин Мирзаев
Ratings: 0 negative/0 positive
Re: Задачка
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Baga
Можно и так:
I=I-(I/2*2)+2

Для FoxPro этот код означает безусловное присвоение I=2 вне зависимости от текущего значения I, поскольку тип Integer легко модифицируется в тип Numeric в процессе расчета. Надо же было хотя бы попробовать выполнить это в FoxPro

Для PL/1 тут, вероятно, идет какая-то игра с преобразованием типов. В смысле, что деление целого должно дать целое? Только, непонятно какое.
Ratings: 0 negative/0 positive
Re: Задачка
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Даже если и идет преобразование, то результат неправильный
* с преобразованием
* I=1
1/2=0.5
0.5*2=1
1-1+2=2

* без преобразования
* I=1
1/2=0
0*2=0
1-0+2=3

*I=2
2/2=1
1*2=2
2-2+2=2


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Задачка
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Влад Колосов
Даже если и идет преобразование, то результат неправильный
Почитайте, что там написано в расшифровке:
Цитата:
Секретчик. Программист, заботящийся о секретности своей программы.
а вовсе не о правильности ее работы. У преподавателя программирования, кстати, тоже неверное решение, не говоря уже о выпускнике школы IBM.
Ratings: 0 negative/0 positive
Re: Задачка
Baga

Сообщений: 540
Откуда: г. Махачкала
Дата регистрации: 03.06.2006
Вообще-то в первоисточнике было I=I-(I/2*2)+1
После проверки в фоксе я решил его изменить на +2
Тогда фокс выдает правильный результат
Попробуйте
store 1 to I
I=I-(I/2*2)+2
?I *Дает 2

store 2 to I
I=I-(I/2*2)+2
?I *Дает 1

Но, ребята, давайте не зацикливаться. Задачка-то шуточная!
Хотите я вам лучше загадку про другого джигита и автора этой темы (Задачка) задам?


------------------
Багавудин Мирзаев
Ratings: 0 negative/0 positive
Re: Задачка
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Baga
Вообще-то в первоисточнике было I=I-(I/2*2)+1
После проверки в фоксе я решил его изменить на +2
Тогда фокс выдает правильный результат
Попробуйте
store 1 to I
I=I-(I/2*2)+2
?I *Дает 2

store 2 to I
I=I-(I/2*2)+2
?I *Дает 1

Что-то вы опять не правильно сделали или не туда посмотрели. Для FoxPro

(I/2*2) = I

Это без вариантов. При любом значении I. Хоть 1, хоть 2. Значит, в результате получаем

I = I - I + 2 = 2

Т.е. вне зависимости от значения I результат будет такой, как последнее слагаемое.

Смотрим

?1 - (1/2*2) + 2
?2 - (2/2*2) + 2

?1 - (1/2*2) + 1
?2 - (2/2*2) + 1

Первые два выражения дадут 2, следующие два выражения дадут 1. Т.е., как и ожидалось, вне зависимости от значения I, результат равен последнему слагаемому.

Baga
Но, ребята, давайте не зацикливаться. Задачка-то шуточная!

Задачка, конечно, шуточная. Проблема только в том, что вы привели это решение, как корректное в приведенных условиях в синтаксисе FoxPro. А это заведомо не верно...
Ratings: 0 negative/0 positive
Re: Задачка
Baga

Сообщений: 540
Откуда: г. Махачкала
Дата регистрации: 03.06.2006
Это точно. Действительно не заметил.
Наверное такой же результат будет не только в фоксе.



------------------
Багавудин Мирзаев
Ratings: 0 negative/0 positive
Re: Задачка
Sergio

Сообщений: 438
Откуда: Донецк
Дата регистрации: 16.06.2005
leonid
TAS
i=IIF(m.i=1,2,1)
Забыл спросить - в чем прикол?

Прикол в том, что лучше писать так
i=3-i
Может, немного не в тему, но чем-то напомнило...
Превый курс института, одна из первых лекций по Паскалю.
Препод говорит - для того, чтобы поменять местами значения двух переменных обязательно нужна третья переменная.
Типа a=5 b=6 а надо сделать a=6 b=5
x=a
a=b
b=x
Я, взрощенный на ПМК МК-61, в ситуациях, когда регистров всего 16 и их постоянно не хватает - кричу - нет.)
Показывай, говорит, возле доски.
Показываю:
a=a+b
b=b-a
a=a-b
Ratings: 0 negative/0 positive
Re: Задачка
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
еще вариант
2**(2-i)


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Задачка
ry

Сообщений: 2113
Дата регистрации: 24.09.2007
Sergio
Показываю:
a=a+b
b=b-a
a=a-b
Наверное, все-таки так:
a=a+b
b=a-b
a=a-b
А вариант i=2/i был?
...
з.ы. уже вижу - был
Ratings: 0 negative/0 positive
Re: Задачка
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Не исключено, что все эти варианты ответов взяты из реального экзамена.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Задачка
Naomi
Автор

Сообщений: 1796
Дата регистрации: 09.10.2003
Смешно, но мне эту задачку задали на интервью (поменять местами переменные без 3-ей переменной). К счастью для меня, я знала решение. "Интервьюэры" были сражены наповал.
Ratings: 0 negative/0 positive
Re: Задачка
rubinov

Сообщений: 483
Дата регистрации: 07.02.2005
Naomi
Смешно, но мне эту задачку задали на интервью (поменять местами переменные без 3-ей переменной). К счастью для меня, я знала решение. "Интервьюэры" были сражены наповал.

Завидую. Я бы их не смог "сразить" зная что этот подход не работает во многих случаях, как то, когда значения переменных - слова, или если значения - числа, но такие что результат операции их объединения (по-видимому, в оригинальном исполнении сложение или вычитание, хотя можно использовать и любую другую арифметическую или алгебраическую операцию) не может быть представлен из-за ограничений в используемом языке или системе.
Ratings: 0 negative/0 positive
Re: Задачка
Naomi
Автор

Сообщений: 1796
Дата регистрации: 09.10.2003
В конкретном случае, о котором у меня шла речь, были просто даны 2 числа (5 и 8, если помню правильно).

В более общем случае, согласна, задача может не иметь решения.
Ratings: 0 negative/0 positive
Re: Задачка
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
rubinov
зная что этот подход не работает во многих случаях, как то, когда значения переменных - слова

a = "Первая строка"
b = "Вторая строка"
a = a + b
b = left(a,len(a)-len(b))
a = right(a,len(a)-len(b))
?a
?b
Ratings: 0 negative/0 positive
Re: Задачка
rubinov

Сообщений: 483
Дата регистрации: 07.02.2005
Владимир Максимов
rubinov
зная что этот подход не работает во многих случаях, как то, когда значения переменных - слова

a = "Первая строка"
b = "Вторая строка"
a = a + b
b = left(a,len(a)-len(b))
a = right(a,len(a)-len(b))
?a
?b


a = "First row"
b = 9

lctype_a=type("a")
lctype_b=type("b")

a = trans(a)+TRANSFORM(b)
b= left(a,LEN(TRANSFORM(a))-LEN(TRANSFORM(b)))
a= STRTRAN(a,b,"")

IF lctype_b="N"
a=VAL(A)
ENDIF
IF lctype_a="N"
b=VAL(b)
ENDIF
?a
?b

И надо продолжать дорабатывать для других случаев, как b=6.123454, и т.п.



Исправлено 1 раз(а). Последнее : rubinov, 08.07.09 16:52
Ratings: 0 negative/0 positive
Re: Задачка
Naomi
Автор

Сообщений: 1796
Дата регистрации: 09.10.2003
www.codinghorror.com
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика