Trocando o valor de duas variáveis sem utilizar uma variável temporária

0
  • terça-feira, 9 de fevereiro de 2010
  • The Geek
  • Tags: , , ,
  • Olá galerinha.....

    Este é meu primeiro post sobre Programação. É muito "basico", porém eu acho muito interessante...espero que gostem :D!!!

    Eu vou mostrar como trocar ( swap ) o valor de duas variáveis sem utilizar uma variável temporária.

    Imagine o seguinte caso: Voce tem duas variáveis, X e Y, e voce precisa colocar o valor de Y na variável X, e o valor de X na variável Y.

    Por exemplo: Voce tem duas variáveis com seus respectivos valores:
    int x = 4;
    int y = 6;
    

    Agora, vamos criar uma função para trocar os valores das variáveis sem utilizar uma variável temporária:
    /*
     * Function to swap two variables values using XOR
     * IN: the two variables by References
     * OUT: nothing
     * Usage: XORswap( &varA, &varB );
     */
    void XORswap( int *a, int *b ) {
        *a ^= *b;  // *a = *a ^ *b
        *b ^= *a;  // *b = *a ^ *b
        *a ^= *b;  // *a = *a ^ *b
    }
    

    Agora, deixe-me explicar como o código funciona, porém utilizando os operadores + e -
    /*
     * Function to swap two variables values using + and -
     * IN: the two variables by References
     * OUT: nothing
     * Usage: Easyswap( &varA, &varB );
     */
    void Easyswap( int *a, int *b ) {
        *a = *a + *b; 
        *b = *a - *b; 
        *a = *a - *b; 
    }
    

    Vamos testar nosso codigo, 1o. passo:
    x = x + y; 
    
    Substituindo as variáveis X->4 e Y->6 nos temos o seguinte:
    x = 4 + 6; //x = 10
    
    2o. passo:
    y = x - y; 
    
    Substituindo as variáveis X->10 and Y->6 nós temos o seguinte:
    y = 10 - 6; // y = 4  -> primeira troca feita
    
    Ultimo passo:
    x = x - y; 
    
    Substituindo a variável X->10 e Y->4 nós temos o seguinte:
    x = 10 - 4; // x = 6  -> última troca feita.
    

    Então, depois de tudo, a troca está feita, muito fácil, não é?
    Segue o código completo escrito em C++:
    #include 
    
    using namespace std;
    
    /*
     * Function to swap two variables values using XOR
     * IN: the two variables by References
     * OUT: nothing
     * Usage: Easyswap( &varA, &varB );
     */
    void XORswap( int *a, int *b ) {
        *a ^= *b;
        *b ^= *a;
        *a ^= *b;
    }
    
    
    /*
     * Function to swap two variables values using + and -
     * IN: the two variables by References
     * OUT: nothing
     * Usage: EASYswap( &varA, &varB );
     */
    void EASYswap( int *a, int *b ) {
        *a = *a + *b; 
        *b = *a - *b; 
        *a = *a - *b; 
    }
    
    
    int main() {
        int a = 3;
        int b = 7;
        
        cout << "Before XORswap " << endl 
             << "A: " << a        << endl 
             << "B: " << b        << endl 
             << "------------"    << endl;
    
        XORswap( &a, &b);
    
        cout << "After XORswap "  << endl 
             << "A: " << a        << endl 
             << "B: " << b        << endl 
             << "------------"    << endl ;
        
        a = 3;
        b = 7;
        
        cout << endl 
             << endl 
             << endl;
    
        cout << "Before EASYswap " << endl 
             << "A: " << a         << endl 
             << "B: " << b         << endl 
             << "------------"     << endl ;
    
        EASYswap( &a, &b );
    
        cout << "After EASYswap " << endl
             << "A: " << a        << endl 
             << "B: " << b        << endl 
             << "------------"    << endl ;
        
        cin.get();
        
    }
    

    Em breve colocarei mais coisas....
    []'s para todos

    0 comments:

    Postar um comentário

     
    Copyright 2010 The Geek's Way