Operación módulo

A estas alturas todos deberíamos saber bastante bien para que sirve la operación módulo( osea, %), pero como mis dos siguientes post trataran con esta operación de manera activa, vamos a explicar  un gran truco que nos ofrece y que a veces pasa por alto.

El uso principal que nos ofrece % es simplemente obtener el resto de una división.
Por ejemplo :
9 / 5 = 1 y 9 % 5 = 4
10/5 = 2 y 10 % 5 = 0

Si hacemos un pequeño for que nos muestre los módulos obtenemos:

for(int i = 0; i < 12; ++i)
       System.out.println(i + " tiene modulo " + i%5);

0 tiene modulo 0
1 tiene modulo 1
2 tiene modulo 2
3 tiene modulo 3
4 tiene modulo 4
5 tiene modulo 0
6 tiene modulo 1
7 tiene modulo 2
8 tiene modulo 3
9 tiene modulo 4
10 tiene modulo 0
11 tiene modulo 1
etc…

Por tanto x % 5 = 0..4

Y ¿Cómo podemos aplicar esto de otra manera? Si nos fijamos la operación % tiene una naturaleza circular y esto es muy útil en los arrays o listas circulares o para moverse por una variable de esta manera.

¿Cuántos de vosotros no habéis hecho esto?

int i = 0;

while(Condición){
   Operaciónes

   ++i; // Para evitar la sobre asignación.

   if( i == Límite)
        i = 0;
}

Con ese código nos queremos mover desde 0..Límite, por tanto podemos usar la operación módulo.

int i = 0;

while(Condición){
   Operaciónes
   i = (++i) % Límite;
}

Con lo que nos quitamos una condición y todo queda más compacto. Es muy importante que sea ++i y no i++, ya que la manera en la que estos funcionan es diferente(¡Y aquí es donde comprobamos su utilidad!).

¿Y con los arrays? Supongo que todos ya sabéis que es lo que va a pasar.
Modulo y arrays

Con lo cual es una manera sencilla y efectiva de recorrer un sistema circularmente sin pasarnos de la ralla por despiste.

Como dije antes, esta operación es realmente útil y tiene que tenerse en cuenta.Lo veremos más tarde en los ejemplos que desarrollaré.

Un saludo.

Anuncios

anotherdropboxfolder

Hola!

Hoy mientras limpiaba mi workspace, como cada fin de curso, de eclipse y netbeans he visto que tenía muchas cosas interesantes que merecian la pena ser compartidas.
La mayoria no tiene explicación alguna pero merecen la pena que les echeis un vistazo por si encontrais algo que os sea de utilidad.
Además, a partir de ahora este enlace será donde coloque todos los ejemplos que vaya haciendo en la página. Como suelo usar eclipse y netbeans a la vez lo que haré será especificar para que ide es el contenido poniendo ec ó nt para eclipse y netbeans respectivamente. Espero que así no os cause ninguna confusión.

Sin más el link: https://www.dropbox.com/sh/l75c4f3cxe2af30/tJF7Po-mWh

Dentro de poco haré un par de post más que tengo planeados! Uno con arrays circulares(estoy buscando algo para darle más chicha) y el cifrado de Vigenére.

Sin más un saludo.