![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
val |
|
||||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Способ, как обменяться значениями между двумя переменными, не используя третей,
т.е. a<-->b вместо
можно сделать:
У кого какие соображения как всё это работает? -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
||||
|
|||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Да, это все работает...
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Это можно переписать так (справа налево):
a=a^b; b=b^a; a=a^b; Если посмотришь то по поосле этого a и b поменяются значениями. a0 - начальное значение a; b0 - начальное значение b; a=a0^b0; b=b0^a=b0^(a0^b0)=a0; a=a^b = (a0^b0)^a0 = b0; -------------------- С уважением. Gray. |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Если переменные не большые и не будет переполнения типа, то можно
int a,b; a+=b; b=a-b; a=a-b; -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
XOR - великая вещь!
![]() ![]() ![]() -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
это будет работать даже, если будут возникать переполнения (оно, ведь, действует в две стороны) -------------------- qqq |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Обобщим ситуацию...
Пусть заданы две операции: F1: R^2 -> R, F2: R^2 -> R. Пусть также F2( F1( x, y), y) = x, F2( F1(x, y), x) = y. Заданы начальные значения переменных: x = x0, y = y0 Выполним такие операции: x <- F1(x, y) = F1(x0, y0) y <- F2(x, y) = F2( F1(x0, y0), y0) = x0 x <- F2(x, y) = F2( F1(x0, y0), x0) = y0 Таким образом, мы поменяли местами значения переменных. Мы уже знаем следующие возможности задания F1, F2: 1. F1(x, y) = F2(x, y) = x ^ y 2. F1(x, y) = x + y; F2(x, y) = x - y; Можно в принципе придумать и другие способы по этому шаблону, например F1(x, y) = x * y, F2(x, y) = x / y. -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
вот это как раз не совсем пройдет: в компьютерах не всегда (x/y)*y=x -------------------- qqq |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Для PC - вполне... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
а на PC уже отменили целочисленный тип? -------------------- qqq |
|||
|
||||
shedon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
В итоге х=4!!! 5 делится на 2, получается 2,5, но т.к. тип int то получаем 2, 2 умножаем на 2 получаем 4!!! -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
||||
|
|||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
да, забыл добавить, что необходимо учитывать и такие ньансы... Но есть конкретное тождество F2( F1( x, y), y) = x, F2( F1(x, y), x) = y, вот и смотрите, какие типы надо выбирать, чтобы оно выполнялось... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Возьмите типdouble и проблем не будет...
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
gray_k |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Будет. НЕльзя сравнивать вещественные числа, поэтому и тождества не будет.
Этот код чаще будет выдавать "Нет". -------------------- С уважением. Gray. |
||||
|
|||||
Waters |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.11.2003 Репутация: нет Всего: нет |
И насколько часто? Один раз на два, на сто или на тысячу запусков? ![]() wbr. Это сообщение отредактировал(а) Waters - 16.11.2003, 07:54 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |