visual una residuo programacion operadores operador net hacer funcion example div como aritmeticos operators modulo

operators - una - Reconociendo cuándo usar el operador de módulo



residuo de division en visual basic (18)

Cálculo de números primos

Sé que el operador de modulus (%) calcula el resto de una división. ¿Cómo puedo identificar una situación en la que necesitaría usar el operador de módulo?

Sé que puedo usar el operador de módulo para ver si un número es par o impar, primo o compuesto, pero eso es todo. No suelo pensar en términos de restos. Estoy seguro de que el operador de módulo es útil, y me gustaría aprender a aprovecharlo.

Solo tengo problemas para identificar dónde es aplicable el operador de módulo. En varias situaciones de programación, es difícil para mí ver un problema y darme cuenta de que "¡Hey! ¡El resto de la división funcionaría aquí!".


Como dice @jweyrich, envolviendo valores. He encontrado el mod muy útil cuando tengo una lista finita y quiero recorrerla en un bucle, como una lista fija de colores para algunos elementos de la interfaz de usuario, como series de gráficos, donde quiero que todas las series sean diferentes, para la medida de lo posible, pero cuando me haya quedado sin colores, solo para volver a empezar desde el principio. Esto también se puede usar con, digamos, patrones, de modo que la segunda vez que aparece el rojo, se salte; la tercera vez, punteada, etc. - pero mod solo se usa para obtener rojo, verde, azul, rojo, verde, azul, para siempre.


Conversión de estructura de datos lineal a estructura de matriz: donde a es el índice de datos lineales y b es el número de elementos por fila:

row = a/b column = a mod b

La nota anterior es lógica simplificada: a debe compensarse -1 antes de dividir y el resultado debe normalizarse +1.

Ejemplo: (3 filas de 4)

1 2 3 4 5 6 7 8 9 10 11 12 (7 - 1)/4 + 1 = 2 7 is in row 2 (7 - 1) mod 4 + 1 = 3 7 is in column 3

Otro uso común del módulo: hashing un número por lugar. Supongamos que desea almacenar el año y el mes en un número de seis dígitos 195810. month = 195810 mod 100 todos los dígitos del 3er a la derecha son divisibles por 100, por lo que el resto son los 2 dígitos más a la derecha. 195810 / 100 rendimientos 1958.


Ejemplo. Tiene un mensaje de X bytes, pero en su protocolo el tamaño máximo es Y e Y <X. Intente escribir una aplicación pequeña que divida el mensaje en paquetes y se ejecutará en mod :)


El módulo puede ser útil para convertir y dividir el total de minutos a "horas y minutos":

horas = minutos / 60

minutes_left = minutes% 60

En el bit de horas necesitamos eliminar la parte decimal y eso dependerá del idioma que estés usando.

Entonces podemos reorganizar la salida en consecuencia.


El módulo también es muy útil si, por alguna extraña razón, necesita hacer una división de enteros y obtener un decimal, y no puede convertir el entero en un número que admita la división de decimales, o si necesita devolver una fracción en lugar de un decimal .

Estaré usando % como el operador de módulo

Por ejemplo

2/4 = 0

donde hacer esto

2/4 = 0 and 2 % 4 = 2

Así que puedes estar realmente loco y digamos que quieres permitir que el usuario ingrese un numerador y un divisor, y luego mostrarles el resultado como un número entero, y luego un número fraccionario.

whole Number = numerator/divisor fractionNumerator = numerator % divisor fractionDenominator = divisor

Otro caso en el que la división de módulos es útil es si está aumentando o disminuyendo un número y desea contener el número a un cierto rango de números, pero cuando llega a la parte superior o inferior no quiere simplemente detenerse. Desea realizar un bucle hasta el final o la parte superior de la lista, respectivamente.

Imagina una función en la que estás atravesando una matriz.

Function increase Or Decrease(variable As Integer) As Void n = (n + variable) % (listString.maxIndex + 1) Print listString[n] End Function

La razón por la que es n = (n + variable)% (listString.maxIndex + 1) es para permitir que se contabilice el índice máximo.

Esas son solo algunas de las cosas para las que he tenido que usar el módulo en mi programación no solo de aplicaciones de escritorio, sino también en entornos de simulación y robótica.


