Heyyyyyyyyyyyyyyy

Aprende a programar microcontroladores en C... http://tecdigitaldelbajio.com/software-tarjeta.html

jueves, 24 de septiembre de 2009

Estructuras de repetición: “Ciclo For”



Como su nombre lo indica estas estructuras permiten repetir una o varias instrucciones un número determinado de veces. Existen varios tipos de estructuras de repetición en java:

• Ciclo For
• Ciclo Whie
• Ciclo do-while

Vamos a analizar una por una, hoy se inicia con el ciclo For.

Ciclo For

Un ejemplo vale más que mil palabras, en la imagen siguiente se muestra la sintaxis del ciclo for. El ciclo for de la imagen se diseño para repetir las instrucciones que van en su cuerpo 10 veces.




Veamos como se construye, se usa la palabra reservada

for

Entre paréntesis va la llamada variable de control, esta es la que lleva la cuenta de las repeticiones, se acostumbre llamar a la variable i. La variable de control se debe inicializar en algún valor, se acostumbra el 0, por eso lleva el valor de:

i=0

Aunque puede ser cualquier valor, inclusive números negativos, lo que se requiere para la aplicación. Después sigue el  ; seguido de la condición de finalización del ciclo, que en este caso es:

i <= 10 

La condición de finalización me permite terminar el número de repeticiones, en el ejemplo el ciclo se va a repetir "desde i= 0 hasta que i sea menor que 10", al terminar las 10 repeticiones se continua con el flujo de programa.

Después de la condición de finalización sigue un  ;  para finalmente terminar, con el incremento de la variable de control, de la siguiente forma


i++

Ya se había visto el operador de incremento ++, le suma 1 a la variable i.

A continuación se muestra una animación del ciclo for que está definido en la imagen anterior. Simplemente dar clic en el botón de inicio. La animación muestra la ejecución del ciclo for como si se ejecutará paso a paso el programa usando el debugger. Ahí también se ven los valores que va tomando la variable i, se agrego también un stringItem en el cuerpo del for que también muestra el valor de la variable i.





>


Note como el ciclo se hace 10 veces inicia la i en 0 y termina en 10, solo que al llegar la i a 10 ya no se ejecuta el cuerpo del for, por eso es que la i llega a 10 mientras que el StingItem solo muestra hasta 9.

Se muestra a continuación una serie de ejemplos que se resuelven usando el ciclo for, esto para que el lector vea algunos ejemplos de la aplicación del ciclo. En los ejemplos solo se muestra el segmento de código para el ciclo, dejamos pendiente lo de la interfaz de usuario.

Problema #1

Realizar el segmento de código en Java que sume los primeros 50 números positivos, mostrar el resultado en un stringItem.

Solución.

Un ciclo for que vaya de 0 a 50, puede resolver este problema, la sintaxis es así:

for (i=0; i <= 50; i++) {

}

Nótese que se uso el <= en la condición de terminación para que se incluya el 50. Ahora, para sumar los números, primero recordar que la variable i, toma los valores desde 0 hasta 50 (como se ve en la animación, la variable i, recorre desde el valor inicial hasta la condición de terminación), entonces basta con un enunciado como el siguiente para ir acumulando la suma de los 50 números:

suma = suma + i

Para mostrar el resultado de la suma, al finalizar las 50 repeticiones, se usa el stringItem, usando su método setText y agregando la variable suma, así:

stringItem.setText(“El resultado de sumar los números del 0 al 50 es de “ + suma);

Finalmente se muestra el segmento de código completo conm comentarios para la solución de este problema:

suma = 0; // se inicializa la variable suma en 0
for (i=0; i <= 50; i++) { //ciclo for de 0 a 50
   suma = suma  + i // se acumula la suma
}
stringItem.setText(“El resultado es de “ +  suma); // se muestra el resultado

Por supuesto que ahí no se ve la declaración de las variables, pero la i y la variable suma se deben declarar antes de ese código y deben declararse de tipo int, por cierto el resultado final es de 1275, por si algún lector desea intentar hacer el ejemplo completo en el NetBeans.

Para que el lector tenga confianza al código y sobre todo a la sentencia que acumula la suma se muestra en la siguiente tabla los valores de las variables involucradas para 5 repeticiones (o más comúnmente se les llama iteraciones).

           Suma     I    Suma = suma + i
             0      0          0
             0      1          1
             1      2          3
             3      3          6
             6      4         10
            10      5         15
 
Ejemplo #2

