Просмотр полной версии : поменять значение переменных...
gold-goblin
19.02.2008, 00:50
есть задание на паскале суть его проста.
Дано:
x:=y;
y:=x;
надо без использования лишней переменной сделать так чтобы получилось
X:=x;
y:=y;
Предложите выриант решения
X=X XOR Y;
Y=X XOR Y;
X=X XOR Y;
gold-goblin
19.02.2008, 01:03
Kaimi
это пракатит вроде только если значения числовые.... а надо именно с буквиными...
(паскаля под рукой нет чтоб проверить)
gold-goblin
19.02.2008, 01:05
diehard
а если значения буквенные?
KoMPLiMenT
19.02.2008, 01:22
void swap(int& i, int& j)
{
i ^= j;
j ^= i;
i ^= j;
}
сорри паскаль благополучно забыл
gold-goblin
19.02.2008, 01:28
а по проще? :)
просто так я сам сделать могу но мы только начали проходить паскаль и я боюсь училка меня не правельно поймет....
gold-goblin
Все буквы (char) имеют численный charcode (в паскале функции ord() и обратная chr())
gold-goblin
19.02.2008, 01:30
diehard
а ну в принцыпе можно и так.
(сам не додумался)
есть еще вырианты?
gold-goblin
19.02.2008, 01:34
да
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
и мы запишем в первый разряд второго числа первый разряд первого числа,то первый разряд второго числа мы потеряем.
gold-goblin
19.02.2008, 15:19
zlOy
спсибо я в асме дуб дубом ну вроде врублся вто что ты написал =)
мне сегодня препод из универа сказал что в питоне есть гениальная логическая конструкция :)
a , b = b , a
nc.STRIEM
23.02.2008, 01:30
незнаю правильно ли я понял
x+=y;
y=x-y;
x-=y;
gold-goblin
23.02.2008, 01:43
Jes
былоб это в паскале =)
nc.STRIEM
не совсем =)
здесь у тебя не получится что
x:=x;
y:=y;
nc.STRIEM
23.02.2008, 01:44
x=a y=b
после действий что я написал будет x=b y=a
хы , для строк:
a:= 'one';
b:= 'two';
a:= a + b;
b:= Copy(a, 1, length(a)-length(b));
a:= Copy(a, length(a)-length(b)+1, length(a)-length(b));
хотя фактичеки памяти это убьет гораздо больше чем новая переменная , имхо
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot