[Solucionado] Duda en operador ternario ?:

Iniciado por Mario Olivera, 21 Julio 2014, 04:22 AM

0 Miembros y 1 Visitante están viendo este tema.

Mario Olivera

Hola gente, miren tengo una linea de codigo que la verdad no la entiendo mucho, si bien se como funciona el operador ?: y el sigo de modulo (%) no logró entender esta linea:

Código (cpp) [Seleccionar]
cout <<(cuenta % 2 ? "****" : "+++++") << endl;

ok, entiendo que si se cumple Cuenta % 2 se imprime **** de lo contrario se imprime +++++.....

Bueno tambien se que 10 % 5 el resultado es 0.

Lo que no entiendo de la linea es que pone a cuenta despues a modulo y el numero 2, o seria cuenta sobra 2 o seria cuenta % 2 sobra (y eso no lo dice), no se si entienden lo que explico que no entiendo... pero bueno me vendria de 10 que alguien me explique la instruccion..

Desde ya muchas gracias por cualquier ayuda recibida  ::)

diskontrol

No se si es esto por lo que preguntas porque es un poco difícil entenderte.

Lo que hace es comprobar si el número es par  (cuenta % 2 = 0)  o impar (cuenta % 2 = 1) .
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI

eferion

"cuenta % 2" significa "cuenta MOD 2"... es decir, devuelve el módulo 2 del valor de "cuenta" o, dicho de otra forma, el resto de dividir "cuenta" entre 2. De esta forma sólo se pueden obtener dos resultados: 0 si "cuenta" es par y 1 si "cuenta" es impar.

Por tanto, si "cuenta" es par se imprime "+++++", mientras que si "cuenta" es impar, se imprime "****".

Mario Olivera

Muchas gracias por sus ayudas, con respecto a lo que me dijieron entendi, pero me  parecio muy raro que el programa sepa que si da cero se imprima algo y sino otra cosa cuando no se pasa ningun cero, si se pasa una cuenta a hacer pero nada mas :S

Saludos  :)

avesudra

#4
Cita de: 718208 en 21 Julio 2014, 15:44 PM
Muchas gracias por sus ayudas, con respecto a lo que me dijieron entendi, pero me  parecio muy raro que el programa sepa que si da cero se imprima algo y sino otra cosa cuando no se pasa ningun cero, si se pasa una cuenta a hacer pero nada mas :S

Saludos  :)
Hola 718208, creo que no has entendido del todo lo que te han querido decir eferion y diskontrol. Para las condiciones en C no hay tipos booleanos como en C++ (es decir true o false) , por tanto digamos (mira el mensaje de eferion abajo) que el true en C es el número 1 y el false el 0. Por eso cuando tu en el operador ternario que indicas arriba pones por ejemplo el número 5:

5 mod 2 = 1

Entonces lo que tienes en el código realmente es:
Código (cpp) [Seleccionar]
cout << (5 mod 2 ? "****" : "++++") << endl;
Código (cpp) [Seleccionar]
cout << (1 ? "****" : "++++") << endl;

Como es 1 entonces ejecuta lo primero  e imprime "****", si fuese 6 mod 2 imprimiría lo segundo.

Gracias por la corrección eferion.
Regístrate en

eferion

Cita de: avesudra en 21 Julio 2014, 16:09 PM
... por tanto digamos que el true en C es el número 1 y el false el 0.

Pequeño inciso al respecto: false es 0, cualquier otro valor será identificado como true


int main( )
{
  if ( 0 )
    printf( "Este mensaje no sale nunca\n" );

  if ( 5 )
    printf( "Este, en cambio, sale siempre\n" );

  if ( -4 )
    printf( "Este otro tambien sale siempre\n" );
}

Mario Olivera

Cita de: avesudra en 21 Julio 2014, 16:09 PM
Hola 718208, creo que no has entendido del todo lo que te han querido decir eferion y diskontrol. Para las condiciones en C no hay tipos booleanos como en C++ (es decir true o false) , por tanto digamos (mira el mensaje de eferion abajo) que el true en C es el número 1 y el false el 0. Por eso cuando tu en el operador ternario que indicas arriba pones por ejemplo el número 5:

5 mod 2 = 1

Entonces lo que tienes en el código realmente es:
Código (cpp) [Seleccionar]
cout << (5 mod 2 ? "****" : "++++") << endl;
Código (cpp) [Seleccionar]
cout << (1 ? "****" : "++++") << endl;

Como es 1 entonces ejecuta lo primero  e imprime "****", si fuese 6 mod 2 imprimiría lo segundo.

Gracias por la corrección eferion.


Gracias Avesudra  ;-)