есть задание на паскале суть его проста. Дано: x:=y; y:=x; надо без использования лишней переменной сделать так чтобы получилось X:=x; y:=y; Предложите выриант решения
Kaimi это пракатит вроде только если значения числовые.... а надо именно с буквиными... (паскаля под рукой нет чтоб проверить)
а по проще? просто так я сам сделать могу но мы только начали проходить паскаль и я боюсь училка меня не правельно поймет....
var s1,s2 : string; i : byte; begin s1:='01234'; s2:='56789'; for i:=1 to 5 do begin s1:=chr(ord(s1) xor ord(s2)); s2:=chr(ord(s1) xor ord(s2)); s1:=chr(ord(s1) xor ord(s2)); 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 и мы запишем в первый разряд второго числа первый разряд первого числа,то первый разряд второго числа мы потеряем.
мне сегодня препод из универа сказал что в питоне есть гениальная логическая конструкция Code: a , b = b , a
хы , для строк: Code: 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)); хотя фактичеки памяти это убьет гораздо больше чем новая переменная , имхо