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 = 102o. 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 feitaUltimo 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++:
#includeusing 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