Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1
    Visitante

    Padrão Troca de variaves em C

    Ola,

    Uma vez eu vi um site que mostrava várias formas trocar o valor de duas variaveis em C, sem usar uma variavel auxiliar! Alguem ja viu alguma coisa desse tipo?

    não lembro direito como era, mas acho que sempre tinha uma atribuicao dentro de uma expressao, alguma coisa desse tipo: a=a+(b-(b=a)), mas isso nao funciona...

    Se alguem sabe como fazer ou ja viu isso em algum lugar por favor poste o link aqui!


    valeu!

  2. #2

    Padrão Troca de variaves em C

    explica melhor oq vc ta querendo, q ficou meio confuso

  3. #3
    Visitante

    Padrão Troca de variaves em C

    Ok! vou explicar melhor!

    pra trocar o valor de duas variaveis em C usa-se uma variavel auxiliar, por exemplo:

    Código :
    int a, b, aux;
     
    a=2;
    b=4;
     
    printf("a=%d b=%d\n", a, b);
     
    /*troca*/
    aux=a;
    a=b;
    b=aux;
     
    printf("a=%d b=%d\n");

    a saida desse programa vai ser:

    Código :
    2 4
    4 2

    mas como fazer isso sem usar a variavel aux?

  4. #4
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    Ois,

    Deve ter algum comando que faca isso atraves de um registrador, mas acho que nao e' pra todas as plataformas.
    (porque, se tu pensar bem, e' so' trocar os enderecos correspondentes as variaveis: largar o endereco de uma em um registrador, move o endereco de uma pra outra e move o endereco do registrador pra uma, confuso neh.. rss.. ).

    Eu acho que cheguei a ver um comando que fazia exatamente isso, mas nao era portavel...

    Mas eu realmente nao vejo utilidade pra isso.. uma variavel auxiliar eh tao inofenciva

    ainda mais se vc usar ponteiros... ou se a sua variavel for menor que um long...

    []'s

  5. #5

    Padrão Troca de variaves em C

    soma os dois valores, e diminui dele mesmo...

    a=((a+b)-a)
    b=((a+b)-b)

  6. #6
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    hehe.. assim nao funciona nao

  7. #7

    Padrão Troca de variaves em C

    e porque não? testei e aprovei...

  8. #8
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    hahahah.. puts.. vc deve ter testado com variaveis iguais entao

    a = 1;
    b = 2;

    //a=((a+b)-a)
    //b=((a+b)-b)

    a = (1 + 2) - 1; // a = 2
    b = (2 + 2 ) - 2 // b =2

    Se isso funciona entao vo pedi demissao!

  9. #9

    Padrão Troca de variaves em C

    você tem razão... testei no delphi (jogando o valor nos campos) coisa que vc nao pode fazer no C

  10. #10
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    Citação Postado originalmente por Jim
    Citação Postado originalmente por _ivy_
    hahahah.. puts.. vc deve ter testado com variaveis iguais entao

    a = 1;
    b = 2;

    //a=((a+b)-a)
    //b=((a+b)-b)

    a = (1 + 2) - 1; // a = 2
    b = (2 + 2 ) - 2 // b =2

    Se isso funciona entao vo pedi demissao!

    Pode ir falar com seu chefe entao...


    vc fez assim:

    b = (2 + 2 ) - 2 // b =2

    enquanto seria assim:

    b = (1 + 2 ) - 2 // b =1

    ou seja: OS VALORES FORAM INVERTIDOS!!!

    Meu Deus! Isso é muito óbvio!!!

    Hahahahahahahahahahh... amigo, agora vou baixar o nivel e nao estou falando em programar em ASM

    Vc ja programou alguma vez na vida? Entende o conceito de sequencia?

    Veja bem.. depois que vc faz:

    a = (1 + 2) - 1; // a = 2

    O valor de "a" deixa de ser "1" e passa a ser "2".. é isso que acontece quando se faz uma atribuição.. logo.. quando for executar a segunda expressao.. o valor de "a" vai ser "2" e não "1".

    Bom, se ainda assim acredita que isso funciona, abre o vim.. faz um programinha, teste com "n" valores.. compile.. e poste aqui os resultados.. Se funcionar.. viro sua fã

  11. #11

    Padrão Troca de variaves em C

    cara... eu admiti que errei, mas que bom saber da sua ignorância
    (estava apenas tentando ajudar)

  12. #12
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    Foi mal, eu respondi aquilo antes de ler o seu ultimo post.. desculpe a alteracao de animo..

  13. #13

    Padrão Troca de variaves em C

    tudo bem, eu tb te amo

  14. #14

    Padrão Troca de variaves em C

    tudo bem, eu tb te amo

  15. #15
    Arkanoid
    Visitante

    Padrão Troca de variaves em C

    Eu lembro de ter visto isso em um site; era assim:
    Código :
    a ^= b ^= a ^= b
    São três XORs entre as variáveis. "Traduzindo", fica assim:
    Código :
    a = a ^ b
    b = b ^ a
    a = a ^ b
    Testei aqui no C e funcionou.

  16. #16

    Padrão Troca de variaves em C

    a miguinha ivy ta estressada .... nas não liga não Jim é Mulher :lol: :lol: :lol: :lol: :lol: :lol: :lol: Só não vai se stressa comigo ivy ....é brincadeira .....

    abraços

  17. #17

    Padrão Troca de variaves em C

    Citação Postado originalmente por smileybyte
    Eu lembro de ter visto isso em um site; era assim:
    Código :
    a ^= b ^= a ^= b
    São três XORs entre as variáveis. "Traduzindo", fica assim:
    Código :
    a = a ^ b
    b = b ^ a
    a = a ^ b
    Testei aqui no C e funcionou.

    Isso funciona ... legal vo adota na minha programação .... o smilebyte achou a solução ....hehehe

    Valeu

  18. #18
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    Pensando aqui na minha ardua tarde de trabalho.. cheguei as seguintes linhas:

    a += b;
    b = a-b;
    a -= b;

    Parece que funciona

  19. #19
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    Citação Postado originalmente por smileybyte
    Eu lembro de ter visto isso em um site; era assim:
    Código :
    a ^= b ^= a ^= b
    São três XORs entre as variáveis. "Traduzindo", fica assim:
    Código :
    a = a ^ b
    b = b ^ a
    a = a ^ b
    Testei aqui no C e funcionou.
    Heheh.. praticamente igual ao que eu mandei.. só que ao invés de usar + e - vc usa xor . O que é melhor pois evita overflow

  20. #20
    _ivy_
    Visitante

    Padrão Troca de variaves em C

    Citação Postado originalmente por smvda
    a miguinha ivy ta estressada .... nas não liga não Jim é Mulher :lol: :lol: :lol: :lol: :lol: :lol: :lol: Só não vai se stressa comigo ivy ....é brincadeira .....

    abraços
    É.. eheheh.. viu gente.. tomem cuidado com os posts.. nunca se sabe quando vai ter uma mulher com tpm no forúm.. eheheheh...