MPI3
Хм...
offline
Опыт:
24,597Активность: |
Обмен значиниями двух переменных
Вот у мну есть(например) 2 переммные: инт1 и инт2.
Как обменять их значенияЮ без вмешательства третей??? |
08.02.2007, 19:06 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Garret
Недоброе творится
offline
Опыт:
3,893Активность: |
a:=a+b b:=a-b a:=a-b |
08.02.2007, 19:13 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
никак, без третьей переменной ты нарушает пару законов логики... |
08.02.2007, 19:13 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Maximus
Blue Leader :D
offline
Опыт:
14,397Активность: |
да только с третьеё переменной.
Garret а что ты написал? |
08.02.2007, 19:15 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
он написал с третьей переменной которую хранит в конструкции, опять же переменная есть. |
08.02.2007, 19:17 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Maximus
Blue Leader :D
offline
Опыт:
14,397Активность: |
DioD а, понятно.
|
08.02.2007, 19:20 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
a:=a+b
b:=a-b a:=a-b легко и просто превращается в аналог с явной перменной переменной
set A1 = A set A = B set B = A1 |
08.02.2007, 19:22 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
Код:
Garret вроде это хотел написать :) вроде должно работать! DioD - только "a" и "b" ! |
08.02.2007, 19:24 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Coffin666
Universal dominator
offline
Опыт:
3,242Активность: |
Цитата:
Вроде праильна и 2 перемнные только |
|
08.02.2007, 19:24 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
GadenbIsh
Просто Гад
offline
Опыт:
70,430Активность: |
Garret
все правильно говорит. Это способ без введения новой переменной. |
08.02.2007, 19:27 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Maximus
Blue Leader :D
offline
Опыт:
14,397Активность: |
Ога, Garret прав.
|
08.02.2007, 19:29 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Цитата:
как вам объяснить что переменная всё равно есть но она сохранена непосредственно в конструкции? |
|
08.02.2007, 19:31 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
DioD но мы же не создаём новую локальную переменную, а это хорошо :)
|
08.02.2007, 19:33 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
дело в том что так нельзя обменивать большие числа...
да и с отрицательными будут глюки |
08.02.2007, 19:36 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
DioD - не спорю, всё зависит от манипулируемых чисел. Так что MPI3 если у тебя дело с маленькими "плюсовыми" числами то это делается так как написали выше, а если нет, тогда нужна третья переменная!
|
08.02.2007, 19:46 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
объявить третью переменную проще чем ловить глюки... |
08.02.2007, 19:48 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
vuzya
offline
Опыт:
464Активность: |
2DioD 3 операции != 3 переменных.
и еще: по-моему (и по законам логики/математики) отрицательные числа работают. Можеш доказать(матеметически или методом подбора) обратное? set a=a+b set b=a-b set a=a-b set a=a*b set b=a/b set a=a/b Должны работать для всех чисел, если при первом действии число не выходит за границу охватываемую переменной.(поидее так еще с N-ным степенем и логарифмом можно, но это уже бред) а вообще в програмировании для обмена переменных местами исползуют операцио "xor"(тока в джассе ее броде-как надо описывать самостоятельно). Виглядит так: set a=a xor b set b=a xor b set a=a xor b Принцып действия на булевый тип я думаю известен всем, а на цэлые х.з. Если кому-то интересно могу обьяснить поподробнее. |
08.02.2007, 21:21 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Дело в том что все нормальные модмейкеры вводят выделеные глобальные переменные для подобных случаев.
Во первых глобалка всё равно нужна для отлова смерти потоков, во вторых присвоение 3х значений БЫСТРЕЕ чем высчитывание их 3 раза, тем более умножением.
еще бы степень засунули лимит числа (2^31) - 1
я не где не написал что отрицательные числа не работают, глюки != не работает. |
09.02.2007, 03:39 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
5,612Активность: |
DioD
Метод set a=a+b set b=a-b set a=a-b не так уж и плох в самом деле. 1) Никаких глюков с отрицательными числами нет. Они обрабатываются совершенно одинаково как и положительные. Вот если будете настаивать - давайте контрпример в студию. Именно простой логикой доказывается что таких глюков быть не может. Могут только см.2 2) С большими числами может быть глюк но это если a+b > 2 000 000 000, а это очччень редкое явление. На практике редко используются значения больше 10000 3) ЕДИНСТВЕННЫЙ ВАЖНЫЙ недостаток: указанная конструкция в ПЯТЬ РАЗ медленее чем при использовании третей переменной... все это съедают сложения и вычитания, а также 6 обращений к памяти вместо 3х.... nic666 добавил: P,S, я бы лично с этим не возился... обмен таким образом выгоден при жестко ограниченных ресурсах...как например регистры процессора.... а экономить одну переменную в памяти ИМХО : глупость! Отредактировано nic666, 09.02.2007 в 09:50. |
09.02.2007, 09:52 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dk
offline
Опыт:
60,293Активность: |
Как я полагаю просто мпи3 на уроке информатики задали эту задачку, вот он нас и спросил) Это такая распространенная проверочная задачка... |
09.02.2007, 10:27 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|