Duda programación en C

Buenas,

Me he quedado enganchado en un ejercicio y llevo un buen rato rompiéndome la cabeza.

Necesito introducir dos valores enteros en dos variables, var1 y var2, y luego que estos valores se intercambien de modo que var1 tendría el valor de var2 y var2 el valor de var1. Cómo haríais esto en una sentencia sin poder introducir más variables ?


Saludos.
Si no puedes utilizar otra variable, puedes usar este operador

http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html
No-Alternative escribió:Buenas,

Me he quedado enganchado en un ejercicio y llevo un buen rato rompiéndome la cabeza.

Necesito introducir dos valores enteros en dos variables, var1 y var2, y luego que estos valores se intercambien de modo que var1 tendría el valor de var2 y var2 el valor de var1. Cómo haríais esto en una sentencia sin poder introducir más variables ?


Saludos.


¿Sin poder introducir más variables? Creo que hay un comando para intercambiar valores; pero lo cierto es que yo nunca llegue a usarlo. Es más lógico intercambiarlos de la forma tradicional.

Lo suyo sería:

int var3; // Para crear un tercer entero.

var3 = var1; // Metes el valor de 1 en 3.
var1 = var2; // Metes en var1 el valor de 2.
var2 = var3; // Metes en var2 el valor de var3 (que es el mismo valor que originariamente tenía uno).
a = a+b;
b = a-b;
a = a-b;

Y con eso creo que intercambias los valores sin variables temporales ni operadores especiales.
Muchas gracias compañeros !
kbks escribió:a = a+b;
b = a-b;
a = a-b;

Y con eso creo que intercambias los valores sin variables temporales ni operadores especiales.


Eso no funciona en realidad, para un apaño vale pero corres el riesgo de revasar el limite de precion del la variable muy facilmente.

Ademas que el ejercicio que plantean yo lo veo absurdo desde el punto de vista util.
sabran escribió:
kbks escribió:a = a+b;
b = a-b;
a = a-b;

Y con eso creo que intercambias los valores sin variables temporales ni operadores especiales.


Eso no funciona en realidad, para un apaño vale pero corres el riesgo de revasar el limite de precion del la variable muy facilmente.

Ademas que el ejercicio que plantean yo lo veo absurdo desde el punto de vista util.


Evidentemente estas limitado por el número de bits que tiene el tipo de dato y "a" puede desbordarse, pero si los posibles valores de a y b están limitados (es decir, si su suma cabe en una de las variables) funciona perfectamente. De todos modos el riesgo de desborde es exactamente el mismo que sufres en cualquier otra operación en la que no tengas excesivo cuidado ¿O tu nunca has almacenado en un entero la suma de otros dos?
sabran escribió:
kbks escribió:a = a+b;
b = a-b;
a = a-b;

Y con eso creo que intercambias los valores sin variables temporales ni operadores especiales.


Eso no funciona en realidad, para un apaño vale pero corres el riesgo de revasar el limite de precion del la variable muy facilmente.

Ademas que el ejercicio que plantean yo lo veo absurdo desde el punto de vista util.

No es mas que un ejercicio para ir defendiéndose con el lenguaje y pillarle el truco al tema de declarar variables y asignarles valores.
Namco69 escribió:
sabran escribió:
kbks escribió:a = a+b;
b = a-b;
a = a-b;

Y con eso creo que intercambias los valores sin variables temporales ni operadores especiales.


Eso no funciona en realidad, para un apaño vale pero corres el riesgo de revasar el limite de precion del la variable muy facilmente.

Ademas que el ejercicio que plantean yo lo veo absurdo desde el punto de vista util.

No es mas que un ejercicio para ir defendiéndose con el lenguaje y pillarle el truco al tema de declarar variables y asignarles valores.


Exacto.
kbks escribió:a = a+b;
b = a-b;
a = a-b;

Y con eso creo que intercambias los valores sin variables temporales ni operadores especiales.


Eso te valdra muchas veces. ;)
Namco69 escribió:Ademas que el ejercicio que plantean yo lo veo absurdo desde el punto de vista util.

No es mas que un ejercicio para ir defendiéndose con el lenguaje y pillarle el truco al tema de declarar variables y asignarles valores.

No sería este el tipo de ejercicios que pondría yo... [reojillo]
Un poco raro si que es. Yo en clase para controlar los operadores de C he hecho cosas tipo de hallar hipotenusa dados los catetos cuyo valor se da por el teclado, hallar distancia entre dos coordenadas, dando el valor por el teclado. Pero ese ejercicio es un poco raro
12 respuestas