Escriba un segmento de código en java para calcular los valores de la llamada serie armónica que se define como sigue:

X = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 +1/7 + … 1/N

El programa debe pedir que se ingrese el valor de N paraposterormente realizar el cálculo respectivo de la serie y mostrará el resultado final en un stringItem.

Solución

Se supone que la interfaz de usuario contiene un objeto TextField para ingresar el valor deseado de N, así que otra vez por enésima ocasión se repite el código para capturarlo y convertirlo a entero.


strN = textField.getText();

N = Integer.ParseInt(strN);


Las variables strN debe declarase String y N de tipo int, así el valor que ingresa el usuario para N se debe usar como terminación del ciclo, entonces la definición del ciclo queda así:

for (i=1; i <= N; i++) {
   
}

Note como se inicializa la variable en 1, contrario a los ejemplos de párrafos anteriores ¿Por qué?

Ahora vea la serie del enunciado del problema, vea la fracción siempre hay un 1 arriba en el numerador y abajo en el denominador parece que toma los valores de la variable i, puesto que se observa el denominador así 1, 2, 3, 4, 5, 6, etc… entonces como el ejemplo anterior basta con acumular la suma usando la sentencia siguiente:
Suma = suma + 1/i;
Por cierto, la serie inicia con un 1 por eso se inicializa la variable de control así con 1 (i=1).
El segmento de código completo para solucionar este problema quedaría así:

//**** Ciclo para la solución de la serie armónica ****
strN = textField.getText();
N = Integer.ParseInt(strN);
Suma = 0;
for (i=1; i <= N; i++) {
suma = suma + 1/i
}
stringItem.setText(“El resultado de calcular los valores de la serie es “ + suma);

En este caso la variable suma, hay que declararla de tipo float, por que va almacenar decimales ya que se hace una división (1/i), por cierto, la división 1/i, Java la detecta como una división de enteros y da como resultado un entero, con lo que la parte decimal se desaparece, lo que se hace es forzar la división a tipo float para que me de el resultado correcto, basta con agregar el operador (float) entonces esa sentencia queda asi:


suma = suma + (float) 1/i

Ejemplo #3

Realizar un segmento de código en java para calcular el factorial de un número introducido por el usuario.

Solución


Bueno el clásico programa que calcula el factorial no podía faltar en este blog y más si se está mostrando en el post el ciclo for. Bueno, el factorial de un número es simplemente la multiplicación de los números que van de 1 a dicho número, en matemáticas se dice que la definición de factorial es la siguiente:

n! = 1 * 2 * 3 * 4 * 5 * 6… * N

Bueno hay un caso especial que no cumple esta regla, que es el 0! (factorial de 0) el resultado es 1 por cierto. La interfaz de usuario es igual que el anterior un TextField para capturar el valor de N y un StringItem para mostrar el resultado. Así que la definición del ciclo queda de la siguiente forma:

for (i=1; i <= N; i++) {


 }


Para realizar el factorial basta con ir acumulando pero multiplicaciones, ya se sabe que la variable i toma los valores de 1, 2, 3, 4… así que la sentencia puede quedar así:


Mult = mult * i;

El segmento completo para el factorial queda entonces así:


strN = textField.getText();
N = Integer.ParseInt(strN);
mult = 1; 
for (i=1; i <= N; i++) {
   mult = mult  * i
}
stringItem.setText(“El resultado del factorial es es “ +  factorial);

Vea como la variable que acumula los valores (mult) se inicializa en 1, como son multiplicaciones acumuladas es imposible inicializar en 0 por que entonces todo seria 0 siempre, además recuerde el factorial de 0 es 1, por cierto agregando un if al código anterior se puede determinar el caso especial que es cuando se ingresa un 0, entonces el código completo queda así:

strN = textField.getText();
N = Integer.ParseInt(strN);
If (N == 0) 
    stringItem.setText(“El resultado del factorial es 1”);
else {
    mult = 1; 
    for (i=1; i <= N; i++) {
        mult = mult  * i
     }
   stringItem.setText(“El resultado del factorial es “ +  factorial);
}

Bueno hasta aquí termina este post, para no variar, la próxima entrada mostrará un ejemplo completo con este ciclo, con su respectivo video como se acostumbra

2 comentarios:

  1. chevere sigue asi amigo ,eres el mejor.

    ResponderEliminar
  2. Excelente el código para calcular el factorial, te felicito por tu blog, pero tengo una consulta podrías explicarme el factorial pero con recursividad.

    Saludos
    desde Venezuela

    ResponderEliminar