sábado, 12 de noviembre de 2011

Serie Fibonacci

Autor: Lidia Bachsmann
Competencia: Aplica las Ciencias de la ingeniería. (Nivel 1)
Palabras Clave: Fibonacci, Java.


Descripción de la Actividad
En esta ocasión, en la clase se planteó solucionar un problema matemático denominado "Serie de Fibonacci", creando una aplicación en JAVA.
Esta sucesión es infinita de números naturales: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...

Como anécdota, antes de que Fibonacci escribiera su trabajo, la sucesión de los números de Fibonacci había sido descubierta por matemáticos indios tales como Pingala (200 a.c.), Gopala (antes de 1135) y Hemachandra (c. 1150), quienes habían investigado los patrones rítmicos que se formaban con sílabas o notas de uno o dos pulsos. El número de tales ritmos (teniendo juntos una cantidad n de pulsos) era fn + 1, que produce explícitamente los números 1, 2, 3, 5, 8, 13, 21, etc. La sucesión fue descrita por Fibonacci como la solución a un problema de la cría de conejo.
De seguro, alguna vez has escuchado de esta serie, pero... ¿Te preguntaste alguna vez cómo imprimir esta serie en pantalla, si el usuario es quien determina el límite? Por ejemplo, si ese sujeto pide al programa que imprima los primeros 3 números de esta serie, como respuesta debería dar: 0, 1, 1, 2, 3.


Solución: 

Primero que todo, hay que pensar la manera de expresar algebraicamente. Lo más sencillo es expresar este "pensamiento" mediante el Método de los Cuatro Pasos" (estrategia: "Divide y vencerás")

Paso 1: Ejemplificación
En esta sección, plantea la entrada y salida del programa, buscando los posibles errores que el usuario haría.
ENTRADA > [PROCESO]>SALIDA

1) A > [PROCESO] > “Ingrese número”
2) @.-¡#$%&/()=?¿¡* > [PROCESO] > “Ingrese sólo número”
3) 1,2 > [PROCESO] > “Ingrese número entero”
4) ¼ > [PROCESO] > “Ingrese número entero”
5) -8 > [PROCESO] > “No se permite número negativo”
6) 4+2i > [PROCESO] > “Sólo se permite número entero”
7) 7-1 > [PROCESO] > “No se permite restar”
8) 1+2 > [PROCESO] > “No se permite sumar”
9) 56^2  > [PROCESO] > "Ingrese sólo número"
10) 13/02/2011 > [PROCESO] > “No se permite fecha”
11) > [PROCESO] > “Ingrese número”
12) a90nm > [PROCESO] > “Ingrese sólo número”
13) hg kjh > [PROCESO] > “Ingrese sólo número, sin espacios”
14) log 3 > [PROCESO] > “No se permite obtener logaritmo”
15) 2*4 > [PROCESO] > “No se permite multiplicar”
Entrada: Se considera sólo número entero, mayor que cero
Ejemplo:
9 > [PROCESO] > 0, 1, 1, 2, 3, 5, 8, 13, 21
Salida: Serie de Fibonacci

Paso 2: Análisis y Diseño
La Sucesión o Serie de Fibonacci se genera a partir de dos valores iniciales, que son datos establecidos por defecto. El usuario deberá ingresar el número (n) que limitará esta sucesión.
Valor 1: a= 0
Valor 2: b=1
nuevoTermino= a+b









Pseudocódigo
  • Inicio
  • Solicitar al usuario que ingrese el número que limitará la sucesión
  • Captura el dato y lo almacena en la variable <n>
  • Validamos si el número ingresado es tal, es decir, debemos evitar que ingrese símbolos o letras.
  • Iniciamos las variables a y b, donde a=0; b=1;
  • Para (i=0; i<n; i++)
    • Muestra resultado en pantalla
    • a=a+b;
    • b=a-b;
  • Fin Para
  • Fin tarea principal
  • Fin del programa

Paso Nº 3: Especificación en Diagrama de Actividades 






















Paso Nº 4: Implementación en JAVA

package fibonacci;
import java.io.*;
/*
 * @author Lidia Bachsmann Riquelme
 * @date 12/08/2011
 *
 * Asunto: Genera los <n> numeros de la serie de Fibonacci,
 * donde <n> es ingresado por el usuario.
 */
class Fibonacci
{
/*
 * Aquí se define la funcion principal. Para ejecutar el programa,
 * se requiere que la funcion sea publica, además que debe ser estatica,
 * es decir, podemos llamar a este método sin un objeto de la clase
 * Fibonacci (se crea una instancia) y no tiene que devolver nada, ya que
 * será dirigida por el intérprete, que se encargará el estado de salida.
 */
  public static void main(String args[])
  {
  /* Indica en pantalla al usuario la instruccion para que inicie el
   * programa.
   */
     System.out.println("¿Cuántos números de Fibonacci quieres ver?: ");
     // Creación del flujo para leer datos
     InputStreamReader sr = new InputStreamReader(System.in);
     //Creación del filtro para optimizar la lectura de datos
     BufferedReader br = new BufferedReader(sr);
     // Aquí indicamos al programa como enfrentar a los posibles errores
     //El programa comienza con la validación de datos. En <try> da la pauta de  
     //que trabajara con numeros enteros.
     try
     {
        //La aplicacion lee el dato ingresado (del tipo String) y lo transforma a 
        //un numero entero
        String input = br.readLine();
        int n = Integer.valueOf(input).intValue();
        fibonacci(n);
     }
     catch (NumberFormatException e)
     {
        //Comienza con la captura de errores. Si el usuario ingresa "algo" 
        //diferente de un numero entero y/o String aparecerá en pantalla el 
        //mensaje "No es válido. Ingrese un número entero"
        System.out.println("No es válido. Ingrese un número entero");
     }
     catch (IOException e)
     {
        System.out.println("No ha ingresado nada");
     }
   }
  /*
   * En este ámbito, se define la función de Fibonacci como principal,
   * que es público y pueden ser llamados sin crear un objeto de Fibonacci.
   * También se introduce un nuevo método de cálculo de la secuencia sin
   * necesidad de utilizar una variable temporal.
   */
   public static void fibonacci(int n)
   {
     int a=0,b=1;
     for (int i=0;i<n;i++)
     {
        System.out.println(a);
        a=a+b;
        b=a-b;
     }
   }
}

Paso Nº 4.1. : Captura de pantalla de la aplicación


























Reflexión:

A partir del Método de los Cuatro Pasos podemos organizar la manera de resolver los problemas o crear aplicaciones interesantes. Es muy útil (aunque a veces podemos perder la paciencia en realizar estos ejercicios) ya que permite organizar paso a paso la resolución del ejercicio de manera eficaz.
Antes de programar, te sugiero que imagines cómo vas a resolver el problema (ayuda mucho escribir en papel, e incluso hacer esquemas y dibujos)

Si tienes otra alternativa para analizar los programas me gustaría que comentaras

Saludos.

No hay comentarios:

Publicar un comentario