Programación en Java/Estructuras de iteración

De Wikilibros, la colección de libros de texto de contenido libre.
← Operador if-else Estructuras de iteración Sentencia while →


Supongamos que nos piden que realicemos un dibujo sencillo que se despliegue por pantalla. El objetivo es mostrar un cuadrado de 5 filas por 5 columnas trazado con cualquier carácter. Con los elementos de programación que ya conocemos, realizamos un programa que cumpla con este requisito.

public class Cuadrado{
   public static void main(String args[]){
        System.out.println("*****");
        System.out.println("*****");
        System.out.println("*****");
        System.out.println("*****");
        System.out.println("*****");
   }
}

Básicamente este programa cumple con el objetivo. Pero... ¿No notan que algo anda mal? Se repitió cinco veces una instrucción. ¿Qué ocurriría sin nos solicitaran una figura más grande? Tendríamos que agregar más líneas de código. Y si en vez de una figura , se les ocurría pedirnos que listáramos una lista de números del uno al millón, el código sería inmenso. También imagínense lo que tardaríamos en escribirlo.

Sin embargo tenemos un recurso para acudir en cuanto surjan estos problemas. Son las estructuras de iteración. Una iteración consiste en una repetición de un bloque de sentencias un número determinando de veces o hasta que se cumpla una condición.

De esta forma el código puede simplificarse notablemente. Antes de entrar en los detalles de la implementación con Java, veremos como podemos realizar algunas rutinas en pseudocódigo:

Repetir 5 veces : 
Imprimir ("*****");

Le pasamos al intérprete la tarea de reiterar una acción. Nosotros solamente escribimos una vez lo que hay que hacer.

Siguiendo con una segunda aproximación, podríamos agregarle un registro que cuente el número de iteraciones. Además adicionamos una condición para que indicar que el registro no debe pasar de cierto número. De esta manera, el pseudocódigo quedará así:

N = 1;  
Mientras que N <= 5
 Imprimir ("*****");
 N = N + 1;

Lo que hicimos fue inicializar el contador, agregar una condición de corte, indicar que sentencia se debe repetir y finalmente incrementamos el contador. La condición es una expresión lógica que debe tener un valor de verdadero o falso. En la ejecución, cada vez que termina la última sentencia vuelve a evaluar la condición, si se cumple sigue la iteración, de lo contrario termina.

Esta es una estructura de iteración útil para los casos en donde sabemos a priori cuantas repeticiones se deben ejecutar. Con pocos retoques se pueden realizar iteraciones desconociendo el número de ciclos.

Realicemos un programa que transforme un número decimal en binario. En la vida real, para hacer esto, realizamos sucesivas divisiones por 2 al número decimal. A cada división tomamos el resto y continuamos hasta que el resultado sea cero.

Por ejemplo: Tenemos que pasar el número 25 a binario

 25 mod 2 = 1;  25 div 2 = 12;
 12 mod 2 = 0;  12 div 2 =  6;
  6 mod 2 = 0;   6 div 2 =  3;
  3 mod 2 = 1;   3  div 2 = 1;
  1 mod 2 = 1;   1  div 2 = 0; 


(NOTA: en java actualmente se usa el signo "%" para hacer el mod)

 El resultado es 11001

En general, no sabemos cuantas divisiones tendremos que realizar. Pero si sabemos que debemos llegar a cero con la división. Las tareas que repetimos son las de tomar el resto y el resultado de la división. Con estos datos en mente, podremos realizar un algoritmo.

 DECIMAL = 25;
 Mientras que DECIMAL > 0 :
     BINARIO = DECIMAL % 2 + BINARIO;
     DECIMAL = DECIMAL / 2;