[C con Clase] Comprobar diferencias entres 3 variables

Salvador Pozo salvador en conclase.net
Lun Oct 20 13:42:45 CEST 2008


El pasado 2008-10-20 09:23:55, Antonio escribió:
 
A> Hola
A> Estoy empezando con C y me encuentro haciendo un programita que comprueba el
A> valor entre tres variables... y he probado de casi todo, desde comprobar si
A> todas son diferentes:
A> if (( var1!=var2)!=var3)...
A> y tampoco me funciona. ¿Alguna orientacion?. Muchas gracias.

Hola:

Primero, bienvenido al grupo.

Debes tener cuidado con este tipo de expresiones, como norma general.

Los operadores de comparación dan como resultado un valor de tipo bool, es decir, la comparación (var1!=var2) da como resultado true o false. Si comparas este valor con var3, el compilador convierte el valor bool anterior al tipo de var3, y después los compara.

En tu ejemplo, var1, var2 y var3 son de tipo int. Un valor bool covertido a int será cero si es false, o un valor distinto de cero, si es true (ese valor no está determinado, depende del compilador, puede ser 1, -1 o cualquier otro).

El resultado dependerá sólo de si var3 es nulo o no, pero no de si es igual o diferente de var1 o var2.

Si lo piensas hay dos posibilidades (con tres variables).

Una es si necesitas que las tres sean iguales, en ese caso basta con dos comparaciones:

if(var1 == var2 && var1 == var3)

No es necesario comparar var2 con var3, ya que si son iguales, también serán verdaderas las dos comparaciones realizadas.

La otra posibilidad es que las tres variables deban ser distintas entre sí, en ese caso hay que hacer tres comparaciones:

if(var1 != var2 && var1 != var3 && var2 != var3)

Ahora, la condición global sólo será verdadera si lo son cada una de las tres comparaciones.

Según tu programa, necesitas comprobar si las tres variables son distintas, y si no es así, si dos de ellas son iguales. 

Para eso puedes usar las dos comparaciones anteriores. Pero ten en cuenta que hay otras posibilidades:
  - Que las tres sean iguales
  - Que las tres sean diferentes
  - Que dos sean iguales, y diferentes de la tercera.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase