Algoritmos
Categoría: Programación
Publicado el Miércoles, 03 Octubre 2007 01:00
Saber si un número entero dado es par o impar dentro de un programa es algo sencillo.... cuando te lo cuentan :-)
En éste artículo proponemos varias formas de lograrlo, intentando descubrir los pros y los contras de cada uno.Este es un ejercicio típico de cualquier asignatura o curso de programación en sus primeros días, para intentar despabilar un poco las neuronas. Las posibles formas de solucionarlo son muy variadas. Vamos a ver sólo unas pocas de ellas, empezando con la más sensata para la mayor parte de las situaciones, y también veremos algunas menos sensatas y otras realmente descabelladas.
1) Con aritméticamodular, o utilizando el resto de una división entera
Ésta es, en general, la solución más sensata.
La operación denominada "módulo" está instrumentada en prácticamente todos los lenguajes de programación. Hace referencia al resto de la división entera entre dos números.
Es decir, si cogemos dos números enteros, como por ejemplo el 79 y el 14 y dividimos 79 entre 14 utilizando la divisiónentera (sin decimales), el cociente que obtenemos es 5, y el resto (o módulo) es 9.
En muchos lenguajes de programación, se utiliza el operador binario infijo mod para obtener el módulo de una division (Como Pascal, Modula, Delphi...). Otros muchos lenguajes (C, C++, C#, Java, PHP...) utilizan otro operador binario infijo: "%". Es posible que otros lenguajes utilicen un método o función o bien otrooperador.
El caso es que si nos damos cuenta, cualquier número par tiene una característica: si lo dividimos por dos, el resto de la operación es 0. Análogamente, si un número impar lo dividimos por dos siempre devuelve 1 como resto.
¡¡¡Ya lo tenemos!!! Dado un número n, si el resto de dividir n entre 2 es 0, resulta que n es par, y en caso contrario es impar.
Hala, ya podemos construir unmétodo o función bien sencillo. Como de momento todos los ejemplos de este sitio están en C#, vamos a proponer un método en éste lenguaje llamado "EsPar", al cual le pasemos un entero y nos devuelva un booleano con un valor true si el entero es par y false en caso contrario, basándonos en la operación módulo.
-------------------------------------------------1-------------------------------------------------
2-------------------------------------------------
3-------------------------------------------------
4 | -------------------------------------------------
static bool EsPar(int n)-------------------------------------------------
{-------------------------------------------------return ((n % 2) == 0); -------------------------------------------------
} |
El operador módulo sirve para muchísimas más cosas. De hecho, el matemático Carl Friedrich Gauss presentó formalmente la aritmética modular, basada en el resto de las divisiones que abrió un apasionante campo dentro de la teoría de números y por extensión, de la matemática discreta.Por supuesto, todo ello ha tenido aplicación en el campo de la computación, extendiéndose a materias tan diversas como encriptación, compresión, gráficos, algoritmia, etc, mucho más allá de saber si un número es par o impar.
2) Con la operación AND a nivel de bits, o de como hacer suposiciones arriesgadas
Sabemos que los números enteros son, en general, representados por los computadoresutilizando numeraciones binarias, bien con la técnica denominada signo y magnitud, o mucho más frecuentemente en complemento a 2.
En ambos casos, la representación binaria de cualquier entero cumple que en su bit menos significativo (LSB - Least significative bit) hay un valor "1" si el número es impar, y un valor "0" si el número es par. Eso se deriva de la propia naturaleza de la numeración...
Regístrate para leer el documento completo.