Como funciona el mod(%) en c#

Iniciado por EladioJr99, 8 Septiembre 2017, 19:49 PM

0 Miembros y 1 Visitante están viendo este tema.

EladioJr99

Hola, estoy empezando la carrera de programación y estoy muy verde en esto.
Yo me imagine que era como una división, es decir yo lo que hacia era dividir, por ejemplo 1984 / 400 y da 4.96, pero luego le puse en google 1984 % 400 y me dio 384, no entiendo porque yo pensaba que tomaba los decimales, pero no es así.
Se los agradecería mucho, perdon si es una pregunta muy tonta o facil pero soy nuevo en esto de programacion

Shell Root

Es que una cosa es la división (/) que el operador (%), que es el qué calcula el resto después de dividir el primer operando por el segundo.

   +: representa la suma de dos o más valores o variables.
   -: representa la resta de dos o más valores o variables.
   *: representa la multiplicación de dos o más valores o variables.
   /: representa la división de dos o más valores o variables.
   %: representa el modulo (obtención del residuo de una división) de dos o más valores o variables.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

EladioJr99

Ya entendí, estuve leyendo un poco acerca y bueno, solo para aclarar, si (n % 2 != 0) significa que el número no es par verdad o como en el ejemplo que me sale 384, se podria decir que no es multiplo cierto?

Eleкtro

#3
Hola.

Primero de todo: las preguntas sobre C# van en el subforo de programación .NET Framework.

Todo lo que necesitas saber y aprender está en la MSDN...
...deberías revisarla en el futuro para aclararte tus dudas.




Cita de: EladioJr99 en  9 Septiembre 2017, 03:31 AMsi (n % 2 != 0) significa que el número no es par verdad

Efectivamente. El operador de módulo devolverá el resto después de dividir 'n' por '2', que siempre será Cero si 'n' es divisible por '2', o dicho de otra forma: 0 si 'n' es par.

Saludos.








Serapis

#4
La operación módulo, se utiliza muy a menudo para saber la congruencia de dos números.

Un ejemplo:
Imagina un señor que tiene un huerto y quiere plantar naranjos, ha comprado 67 y quiere plantar 13 por línea... ¿tendrá líneas completas?.

si (67 módulo 13) = 0 luego
   mensaje = "si líneas completas."
sino
   mensaje "la última línea tiene sólo " + (67 modulo 13) + " árboles..."
fin si


Otro ejemplo:
El señor tras plantar los naranjos, quiere ahora plantar limoneros, harto de tener solo dos árboles en una línea, decide comprar sólo los que necesite parta tener líneas completas.
...pero no lo tiene fácil, porque la tienda le vende limoneros sólo de 5 o 5, ¿cuántos (árboles) tendrá que comprar ahora  (como mínimo), para tener líneas completas?

- Solución: Dado que tiene 13 por línea y solo 2 en la última, necesita comprar (13-2) + 'x' lineas de 13, tal que la suma de ellos sea múiltiplo de 5.

n=0  //n empieza valiendo 0 por si fuera el caso que naranjos den líneas completas, pero si a pesar de ello
//    se quisiera comprar si o sí limoneros, debería empezar valiendo 5.
Hacer mientras ((n - (13-2)) modulo 13) distinto de 0   //en vez de (13-2), lo razonable sería poner ((13 - (naranjos modulo 13)
  n +=5
repetir


y finalmente confirmamos que sea cierto:

//67 era el número previo, 13 siguen siendo los árboles en cada línea
// es decir naranjos + limoneros hacen líneas completas?
Si ((67 + n) módulo 13) = 0 luego
   mensaje = "si líneas completas."
sino
   mensaje "pués no..."
fin si


El resultado final es que deberá comprar 50 limoneros... así tendrá 9 líneas de 13 árboles.

Finalmenter la congrencia consiste en que dos números tengan el mismo resto dados un divisor común.
Por ejemplo:
buleano = funcion  Congruencia(valor1, valor2, divisor)
  devolver ((valor1 modulo divisor) = (valor2 modulo divisor))
Fin funcion


Un ejemplo el día 122 del año es el mismo día que el 257 del año?
Mensaje = Congruencia(122, 257, 7) //porque 7 días tiene la semana,
//     no importa que día sea en concreto, cada 7 días coincidirán.. esto es, el día 1º del año, será el mismo que el 8º, el 15º, el 22º, etc...


Y si no lo es, cuál sería el siguiente dia congruente con el 122º?...
n = 0
Hacer mientras Congruencia(122, 257 + n, 7) = FALSE
       n += 1
Repetir
Mensaje (257 + n)


Puede ser optimizado para no requerir un bucle, te lo dejo como tarea...


EladioJr99

Muchas gracias a todos, me quedo muy claro