Модераторы: Alx, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перестановка цыфр 
:(
    Опции темы
BSV_Sergey
Дата 21.12.2004, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 19.11.2004
Где: г. Москва

Репутация: нет
Всего: 3



Просматривал данный раздел форума и вспомнил довольно интересную задачку по перестановке чисел. Задача в сущности простая, но для начинающих програмистов возможно покажется интересной.
"Есть две переменные а = 17, b = 24. Необходимо поменять их местами не пребегая к помощи дополнительных переменных. 'а' должно стать равным 24, а 'b' - 17"
PM MAIL   Вверх
S.A.P.
Дата 21.12.2004, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(BSV_Sergey @ 21.12.2004, 13:32)
а = 17, b = 24
именно эти значения или могут быть любые?

PM MAIL   Вверх
BSV_Sergey
Дата 21.12.2004, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 19.11.2004
Где: г. Москва

Репутация: нет
Всего: 3



Значения могут быть любыми, я просто взял 17 и 24, но это не имеет значения, можно взять любых два числа.
PM MAIL   Вверх
S.A.P.
Дата 21.12.2004, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



на С++ можно так:
Код

a=(a<<16)|b;
b=a>>16;
a&=0xFFFF;

если переменные четырехбайтовые и числа не больше 255
PM MAIL   Вверх
Sardar
Дата 21.12.2004, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Сколько раз эта задачка поднималась...

Если числа целые то:
Код
a=a^b
b=a^b
a=a^b
// ^ - операция XOR



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
S.A.P.
Дата 21.12.2004, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(Sardar @ 21.12.2004, 17:16)
a=a^b
b=a^b
a=a^b
тоже, только догадался, форум повис smile .

а вобще ASM рулит:
Цитата

a^=b;
004130DC  mov        eax,dword ptr [a]
004130DF  xor        eax,dword ptr [b]
004130E2  mov        dword ptr [a],eax
b^=a;
004130E5  mov        eax,dword ptr [b]
004130E8  xor        eax,dword ptr [a]
004130EB  mov        dword ptr [b],eax
a^=b;
004130EE  mov        eax,dword ptr [a]
004130F1  xor        eax,dword ptr [b]
004130F4  mov        dword ptr [a],eax


когда можно так
Код

mov eax, dword ptr [a]
mov ebx, dword ptr [b]
mov dword ptr [a], ebx
mov dword ptr [b], eax




PM MAIL   Вверх
En_t_end
Дата 21.12.2004, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Perchilla,
a=(a<<16)|b;
b=a>>16;
a&=0xFFFF;
А подробнее не можешь, что это означает ?

PM MAIL ICQ Skype GTalk Jabber   Вверх
S.A.P.
Дата 21.12.2004, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(En_t_end @ 21.12.2004, 17:52)
А подробнее не можешь, что это означает ?
ну этот код более неуклюж, чем тот, что предложил Sardar.

Цитата(En_t_end @ 21.12.2004, 17:52)
a=(a<<16)|b;
сдвигаем содержимое переменной A на 16 разрядов, а в "освобоженные" 16 разрядов вставляем собержимое B, и все это сохраняем в переменной A.

Цитата(En_t_end @ 21.12.2004, 17:52)
b=a>>16;
сдвигаем сожержимое A обратно без присвоения и все это записываем в B. В переменной B теперь у нас старое значение A.

Цитата(En_t_end @ 21.12.2004, 17:52)
a&=0xFFFF;
в переменной А отбрасываем все биты, кроме правых 16-ти. Теперь в переменной А у нас старое значение B.

PM MAIL   Вверх
korob2001
Дата 22.12.2004, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Perl
Код

($b, $a) = ($a, $b);




--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
cardinal
Дата 22.12.2004, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 1
Всего: 99



korob2001 smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Fixin
Дата 23.12.2004, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: нет
Всего: 18



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

Так не проще? (без битовых операций)

Это сообщение отредактировал(а) Fixin - 23.12.2004, 22:52
PM MAIL ICQ   Вверх
S.A.P.
Дата 23.12.2004, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(Fixin @ 23.12.2004, 22:51)
Так не проще? (без битовых операций)
так будет ограничение на размер.

PM MAIL   Вверх
Fixin
Дата 27.12.2004, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: нет
Всего: 18



Цитата
так будет ограничение на размер.


На размер чего? При битовых операциях ограничения пропадаю?

Это сообщение отредактировал(а) Fixin - 27.12.2004, 18:39
PM MAIL ICQ   Вверх
S.A.P.
Дата 3.1.2005, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(Fixin @ 27.12.2004, 18:39)
При битовых операциях ограничения пропадаю?
да

PM MAIL   Вверх
Fixin
Дата 3.1.2005, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: нет
Всего: 18



Куда же?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.