Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Sentencia de iteración

Una sentencia de iteración consiste en ejecutar o realizar sentencias mientras se cumple una determinada condición.

En general :

MIENTRAS (condición) HACER
      sentencia(s)
FIN MIENTRAS
JAVA : Sentencia while 

   while (condición)
   {
      sentencia(s)
   }

Supongamos que queremos escribir en pantalla, la secuencia de números del 50 al 100. Una alternativa (ineficiente) sería plantear el siguiente algoritmo :

imprimir 1
imprimir 2
:
:
imprimir 99
imprimir 100

Obviamente este algoritmo aparte de ser ineficiente es largo de escribir. Usando una sentencia iterativa, podemos declarar una variable que inicializada en 50, podemos ir la incrementando en 1, mientras esa variable no pase de 100.

num = 50 
MIENTRAS(num < 101) HACER 
    imprimir(num) 
    num = num + 1 
FIN MIENTRAS 

public class impnum
{
    public static void main(String arg[ ])
    {
        int num = 50;  
        while(num <  101)
        {
            System.out.println(num);
            num = num + 1;    
        }     
    }    
} 

Bajar archivo


En cada iteración, se imprime la variable num y luego se incrementa en 1. Después de esto se evalúa la condición. Si se cumple que el valor actual de num es menor que 101, se entra de nuevo al ciclo, y se repiten las instrucciones.

Supongamos ahora, que sólo queremos imprimir los números pares que existen del 50 al 100. Hay dos alternativas visibles. Una es comprobar en cada iteración si la variable es par mediante la pregunta :

SI (RESTO(num/2) == 0)

y la otra alternativa es incrementar en cada iteración la variable num en 2.

 
Alternativa 1) 

num = 50 
MIENTRAS(num < 101) HACER 
   SI ( RESTO(num / 2) == 0) ENTONCES 
       imprimir(num) 
   FIN SI 
   num = num + 1 
FIN MIENTRAS 
class pares
{
    public static void main(String arg[ ])
    {
        int num = 50;  
        while (num < 101)
        {
            if (num % 2 == 0)
            {
                System.out.println(num);
            }
            
            num = num + 1;    
        }     
    }    
} 

Bajar archivo


Alternativa 2) 

num = 50 
MIENTRAS(num < 101) HACER 
   imprimir(num) 
   num = num + 2 
FIN MIENTRAS 

Ejercicios :

a ) Escribir el algoritmo que imprima todos los números impares, del 1 al 100
b ) Escribir el algoritmo que imprima todos los múltiplos de 17, del 17 al 3000

Otros problemas típicos que se resuelven con estos ciclos iterativos, son los que involucran sumatorias y contadores.
Por ejemplo queremos hacer una sumatoria desde 1 hasta una valor ingresado por el usuario.
Digamos que el valor ingresado por el usuario es 3.
Por lo tanto en definitiva se quiere que se hagan iterativamente las siguientes instrucciones :

num = 3
sum = 0
sum = sum + 1 --> sum = 0 + 1 --> sum = 1
sum = sum + 2 --> sum = 1 + 2 --> sum = 3
sum = sum + 3 --> sum = 3 + 3 --> sum = 6

Podemos observar que en general se está aplicando la fórmula :

sum = sum + i

donde i toma los valores 1,2,3 , o sea se va incrementando mientras i sea menor o igual a 3.

Si extendemos este ejemplo a un valor cualquiera para num, y aplicamos una sentencia iterativa tenemos lo siguiente :

Leer num 
i =1 
sum =  0  
MIENTRAS ( i < = num ) HACER
    sum = sum + i 
    i = i + 1 
FIN MIENTRAS

Digamos ahora, que queremos hacer la sumatoria de 1 hasta num, de sólo los múltiplos de 3.
La única modificación al algoritmo anterior, sería que la variable sum se incrementara, sólo si se cumple la condición antes descrita.

Ej :

Leer num
i = 1    
sum = 0  
MIENTRAS ( i <= num ) HACER 
   SI (RESTO (i /3) ==  0) ENTONCES
       sum = sum + i 
   FIN SI    
   i = i + 1 
FIN MIENTRAS 
import java.io.*;
class prbwhile2 
{
    public static void main(String Arg[ ]) throws IOException
    {
        int i = 1;
        int sum = 0;
        int num;
         
        BufferedReader in = new BufferedReader(new 
            InputStreamReader(System.in));

        System.out.print("Ingrese numero : ");
        num = Integer.parseInt(in.readLine( ));
        
        while (i <= num)
        {
            if (i % 3 == 0)
            {
                sum += i;
            }
            i++;
        }
           
           System.out.println("sumatoria : " + sum );
    }
} 
Bajar archivo

Salida a pantalla

Para una entrada 12 se tiene : 3 + 6 + 9 + 12 = 30



Supongamos ahora, que sólo queremos contar cuántos números múltiplos de 3 hay de 1 hasta num.
Para eso, se elimina todo lo que sea sumar y se reemplaza por una variable contador.

En definitiva, si se cumple la condición de múltiplo de 3, la variable contador se incrementará en 1.

Leer num
i =  1     
contador = 0  
MIENTRAS( i < = num ) HACER   
    SI (RESTO (i / 3) = 0) ENTONCES	
        contador = contador + 1     
    FIN SI
    i = i + 1    
FIN MIENTRAS

Ejercicio : Basándose en el programa anterior , pasar este algoritmo a Java.


Ejemplo

El siguiente programa consiste en ir calculando la media, a medida que se van incorporando datos.

El algoritmo es el siguiente 

media = 0
n = 0
leer(elementos)
MIENTRAS (n < elementos) HACER
    leer(num)
    media = (media * n + num) / (n + 1)    
    imprimir(media)
    n = n + 1
FIN MIENTRAS


Código fuente

import java.io.*;
class prbwhile3 
{
    public static void main(String Arg[ ]) throws IOException
    {
        double media = 0.0;
        int n = 0;
        int elementos; 
        double num;
         
        BufferedReader in = new BufferedReader(new 
            InputStreamReader(System.in));

        System.out.print("Ingrese numero de elementos a ingresar : ");
        elementos = Integer.parseInt(in.readLine( ));

        while (n < elementos)
        {
            System.out.print("\nIngrese numero : ");
            num = Double.parseDouble(in.readLine( ));
               
            media = (media * n + num) / (double) (n + 1);
            
            /* Redondea a dos decimales */
            
            media = Math.round(media * 100.0) / 100.0;
           
            System.out.println("media actual : " + media);
            
            n++;
        }
       
        System.out.println("\nMedia final : " + media );
    }
} 

Bajar archivo

Salida a pantalla