[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