![]() |
поменять значение переменных...
есть задание на паскале суть его проста.
Дано: x:=y; y:=x; надо без использования лишней переменной сделать так чтобы получилось X:=x; y:=y; Предложите выриант решения |
Код:
X=X XOR Y; |
Kaimi
это пракатит вроде только если значения числовые.... а надо именно с буквиными... (паскаля под рукой нет чтоб проверить) |
x:=x+y;
y:=x-y; x:=x-y; |
diehard
а если значения буквенные? |
void swap(int& i, int& j)
{ i ^= j; j ^= i; i ^= j; } сорри паскаль благополучно забыл |
а по проще? :)
просто так я сам сделать могу но мы только начали проходить паскаль и я боюсь училка меня не правельно поймет.... |
gold-goblin
Все буквы (char) имеют численный charcode (в паскале функции ord() и обратная chr()) |
diehard
а ну в принцыпе можно и так. (сам не додумался) есть еще вырианты? |
Длинна строк постоянна?
|
да
|
var s1,s2 : string;
i : byte; begin s1:='01234'; s2:='56789'; for i:=1 to 5 do begin s1[i]:=chr(ord(s1[i]) xor ord(s2[i])); s2[i]:=chr(ord(s1[i]) xor ord(s2[i])); s1[i]:=chr(ord(s1[i]) xor ord(s2[i])); end; На асме сложнее если надо могу подумать ;) |
На асме помему без привлечения 3 переменной не реально если переменные - строки,для байтов еще возможно
mov eax,byte ptr [s1+ecx] mov ebx,byte ptr [s2+ecx] xchg eax,ebx mov byte ptr[s1+ecx],ebx mov byte ptr [s2+ecx],eax Если смотреть как мы видим этот текст то тут нету третьей переменной,но если смотреть с уровня процессора и математической логики то она есть т.к все равно число для обмена засовываеться в стек или в переменную,даже если предположить что xchg это что то тройного XOR'a то все равно должна быть переменная где храниться промежуточный результат,поправьте если я не прав,мне почему то так кажеться :( Все таки все верно :) Тоесть если у нас два числа 1234,5678 и мы запишем в первый разряд второго числа первый разряд первого числа,то первый разряд второго числа мы потеряем. |
zlOy
спсибо я в асме дуб дубом ну вроде врублся вто что ты написал =) |
мне сегодня препод из универа сказал что в питоне есть гениальная логическая конструкция :)
Код:
a , b = b , a |
незнаю правильно ли я понял
x+=y; y=x-y; x-=y; |
Jes
былоб это в паскале =) nc.STRIEM не совсем =) здесь у тебя не получится что x:=x; y:=y; |
x=a y=b
после действий что я написал будет x=b y=a |
хы , для строк:
Код:
a:= 'one'; |
| Время: 18:52 |