Autor
|
Tema: [Solucionado] Duda en operador ternario ?: (Leído 3,907 veces)
|
Mario Olivera
Desconectado
Mensajes: 108
Ser loco es pensar diferente.
|
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: 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
|
|
« Última modificación: 21 Julio 2014, 17:21 pm por 718208 »
|
En línea
|
|
|
|
diskontrol
Desconectado
Mensajes: 89
RAWR!
|
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) .
|
|
|
En línea
|
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
"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 "****".
|
|
|
En línea
|
|
|
|
Mario Olivera
Desconectado
Mensajes: 108
Ser loco es pensar diferente.
|
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
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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: cout << (5 mod 2 ? "****" : "++++") << endl;
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.
|
|
« Última modificación: 21 Julio 2014, 16:23 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
... 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" ); }
|
|
|
En línea
|
|
|
|
Mario Olivera
Desconectado
Mensajes: 108
Ser loco es pensar diferente.
|
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: cout << (5 mod 2 ? "****" : "++++") << endl;
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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con operador max(int,int); [Solucionado]
Java
|
Debci
|
2
|
3,062
|
22 Mayo 2009, 15:37 pm
por Debci
|
|
|
duda sobre operador new
Programación C/C++
|
<[(x)]>
|
1
|
2,237
|
19 Mayo 2011, 10:22 am
por willyhunting
|
|
|
(Solucionado) [Ruby] Duda sobre FOR con operador de rango
Scripting
|
Eleкtro
|
3
|
3,503
|
24 Febrero 2012, 13:42 pm
por Eleкtro
|
|
|
[Ayuda] Operador ternario
Java
|
Senior++
|
2
|
2,236
|
13 Julio 2012, 15:24 pm
por Senior++
|
|
|
strcmp a mano // operador ternario // #define en lenguaje C
Programación C/C++
|
NOB2014
|
2
|
2,136
|
29 Diciembre 2016, 14:21 pm
por NOB2014
|
|