[C con Clase] dudas con programa
Steven Davidson
srd4121 en njit.edu
Mar Ene 26 17:47:23 CET 2010
Hola Pablo,
Pablo Coletto wrote:
>
[CORTE]
> // Función que devuelve verdadero si el parámetro 'n' en
> // múltiplo de tres y falso si no lo es
> bool MultiploDeTres(int n)
> {
> if(n % 3) return false; else return true;
> }
>
> Pido ayuda para entender la funcion, recien empiezo el curso y tengo
> mis dudas sobre como funciona el codigo del programa, gracias!
Supongo que la expresión condicional (en el 'if') es la que te
"molesta". Recuerda que un resultado de 0 (cero) en una condición
implica falsedad y por tanto la condición es falsa; cualquier otro
entero implica una condición verdadera. También podemos usar valores
booleano - 'true' y 'false' - para indicar veracidad y falsedad,
respectivamente, en una condición.
Volviendo a este código, la expresión: n % 3 realmente implica lo siguiente:
if( n % 3 != 0 )
return false;
else
return true;
En español esto quiere decir que si el resto de la división entre 'n' y
3 no es 0 (cero), entonces retornamos el valor booleano 'false'. Esto es
porque el valor guardado en 'n' no es divisible entre 3, según la
definición en matemáticas.
También podríamos expresar la condición de otra manera, por ejemplo,
if( !(n % 3) )
Nuevamente, estamos manipulando el resultado de 'n % 3'. Si esta
operación aritmética es 0 (cero), entonces !0 implica que "no es falso"
y por tanto es verdadero. Al ser la condición verdadera, ejecutamos la
sentencia: return false; de lo contrario, ejecutamos: return true.
Otra posibilidad es analizar el comportamiento de lo que queremos y así
podemos implementarlo. Analizando, vemos que tenemos la siguiente tabla:
n % 3 | return
--------+----------
0 | true
1 | false
2 | false
Como hemos dicho antes, 0 implica falsedad y !0, veracidad. La tabla
quedaría así:
n % 3 | return
--------+----------
0 | true
!0 | false
Podemos implementar la función de esta manera:
bool MultiploDeTres( int n )
{
return !(n % 3);
}
O incluso,
bool MultiploDeTres( int n )
{
return n % 3 != 0;
}
Espero haber aclarado la duda.
Steven
Más información sobre la lista de distribución Cconclase