[C con Clase] Preguntas acerca de el tema 6 de C++
Steven Davidson
srd4121 en njit.edu
Sab Oct 22 21:30:14 CEST 2011
Hola StormDead,
2011/10/22 StormDead <support en wowstormdead.com>:
> Hola, primero muchas gracias por este curso de c++.
>
De nada; para esto estamos.
> Recién empiezo y tengo varias preguntas acerca de los ejemplos de
> http://c.conclase.net/curso/index.php?cap=006p#resueltos1_6
>
Veamos la duda.
> En el 5º problema entiendo todo lo que haces pero esto no:
>
> while(numero >= factor*factor) {
> if(!(numero % factor)) {
> cout << factor << " * ";
> numero = numero / factor;
> continue;
>
> Eso que esta subrayado, para que lo hace? No lo entiendo
>
Viendo que la sentencia es 'if', lo que hay entre paréntesis es una
expresión que será evaluada como una condición: verdadera (true) o
falsa (false). La expresión se compone de dos operaciones (bueno, tres
si contamos los paréntesis). La primera operación es:
numero % factor
El operador % indica el módulo o resto de una división. Es decir,
'factor' divide 'numero' una cantidad entera de veces, y obtenemos una
cantidad restante: el resto. Esto implica que obtendremos un número
entero.
La segunda operación ! es la negación lógica (o booleana) que invierte
la veracidad de su operando; esto es, "!true" pasa a ser 'false' y
"!false" pasa a ser 'true'.
El problema es que estamos aplicando el operador ! a un número entero
y no a un valor booleano. Sin embargo, existe una asociación entre
números enteros y booleanos en el lenguaje C/C++. El cero implica
'false' y cualquier otro entero implica 'true'. Por lo tanto, si el
resto no es 0 (cero) entonces implica que no es falso, y por lo tanto,
significa que la condición es verdadera; a su vez, esto implica que
realizaremos las sentencias bajo 'if'. Por otro lado, si el resto es
cualquier entero diferente a 0 (cero), entonces se convierte a
verdadero (true) y al NO ser verdadera la condición, nos saltamos el
apartado de 'if'.
Esto lo explicamos en el capítulo 4:
http://c.conclase.net/curso/index.php?cap=004c#Op_logicasfrec
Espero que esto aclare la duda.
Steven
Más información sobre la lista de distribución Cconclase