|
|||||||
|
|
|
|||||
|
|
|||||||
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