El set de instrucciones de
cada lenguaje de programación puede llegar a ser tan amplio que no
llegamos a aprenderlo todo y mucho menos saber en qué casos podemos
sacar ventaja de utilizar una instrucción determinada.
En este post quiero
hablar de la instrucción de Residuo,
conocida como % en C, C++, php,
java o MOD en COBOL, PLSQL,
Pascal.
Recordando un poco de
matemáticas, sabemos que:
Dividendo = Cociente *
Divisor + Residuo
Ejm. 7 = 3 * 2 + 1
Si despejamos el residuo
sería:
Residuo = Dividendo -
(Cociente * Divisor)
La operación Residuo se
calcula utilizando el Dividendo y el cociente o el dividendo y el
divisor. La sintaxis sería:
Residuo = Dividendo %
Cociente (1 = 7 % 3)
Residuo = Dividendo %
Divisor (1 = 7 % 2)
¿En qué casos podemos
utilizar esta operación?
Sólo os daré dos casos típicos:
Realizar
una acción cuando un número es múltiplo de otro
Imprimir
los 30 primeros múltiplos de 3
int
numerosImpresos = 0 //controla el número de números impresos
int
contador = 1; //Es el número que hace de Dividendo en la operación
while(numerosImpresos
< 30)
{
if (contador % 3 == 0) //si el residuo es 0, es una división exacta por tanto es múltiplo
{
Console.write(contador);
}
contador ++;
}
Realizar
un cambio de base
Cambiar
el número 5 de base decimal a binario.
Como
se cambia a sistema binario de utiliza el divisor = 2 (Base N,
implica divisor N)
int
dividendo = 5;
int
divisor = 2;
string
cambioBase = “”;
while(dividendo
/ divisor >1)
{
residuo = dividendo % divisor;
dividendo = dividendo / divisor;
cambioBase = residuo + cambioBase; //se va concatenando a la izquierda
}
cambioBase
= dividendo + cambioBase; //en esta variable está el resultado "101"
¿Se os ocurre otro ejemplo?
Gracias por el artículo, esta bueno.
ResponderEliminarQuisiera agregar que hay una interesante discusión acerca de cómo debe trabar este operador con los valores negativos, ya que el resultado varia desacuerdo a como se defina el residuo para los números negativos. Por ejemplo si abres la calculadora científica de Windows y calculas -360 MOD 60 este retorna -40 pero si realizas la misma operación en Excel mod(-340,60) este retorna 20
Encontraras la misma diferencia en Java y Python, y te preguntaras cual el correcto resultado, y la respuesta para variar es “depende”, depende de cómo definas el residuo.
Si se define el residuo como la cantidad por el cual el número excede el mayor entero múltiplo del divisor que no es mayor que el número y aplicamos esto a nuestro caso tendremos:
-340 está entre -360 y -300 por lo cual -360 es el mayor múltiplo menor a -340 entonces tendremos que substraer -360 de -340 y esto retorna 20
Si aplicas la misma definición para los números positivos tendremos:
340 está entre 300 y 360 por lo cual -300 es el mayor múltiplo menor a 340 entonces tendremos que substraer 300 de 340 y esto retorna 40
Interesante verdad?
R
Hola!!
ResponderEliminarSi que es cierto que el tratamiento con números negativos varía. El objetivo del post se basa en la división euclidea de números naturales, cuando empiezas a tratar con negativos, depende del principio en que te bases la respuesta será una u otra o varias.
Dejo un enlace para revisar el teorema de euclídes para números enteros, con este se puede cubrir algunos de los casos que comentas, sin embargo hice la prueba en C y no lo cumple.
https://es.wikipedia.org/wiki/Divisi%C3%B3n_eucl%C3%ADdea
En conclusión, como un objetivo académico puro y duro lo dejaría en el universo de los números naturales y para los que quieren ir más allá como tu, buscar teoremas para el cálculo del residuo y contrastarlo con el lenguaje que estén utilizando.
Gracias por el comentario :)