Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mario Olivera en 21 Julio 2014, 04:22 am



Título: [Solucionado] Duda en operador ternario ?:
Publicado por: Mario Olivera en 21 Julio 2014, 04:22 am
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
  1. 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  ::)


Título: Re: Duda en operador ternario ?:
Publicado por: diskontrol en 21 Julio 2014, 08:07 am
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) .


Título: Re: Duda en operador ternario ?:
Publicado por: eferion en 21 Julio 2014, 08:11 am
"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 "****".


Título: Re: Duda en operador ternario ?:
Publicado por: Mario Olivera 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  :)


Título: Re: Duda en operador ternario ?:
Publicado por: avesudra en 21 Julio 2014, 16:09 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
  1. cout << (5 mod 2 ? "****" : "++++") << endl;
Código
  1. 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.


Título: Re: Duda en operador ternario ?:
Publicado por: eferion en 21 Julio 2014, 16:14 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

Código
  1. int main( )
  2. {
  3.  if ( 0 )
  4.    printf( "Este mensaje no sale nunca\n" );
  5.  
  6.  if ( 5 )
  7.    printf( "Este, en cambio, sale siempre\n" );
  8.  
  9.  if ( -4 )
  10.    printf( "Este otro tambien sale siempre\n" );
  11. }


Título: Re: Duda en operador ternario ?:
Publicado por: Mario Olivera en 21 Julio 2014, 17:17 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
  1. cout << (5 mod 2 ? "****" : "++++") << endl;
Código
  1. 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  ;-)