domingo, 13 de noviembre de 2011

Serie Fibonnaci Inversa


Descripción del Problema N°1:
Genere una solución para el problema de imprimir los N primeros términos de la serie de Fibonnaci en orden inverso al considerado normal, usando un arreglo de enteros para almacenar los valores ordenados inversamente.
Cree un método al cual se le ingrese el           número de términos y devuelva un arreglo con los elementos de la serie en orden inverso.

Paso 1: Ejemplos de Entrada y Salida.
Entrada -- [Proceso] --Salida
n-- [Proceso] -- Serie Fibonacci inversa
n--[Proceso] -- n debe ser número
n -- [Proceso] --  n deber der entero
n-- [Proceso] -- ingrese sólo número positivo
  --[Proceso] -- ingrese número
n-- [Proceso] --  ingrese número real
0 --[Proceso] --  0
2 -- [Proceso]--  1 0
qwe -- [Proceso] --  ingrese sólo números
3--[Proceso] -- 1 1 0
4 -- [Proceso] -- 2 1 1 0
5-- [Proceso] --  3 2 1 1 0
6-- [Proceso] --  5 3 2 1 1 0
7--[Proceso] -- 8 5 3 2 1 1 0
23-- [Proceso] --17711    10946    6765    4181    2584    1597    987    610    377 233    144    89    55    34   21   13    8    5    3    2    1    1    0


Paso 2: Análisis y Diseño [Proceso]

 primero que debemos hacer es pedirle al usuario que me ingrese un número, que serán los n primeros de la serie Fibonnaci.


 

Recorro el Arreglo a[ ] mediante un for:
 Imprimo la serie de Fibonnaci de manera inversa:



Creamos una función que genera un arreglo de los primeros n números de la seria Fibonnaci al revés.
 
Definimos una variable que utilizaremos en el for. Además llenamos manualmente los dos primeros números de la serie:
 
Recorremos el for para ir creando la serie de Fibonnaci guiándonos por su fórmula:

 
Finalmente retornamos el arreglo arr_alrevez que contiene la serie Fibonnaci de forma invertida.
 
Paso 3: Diagrama de Actividad

Paso 4: Implementación en Java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pruebaejercicio1;
 
import java.util.Scanner;
 
/**
 *
 * @author Alejandra
 */
public class PruebaEjercicio1 {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {  //este metodo estatico puede llamar a otro metodo estatico
        // TODO code application logic here
        int n;
        Scanner leerTeclado = new Scanner(System.in);       // defino la variable para leer del teclado
        System.out.print("\nIngrese el numero de elementos: ");  //se ingresa por teclado el número
        n = leerTeclado.nextInt(); //lo guardo en n
        
        int a[]; //creo un arreglo vacío que contendrá el arreglo retornado por la función.
        a=invierte(n); //llama a la función genera y la guarda en a
        StringBuilder cadena = new StringBuilder(); //crea  un constructor de cadenas para mostrar el arreglo
        
        
        
        for(int i=0;i<a.length;i++) //recorro el arreglo a[]
        {
            cadena.append(a[i]); //agrego cada número a la cadena
            if(i!=a.length-1) //pregunto si el número es distinto desl último
                cadena.append(","); //si es así agrego una coma entre cada número
        }
        
        
       System.out.println("La serie Fibonnaci ordenada inversamente: ["+ cadena+"]");
       
    }
    
    
    public static int[] invierte(int n) //funcion que genera un arreglo de los los primeros n numeros de la seria fibonnaci al revez
    {
        int arr[] = new int[n]; // creamos un arreglo de enteros de longitud n
        int arr_alrevez[] = new int[n]; //creamos un arreglo de longitud n que contendra los números al revez
        
        
        int i; // definimos una variable entero que ocuparemos en el for
        arr[0]=0; //Llenamos los primeros dos números de la serie
        arr[1]=1;
        
        
        for(i=2;i<n;i++) //recorremos el for para ir creando la serie
        {
            arr[i]=arr[i-1]+arr[i-2]; // fórmula para generar la serie que resultado de la suma de los dos anteriores
        }
        
        int j=0; //defino la variable en 0
        for(i=arr.length-1;i>=0;i--) //for que se utilizara para llenar el arreglo de forma invertida. Vamos recorriendo el arreglo arr[] de atrás para adelante
        {
            arr_alrevez[j++]=arr[i]; //guardo el arr[] de forma invertida en  arr_alreves. 
        }
        return arr_alrevez; //retorno el arreglo arr_alrevez que tiene la serie fibonnaci al revez.
    }
}

 
4.1 Aplicación.





No hay comentarios:

Publicar un comentario