поменять значение переменных...

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by gold-goblin, 18 Feb 2008.

  1. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    есть задание на паскале суть его проста.
    Дано:
    x:=y;
    y:=x;

    надо без использования лишней переменной сделать так чтобы получилось
    X:=x;
    y:=y;

    Предложите выриант решения
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Code:
    X=X XOR Y;
    Y=X XOR Y;
    X=X XOR Y;
    
     
    _________________________
  3. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Kaimi
    это пракатит вроде только если значения числовые.... а надо именно с буквиными...
    (паскаля под рукой нет чтоб проверить)
     
  4. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    x:=x+y;
    y:=x-y;
    x:=x-y;
     
  5. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    diehard
    а если значения буквенные?
     
  6. KoMPLiMenT

    KoMPLiMenT New Member

    Joined:
    25 Apr 2007
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    void swap(int& i, int& j)
    {
    i ^= j;
    j ^= i;
    i ^= j;
    }

    сорри паскаль благополучно забыл
     
    #6 KoMPLiMenT, 19 Feb 2008
    Last edited: 19 Feb 2008
    1 person likes this.
  7. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    а по проще? :)
    просто так я сам сделать могу но мы только начали проходить паскаль и я боюсь училка меня не правельно поймет....
     
  8. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    gold-goblin

    Все буквы (char) имеют численный charcode (в паскале функции ord() и обратная chr())
     
    1 person likes this.
  9. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    diehard
    а ну в принцыпе можно и так.
    (сам не додумался)
    есть еще вырианты?
     
  10. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Длинна строк постоянна?
     
  11. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
  12. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    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;

    На асме сложнее если надо могу подумать ;)
     
  13. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    На асме помему без привлечения 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
    и мы запишем в первый разряд второго числа первый разряд первого числа,то первый разряд второго числа мы потеряем.
     
    #13 zl0y, 19 Feb 2008
    Last edited: 19 Feb 2008
    3 people like this.
  14. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    zlOy
    спсибо я в асме дуб дубом ну вроде врублся вто что ты написал =)
     
  15. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    мне сегодня препод из универа сказал что в питоне есть гениальная логическая конструкция :)
    Code:
    a , b = b , a
     
  16. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    незнаю правильно ли я понял
    x+=y;
    y=x-y;
    x-=y;
     
  17. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Jes
    былоб это в паскале =)

    nc.STRIEM

    не совсем =)
    здесь у тебя не получится что
    x:=x;
    y:=y;
     
  18. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    x=a y=b
    после действий что я написал будет x=b y=a
     
  19. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    хы , для строк:
    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));
    
    хотя фактичеки памяти это убьет гораздо больше чем новая переменная , имхо
     
    #19 Jes, 23 Feb 2008
    Last edited: 23 Feb 2008