Autor
|
Tema: ¿Es posible intercambiar dos valores sin usar variable auxiliar? (Leído 14,995 veces)
|
DickGumshoe
|
Hola.
Me han planteado dos preguntas. La primera la sé responder.
1. ¿Es posible intercambiar dos valores?
Y yo creo que sí, ya que haciendo lo siguiente en C, me intercambia los valores:
aux=a a=b b=aux
Por ejemplo, si a=4 y b=5; con esto será b=4 y a=5, por lo que he comprobado que esa respuesta es correcta.
Ahora viene la segunda pregunta, que es la que no sé...
2. ¿Es posible intercambiar dos valores sin utilizar una variable auxiliar?
En el caso anterior, utilicé la variable "aux", para poder intercambiar los valores de a y b, pero ahora el enunciado dice que no puedo utilizarla.
He probado a poner a=b b=a ,pero claro, al poner a=b, en b=a ya estoy diciendo que a=a, por lo que no es correcto.
También he probado con
((a=b) & (b=a)), pero tampoco...
Y bueno, ya en un papel tengo varias posibilidades más, pero son erróneas también...
¿Alguien podría explicarme si es posible?
Muchísimas gracias.
|
|
« Última modificación: 13 Noviembre 2011, 19:56 pm por DickGumshoe »
|
En línea
|
|
|
|
|
DickGumshoe
|
Ah, muchísimas gracias, ya lo entiendo. Saludos. P.D.: También he sacado la fórmula de a=a+b b=a-b a=a-b Muchas gracias.
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
También he sacado la fórmula de
a=a+b b=a-b a=a-b
Con eso provocarias un OverFlow con valores grandes... inline void swap(void* pv1, void* pv2) { *((int*)pv1) ^= *((int*)pv2); *((int*)pv2) ^= *((int*)pv1); *((int*)pv1) ^= *((int*)pv2); }
o #define swap(pv1,pv2) pv1 ^= pv2; pv2 ^= pv1; pv1 ^= pv2;
Te recomiendo la macro... Dulces Lunas!¡.
|
|
« Última modificación: 13 Noviembre 2011, 21:34 pm por BlackZeroX (Astaroth) »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
DickGumshoe
|
Con eso provocacias un OverFlow con valores grandes... inline void swap(void* pv1, void* pv2) { *((int*)pv1) ^= *((int*)pv2); *((int*)pv2) ^= *((int*)pv1); *((int*)pv1) ^= *((int*)pv2); }
o #define swap(pv1,pv2) pv1 ^= pv2; pv2 ^= pv1; pv1 ^= pv2;
Dulces Lunas!¡. Ya... Lo que pasa que el código del "xor" todavía no lo he dado (tengo 13 años y estoy estudiando con unos apuntes que hay en una web), así que por ahora no lo podré hacer así. Cuando llegue a esa parte, usaré el otro código. Muchas gracias a todos.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
2. ¿Es posible intercambiar dos valores sin utilizar una variable auxiliar? Tal vez si o tal vez no (depende del tipo de valor y de los objetos en cuestión). Ese es el problema: ya que no hay una forma realmente genérica para realizar el intercambio (al menos no en C estándar) lo mejor es utilizar una variable temporal y dejarle el resto al compilador. También he probado con
((a=b) & (b=a)), pero tampoco... Te recomendaría que no hicieras eso: "tasajear" código para "ver que pasa" y en base al resultado sacar conclusiones. Ello porque si cometes un error en C eso resulta en "comportamiento no definido", en buen cristiano cualquier cosa puede pasar, por ejemplo: A) El programa revienta B) Se quema la PC C) Te deja la novia/amiga con privilegios/etc. D) Lo peor: todo funciona de maravilla. Es usualmente el ultimo caso el que da problemas: le das el programa a tu profesor/tutor/etc. y resulta que el bendito programa no funciona en su PC. Mejor consigue un buen libro y aprende en base a el (y foros como este). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DickGumshoe
|
Tal vez si o tal vez no (depende del tipo de valor y de los objetos en cuestión). Ese es el problema: ya que no hay una forma realmente genérica para realizar el intercambio (al menos no en C estándar) lo mejor es utilizar una variable temporal y dejarle el resto al compilador.
Te recomendaría que no hicieras eso: "tasajear" código para "ver que pasa" y en base al resultado sacar conclusiones. Ello porque si cometes un error en C eso resulta en "comportamiento no definido", en buen cristiano cualquier cosa puede pasar, por ejemplo:
A) El programa revienta B) Se quema la PC C) Te deja la novia/amiga con privilegios/etc. D) Lo peor: todo funciona de maravilla.
Es usualmente el ultimo caso el que da problemas: le das el programa a tu profesor/tutor/etc. y resulta que el bendito programa no funciona en su PC.
Mejor consigue un buen libro y aprende en base a el (y foros como este).
Un saludo
Bueno, eso lo hice pensando, solo que no era correcto, y por eso daba error. En realidad no metí eso por probar. Muchas gracias a todos por haber resuelto mi duda ^^
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Adicionar valores a una variable con ollyscript
Ingeniería Inversa
|
.:UND3R:.
|
4
|
3,287
|
21 Octubre 2011, 04:58 am
por Иōҳ
|
|
|
intercambiar valores dentro de un vector
Programación C/C++
|
bash
|
8
|
4,422
|
21 Enero 2016, 23:46 pm
por bash
|
|
|
copiar ciertos valores de una variable en otra variable en lenguaje C.
Programación C/C++
|
fafafa01
|
9
|
7,383
|
19 Abril 2016, 18:32 pm
por geeke
|
|
|
Como intercambiar valores de un iterator en C++
« 1 2 »
Programación C/C++
|
alpachino98
|
14
|
5,139
|
22 Enero 2019, 16:02 pm
por dijsktra
|
|
|
Intercambiar valores de dos variables (batch) --ayuda--
Scripting
|
juntacadaveres
|
7
|
4,089
|
24 Abril 2019, 18:08 pm
por Tachikomaia
|
|