El mejor uso del operador de módulo que he visto es para verificar si la matriz que tenemos es una versión rotada de la matriz original.

A = [1,2,3,4,5,6] B = [5,6,1,2,3,4]

Ahora, ¿cómo comprobar si B es la versión rotada de A?

Paso 1: Si la longitud de A no es la misma que la de B, entonces seguramente no es una versión rotada.

Paso 2: compruebe el índice del primer elemento de A en B. Aquí el primer elemento de A es 1. Y su índice en B es 2 (suponiendo que su lenguaje de programación tiene un índice basado en cero). permite almacenar ese índice en la variable " Clave "

Paso 3: Ahora, ¿cómo comprobar que si B es la versión rotada de A, cómo?

Aquí es donde la función de módulo oscila:

for (int i = 0; i< A.length; i++) { // here modulus function would check the proper order. Key here is 2 which we recieved from Step 2 int j = [Key+i]%A.length; if (A[i] != B[j]) { return false; } } return true;


En cualquier momento en que tenga división y desee expresar el resto que no sea decimal, el operador de mod es apropiado. Las cosas que vienen a la mente son generalmente cuando se quiere hacer algo legible para el ser humano con el resto. Enumerar cuántos elementos se podrían poner en los cubos y decir "5 sobras" es bueno.

Además, si alguna vez se encuentra en una situación en la que puede estar acumulando errores de redondeo, la división de módulo es buena. Si divides por 3 con bastante frecuencia, por ejemplo, no querrás pasar el .33333 como el resto. Pasar el resto y el divisor (es decir, la fracción) es apropiado.


Es una forma fácil de saber si un número es par o impar. Simplemente haga # mod 2, si es 0 es par, 1 es impar.


Hay muchos casos en los que es útil.

Si necesita restringir un número para que esté dentro de un cierto rango, puede usar mod. Por ejemplo, para generar un número aleatorio entre 0 y 99 puede decir:

num = MyRandFunction() % 100;


Imagina que tienes un tiempo transcurrido en segundos y quieres convertirlo en horas, minutos y segundos:

h = s / 3600; m = (s / 60) % 60; s = s % 60;


Lo he usado al restringir un número a un cierto múltiplo:

temp = x - (x % 10); //Restrict x to being a multiple of 10


Lo uso para las barras de progreso y similares que marcan el progreso a través de un gran bucle. El progreso solo se informa cada enésima vez a través del bucle, o cuando el recuento% n == 0.


Mi uso favorito es para la iteración.

Digamos que tienes un contador que estás incrementando y luego deseas tomar de una lista conocida los elementos correspondientes, pero solo tienes n elementos para elegir y quieres repetir un ciclo.

var indexFromB = (counter-1)%n+1;

Resultados ( counter=indexFromB ) dados n=3 :

`1=1` `2=2` `3=3` `4=1` `5=2` `6=3` ...


Un caso de uso que vi recientemente fue cuando necesitas revertir un número. Así que 123456 convierte en 654321 por ejemplo.

int number = 123456; int reversed = 0; while ( number > 0 ) { # The modulus here retrieves the last digit in the specified number # In the first iteration of this loop it''s going to be 6, then 5, ... # We are multiplying reversed by 10 first, to move the number one decimal place to the left. # For example, if we are at the second iteration of this loop, # reversed gonna be 6, so 6 * 10 + 12345 % 10 => 60 + 5 reversed = reversed * 10 + number % 10; number = number / 10; }


0 % 3 = 0; 1 % 3 = 1; 2 % 3 = 2; 3 % 3 = 0;

¿Viste lo que hizo? En el último paso volvió a cero. Esto podría ser usado en situaciones como:

  1. Para verificar si N es divisible por M (por ejemplo, par o impar) o N es un múltiplo de M.

  2. Para poner un tope de un valor particular. En este caso 3.

  3. Para obtener los últimos M dígitos de un número -> N% (10 ^ M).

  • Cálculo del mayor divisor común.
  • Determinar si un número es un palíndromo
  • Determinar si un número consiste solo en ...
  • Determinando cuántos ... un número consiste en ...

  • Envolviendo valores (como un reloj).
  • Proporcionar campos finitos a algoritmos de clave simétrica.
  • Operaciones bitwise.

Y así.