/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

operador ternario

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 23/09/2007 5:08 pm
Título: operador ternario

Hola!

Quisiera saber más sobre el operador ternario, sé que se trata de algo así:

Condición ? Expresión1 : Expresión2

En la condición deben estar implicadas las expresiones 1 y 2. Que tipo de expresiones se pueden llegar a poner.

Saludos!!
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 23/09/2007 8:07 pm
Título: Re: operador ternario

Pantalàimon_ escribió:
En la condición deben estar implicadas las expresiones 1 y 2.

No entiendo a que te refieres con eso.

Pantalàimon_ escribió:
Que tipo de expresiones se pueden llegar a poner.

El operador ternario tiene la estructura:
Código:
expr_1 ? expr_2 : expr_3

Aqui expr_1 es cualquier expresion cuyo resultado sea de tipo entero (short, int, etc.), si este es verdadero (diferente de cero) se evalua la segunda expresion (expr_2) y si es falso (cero) se evalua la tercera expresion (expr_3).

La segunda y tercera expresion puedes ser expresiones de cualquier tipo y se tiene la garantia de que solo una de estas se evalua, esa es el resultado del operador y esto se complica en el caso de que estas sean de distinto tipo.

En el caso de dos expresiones de tipo aritmetico (enteros y flotantes) se realizan las "standart arithmetic promotions", el objeto de esas promociones es obtener un tipo comun (si te interesa ese tema lo mejor es comprar un buen libro. hay algunos recomendados en los foros y puedes obtener mas informacion utilizando el motor de busqueda).

Por ejemplo:
Código:
(rand() % 2 != 0) ? 1.0 : 7UL;

En este caso la segunda expresion es de tipo double mientras que la tercera es de tipo unsigned long, aqui independientemente del resultado de la primera expresion el resultado del operador es de tipo double, hay que tener esto en cuenta porque podria afectar expresiones que a primera vista son correctas.

Siguiendo el ejemplo (por cierto muy malo) esto:
Código:
7UL % ((rand() % 2 != 0) ? 1.0 : 7UL);

No seria valido aun cuando el resultado de rand() sea un numero par.

Otra forma de verlo es pensar que esa expresion se procesa de esta forma:
Código:
7UL % ((rand() % 2 != 0) ? 1.0 : (double) 7UL);

Donde ambas expresiones (segunda y tercera) tienen el mismo tipo (double).

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 23/09/2007 8:11 pm
Título:

Básicamente se trata de un Condicional Alternativo, pero en mi compilador(VC++) no se puede por ejemplo:
Condicion ? break : (?) <- lo que sea

Yo generalmente lo utilizo en un return:
return(a>0 ? true : false);

Ya que no puedo:
a>0 ? return(true) : return(false)

Además puedo utilizarlo asi:
Condición ? exp1, exp2 : exp3

otro ejemplo:
Condición ? free(exp1), exp1=0, : 0 <-(cero)

Saludos.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 23/09/2007 8:29 pm
Título:

daltomi escribió:
Básicamente se trata de un Condicional Alternativo, pero en mi compilador(VC++) no se puede por ejemplo:
Condicion ? break : (?) <- lo que sea

Eso se debe a que el operador ternario requiere de tres expresiones y si bien las expresiones pueden convertirse en sentencias agregando el punto y coma final:
Código:
if (2 + 2 /* expresion */){

   /* ... */
   
}

2 + 2; /* sentencia */

El problema es que la inversa no aplica: las sentencias (declarativas, seleccion, repeticion, etc.) no pueden convertirse en expresiones.

daltomi escribió:
Además puedo utilizarlo asi:
Condición ? exp1, exp2 : exp3

otro ejemplo:
Condición ? free(exp1), exp1=0, : 0 <-(cero)

Eso se debe a que el operador secuencial (la ',') tiene la menor prioridad entre todos los operadores del lenguaje, la primera expresion es equivalente a:
Código:
Condición ? (exp1, exp2) : exp3


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 23/09/2007 9:06 pm
Título:

Gracias rir por la aclaración.
Saludos.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com