КИТА unofficial
Ноябрь 22, 2024, 10:15:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: [1]   Вниз
  Печать  
Автор Тема: "Искусство программирования" (задача 2)  (Прочитано 13455 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« : Февраль 12, 2007, 04:44:45 »

Задача №2: Необходимо поменять значения двух целочисленных переменных местами,
т.е. например: было А=68 и В=34, надо А=34 и В=68.

Условие: нельзя использовать третью переменную. Писать можно на любом языке программирования.
« Последнее редактирование: Февраль 22, 2007, 08:33:49 от vimmax » Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline Offline

Пол: Мужской
Сообщений: 550


хде я?


« Ответ #1 : Февраль 12, 2007, 04:51:28 »

mov ax, 68
mov bx, 34
push ax
mov ax, bx
pop bx
Записан
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #2 : Февраль 12, 2007, 04:56:50 »

Plain C:

a = a ^ b;
b = b ^ a;
a = a ^ b;
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #3 : Февраль 12, 2007, 05:00:26 »

mov ax, 68
mov bx, 34
push ax
mov ax, bx
pop bx
Стек - это тоже дополнительная ячейка. Боюсь, не пойдет такое решение.
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
grimgav
↑ так меня зовут, а это я говорю →
Просто гламурный
Проректор
*****

Карма: +161/-17
Offline Offline

Пол: Мужской
Награды:
I место в фотоконкурсе \
Сообщений: 4636


не ^i^


« Ответ #4 : Февраль 12, 2007, 05:01:49 »

a = a + b;
b = a - b;
a = a - b;
Записан

· Я русский ·
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #5 : Февраль 12, 2007, 05:03:41 »

a = a + b;
b = a - b;
a = a - b;

Есть аналогичный вариант с умножением и делением. Но у этих вариантов есть одно "НО" - возможность переполнения. А, впрочем, подождем ответа автора.
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
grimgav
↑ так меня зовут, а это я говорю →
Просто гламурный
Проректор
*****

Карма: +161/-17
Offline Offline

Пол: Мужской
Награды:
I место в фотоконкурсе \
Сообщений: 4636


не ^i^


« Ответ #6 : Февраль 12, 2007, 05:05:21 »

Есть аналогичный вариант с умножением и делением. Но у этих вариантов есть одно "НО" - возможность переполнения. А, впрочем, подождем ответа автора.
Настолько глубоко не рыл =/ Может опять прикол в побитовых операциях ?)
Записан

· Я русский ·
grimgav
↑ так меня зовут, а это я говорю →
Просто гламурный
Проректор
*****

Карма: +161/-17
Offline Offline

Пол: Мужской
Награды:
I место в фотоконкурсе \
Сообщений: 4636


не ^i^


« Ответ #7 : Февраль 12, 2007, 05:07:52 »

Plain C:

a = a ^ b;
b = b ^ a;
a = a ^ b;

Да, так и есть =)
Записан

· Я русский ·
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #8 : Февраль 12, 2007, 05:08:09 »

BODROV - Ответ #1  Респект программистам на ассемблере! Только чем отличается использование ячейки стека на ассемблере от использования третьей переменной?
В решении данной задачи не используются сторонние ячейки памяти, переменные или буферы обмена.

grimgav - Ответ #4 Правильно заметили по поводу переполнения.

EvilMax - Ответ #2 Вот это правильный ответ. EvilMax +1.

Если так дальше пойдет, то все мои задачи за месяц закончатся Улыбка
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #9 : Февраль 12, 2007, 05:29:16 »

Sochin - а что для тебя есть "проектов достаточно большого размера и сложности" ? Например проект из 231 исходника для гигабитного маршрутизатора MARVELL серии ExMxPm является достаточно большим и сложным? (кстати, он еще в продажу не поступил)

Как я могу что-то комментировать то чего не видел и если собственно непонятно о каком проекте речь? Предлагаю не начинать меряться письками. ))
Достаточно сложный проект - это проект, все нюансы реализации и устройства которого одновременно удержать в голове нельзя или очень затруднительно. Полагаю, 231 сколько-нибудь сложный модуль - это достаточно сложный проект.
Декомпозиция на модули, структурный подход, ООП - все это методы борьбы со сложностью. Если функции и методы классов предлагают контроль типов, то дефайн-макросы - это простая тупая подстановка текста без каких бы то ни было проверок.

ыыы. предлагаю такой дефайн для экспериментов:
Код:
#define int long

Хорошо если при ошибочном использовании программа не откомпилится и можно найти ошибку в коде. А если программа компилится с ошибочным использованием макроподстановки? Вот тебе уязвимости, вот тебе глюки. Если же проект содержит множество дефайнов, в том числе и нетривиальные макроподстановки, при этом проект развивается, обслуживается и обслуживается командой разработчиков, то вероятность ошибок от неправильного использования дефайнов будет возрастать.

Так что думайте и выбирайте сами. )

З.Ы. Если не ошибаюсь, то изначально дефайны были введены в С для работы с константами, а макроподстановки и эмуляция inline-функций уже потом притянули за уши. Вот для констант еще сгодятся дефайны, сложные макросы - фтопку! Улыбка

Цитировать
Я думаю ты бы не обрадовался если бы маршрутизатор твоей сети работал на 5% медленнее, чем сейчас Улыбка

Честно говоря, в данный момент я сомневаюсь что ощутил бы жти 5%. ))) Хотя, конечно же, это еще не показатель. )
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #10 : Февраль 12, 2007, 05:32:12 »

Не будем меряться письками. Я твой ответ прочитал. Отвечать не буду. ))))
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline Offline

Пол: Мужской
Сообщений: 550


хде я?


« Ответ #11 : Февраль 12, 2007, 05:58:37 »

вобщем, vimmax, молодца! пиши исчо
В душе моей огонь горит прекрасный,
Его зажгли Вы - автор слов бесценных.
Перо в руке, чернила, шарф атласный...
Пишите дальше, радуйте нас бренных.
 Смеющийся
Записан
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline Offline

Пол: Мужской
Сообщений: 550


хде я?


« Ответ #12 : Февраль 14, 2007, 03:37:46 »

а где продолжение?  :'(
Записан
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #13 : Февраль 14, 2007, 03:40:27 »

Я ж не могу новые вопросы задавать, пока есть еще неотвеченные топики ("Творческое и аналитическое мышление" (задача 1))...... Или можно? Кто как думает? Задачи у меня есть)))))
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline Offline

Пол: Мужской
Сообщений: 550


хде я?


« Ответ #14 : Февраль 14, 2007, 03:49:27 »

я думаю можно! это ж разные темы...
тем более, что Sochin задал сложноватый и непонятный вопрос - никто не хочет отвечать.... а я знаю ответ;)
Записан
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #15 : Февраль 14, 2007, 04:28:12 »

я думаю можно! это ж разные темы...
тем более, что Sochin задал сложноватый и непонятный вопрос - никто не хочет отвечать.... а я знаю ответ;)
ха-ха. У меня тоже задач такого плана еще есть с дюжину. ))
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #16 : Февраль 17, 2007, 12:31:45 »

Как то мне однажды мне эту задачу загадали на проработке по компьютерным сетям. Минут за 15 решил в уме Подмигивающий
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #17 : Март 11, 2007, 10:52:26 »

Вот еще один вариант, кстати:

x ^= y ^= x ^=y;

Одной строкой!
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.293 секунд. Запросов: 34.