Название: "Искусство программирования" (задача 2) Отправлено: vimmax от Февраль 12, 2007, 04:44:45 Задача №2: Необходимо поменять значения двух целочисленных переменных местами,
т.е. например: было А=68 и В=34, надо А=34 и В=68. Условие: нельзя использовать третью переменную. Писать можно на любом языке программирования. Название: "Искусство программирования" (задача 2) Отправлено: BODROV от Февраль 12, 2007, 04:51:28 mov ax, 68
mov bx, 34 push ax mov ax, bx pop bx Название: "Искусство программирования" (задача 2) Отправлено: EvilMax от Февраль 12, 2007, 04:56:50 Plain C:
a = a ^ b; b = b ^ a; a = a ^ b; Название: "Искусство программирования" (задача 2) Отправлено: EvilMax от Февраль 12, 2007, 05:00:26 mov ax, 68 Стек - это тоже дополнительная ячейка. Боюсь, не пойдет такое решение.mov bx, 34 push ax mov ax, bx pop bx Название: "Искусство программирования" (задача 2) Отправлено: grimgav от Февраль 12, 2007, 05:01:49 a = a + b;
b = a - b; a = a - b; Название: "Искусство программирования" (задача 2) Отправлено: EvilMax от Февраль 12, 2007, 05:03:41 a = a + b; Есть аналогичный вариант с умножением и делением. Но у этих вариантов есть одно "НО" - возможность переполнения. А, впрочем, подождем ответа автора.b = a - b; a = a - b; Название: "Искусство программирования" (задача 2) Отправлено: grimgav от Февраль 12, 2007, 05:05:21 Есть аналогичный вариант с умножением и делением. Но у этих вариантов есть одно "НО" - возможность переполнения. А, впрочем, подождем ответа автора. Настолько глубоко не рыл =/ Может опять прикол в побитовых операциях ?)Название: "Искусство программирования" (задача 2) Отправлено: grimgav от Февраль 12, 2007, 05:07:52 Plain C: a = a ^ b; b = b ^ a; a = a ^ b; Да, так и есть =) Название: "Искусство программирования" (задача 2) Отправлено: vimmax от Февраль 12, 2007, 05:08:09 BODROV - Ответ #1 Респект программистам на ассемблере! Только чем отличается использование ячейки стека на ассемблере от использования третьей переменной?
В решении данной задачи не используются сторонние ячейки памяти, переменные или буферы обмена. grimgav - Ответ #4 Правильно заметили по поводу переполнения. EvilMax - Ответ #2 Вот это правильный ответ. EvilMax +1. Если так дальше пойдет, то все мои задачи за месяц закончатся :) Название: "Искусство программирования" (задача 2) Отправлено: Sochin от Февраль 12, 2007, 05:29:16 Sochin - а что для тебя есть "проектов достаточно большого размера и сложности" ? Например проект из 231 исходника для гигабитного маршрутизатора MARVELL серии ExMxPm является достаточно большим и сложным? (кстати, он еще в продажу не поступил) Как я могу что-то комментировать то чего не видел и если собственно непонятно о каком проекте речь? Предлагаю не начинать меряться письками. )) Достаточно сложный проект - это проект, все нюансы реализации и устройства которого одновременно удержать в голове нельзя или очень затруднительно. Полагаю, 231 сколько-нибудь сложный модуль - это достаточно сложный проект. Декомпозиция на модули, структурный подход, ООП - все это методы борьбы со сложностью. Если функции и методы классов предлагают контроль типов, то дефайн-макросы - это простая тупая подстановка текста без каких бы то ни было проверок. ыыы. предлагаю такой дефайн для экспериментов: Код: #define int long Хорошо если при ошибочном использовании программа не откомпилится и можно найти ошибку в коде. А если программа компилится с ошибочным использованием макроподстановки? Вот тебе уязвимости, вот тебе глюки. Если же проект содержит множество дефайнов, в том числе и нетривиальные макроподстановки, при этом проект развивается, обслуживается и обслуживается командой разработчиков, то вероятность ошибок от неправильного использования дефайнов будет возрастать. Так что думайте и выбирайте сами. ) З.Ы. Если не ошибаюсь, то изначально дефайны были введены в С для работы с константами, а макроподстановки и эмуляция inline-функций уже потом притянули за уши. Вот для констант еще сгодятся дефайны, сложные макросы - фтопку! :) Цитировать Я думаю ты бы не обрадовался если бы маршрутизатор твоей сети работал на 5% медленнее, чем сейчас :) Честно говоря, в данный момент я сомневаюсь что ощутил бы жти 5%. ))) Хотя, конечно же, это еще не показатель. ) Название: "Искусство программирования" (задача 2) Отправлено: vimmax от Февраль 12, 2007, 05:32:12 Не будем меряться письками. Я твой ответ прочитал. Отвечать не буду. ))))
Название: "Искусство программирования" (задача 2) Отправлено: BODROV от Февраль 12, 2007, 05:58:37 вобщем, vimmax, молодца! пиши исчо (http://kita.org.ua/index.php/topic,105.0.html)
В душе моей огонь горит прекрасный, Его зажгли Вы - автор слов бесценных. Перо в руке, чернила, шарф атласный... Пишите дальше, радуйте нас бренных. :D Название: Re: "Искусство программирования" (задача 2) Отправлено: BODROV от Февраль 14, 2007, 03:37:46 а где продолжение? :'(
Название: Re: "Искусство программирования" (задача 2) Отправлено: vimmax от Февраль 14, 2007, 03:40:27 Я ж не могу новые вопросы задавать, пока есть еще неотвеченные топики ("Творческое и аналитическое мышление" (задача 1))...... Или можно? Кто как думает? Задачи у меня есть)))))
Название: Re: "Искусство программирования" (задача 2) Отправлено: BODROV от Февраль 14, 2007, 03:49:27 я думаю можно! это ж разные темы...
тем более, что Sochin задал сложноватый и непонятный вопрос - никто не хочет отвечать.... а я знаю ответ;) Название: Re: "Искусство программирования" (задача 2) Отправлено: Sochin от Февраль 14, 2007, 04:28:12 я думаю можно! это ж разные темы... ха-ха. У меня тоже задач такого плана еще есть с дюжину. ))тем более, что Sochin задал сложноватый и непонятный вопрос - никто не хочет отвечать.... а я знаю ответ;) Название: Re: "Искусство программирования" (задача 2) Отправлено: LazarusLong от Февраль 17, 2007, 12:31:45 Как то мне однажды мне эту задачу загадали на проработке по компьютерным сетям. Минут за 15 решил в уме ;)
Название: Re: "Искусство программирования" (задача 2) Отправлено: LazarusLong от Март 11, 2007, 10:52:26 Вот еще один вариант, кстати:
x ^= y ^= x ^=y; Одной строкой! |