sábado, 12 de noviembre de 2011

Serie Fibonacci

Competencia: Aplica las ciencias de la ingenieria
Curso:Desarrollo cliente servidor
Actividad: Serie Fibonacci Invertida


Descripcion

Para esta nueva actividad es funfamental concimiento de programacion en java ademas de las matematicas, parte de las ciencias basica.
El proble en si es el siguiente:
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.

Ejemplos



Entrada                                                        Salida



1.    <5>           →        <Proceso>    →        <3,2,1,1,0>

2.    <0>           →        <Proceso>    →        <Debe ingresar un número mayor que 0>

3.    <1>           →        <Proceso>    →        <0>

4.    <-1>          →        <Proceso>    →        <Debe ingresar un número mayor que 0>

5.    <-3>          →        <Proceso>    →        < Debe ingresar un número mayor que 0>

6.    <2,3>        →        <Proceso>    →        <error de ingreso/Ingrese un numero entero>



 Analisis de solucion.

           La serie de fibonacci  se obtiene  mediante la función sucesiva,donde  dos variables se inicializan con 0 y 1, luego  cada número que se obtiene es la suma del anterior.
La función del arreglo  es guardar un dato en este caso los números de la serie en una posición de este, determinada por el contador i,mediante el ciclo for, este arreglo tendrá el tamaño del valor ingresado por el usuario.
En un  segundo ciclo for,  asemos el procedimiento de guardar de forma invertida  en el arreglo2 la serie  que se encuentra en el arreglo. Aquí recorrimos el arreglo  de forma inversa(desde la cantidad que ingresa el usuario hasta 0)y a la vez que vamos guardando en arreglo2 la serie. 


Codigo fuente.





import java.util.Scanner;

public class SerieFibonacci {

public  static void main(String[]args){

         

  

try{/*para estar libre de posibles amenazas al programa(que se caiga

         * por un dato mal ingresado por el ususario)*/

           

        //variables del main

int array[];

int Cant;

int i=0;

     

        //para leer los datos

Scanner Leer=new Scanner (System.in);

            

System.out.println("la cantidad de nuemros que desea ver de la serie Fibonacci.");

       Cant=Integer.parseInt(Leer.next());

       /*variable en la que se guarda lo ingresado por el ususario*/

         

        /*condicion se es menor a cero enviarle un mensaje al ususario

         * que debe ingresar un número mayor a cero    */    

if(Cant<=0) {

          System.out.print("debe ser mayor que 0");

            }

     

         /*si ingresa un numero mayor a cero sigue el codigo*/

else{

     SerieFibonacci s=new SerieFibonacci();

           array=s.serie(Cant);

         /*se crea un objeto de la clase

        * se crea tambien un arreglo llamado array y se le da el valor que

            * retorna el medtodo

            *terminando ser igual al valor que retorna el metodo serie*/

 

     /*anunciamos al usuario que se mostrara la serie inversa*/

System.out.println("La serie fibonacci invertida es: ");

      System.out.println("");

       

     

      /*creamos un ciclo for para recorrer el con

       * los valores obtenidos del metodo*/

for(i=0; i<=Cant-1; i++){

         System.out.print (" "+array[i]);

                       }      

                   }

      

/*excepcion en el caso de que el ususario ingresara un caracter o un tipo de

         * dato que no se le pide, para que de esta manera no se caiga el programa*/

catch(NumberFormatException e){

            System.out.println("Error de ingreso");

            System.out.append("Ingrese un numero entero "+e.getMessage());

           

        }

        /*se ejecuta al final de la aplicacion para anunciar que

         * el programa se finalizo*/  

   finally{

        System.out.println("");

        System.out.println("Programa terminado.");

    }

}







//metodo para determinar la serie de fibonacci.

int[] serie(int Cant2)


  //inicializamos variables  

    int a=0;

    int i=0;

    int f1=0;

    int f2=1;

    //ambos arreglos tienen el tamaño del valor ingresado por el ususario

    int [] arreglo=new int[Cant2];

    int [] arreglo2=new int[Cant2];

    /*el array arreglo guardara la serie en linea

      el array arreglo2 guardar la serie invertida*/

         

  /*si el numero ingresado por el usuario es 1 el arreglo 2

    guardar este valor. Luego se retornara el arreglo2*/

       if(Cant2==1){

                 

                  arreglo2[a]=0;

                  }

        

  /* Si el valor ingresado por el usuario es mayor a dos se emieza a ejecutar

        * el for para obtener la serie fibonacci*/

       if(Cant2>=2){

     

                   for(i=0; i<=Cant2-1; i++)

                  {

                    arreglo[i]=f1;

                    f2+=f1;

                    f1 = f2 - f1;     

                  }

/* con el segundo for recorremos el primer arreglo en forma invertida para

  * ir guardando en el segundo arreglo la serie fibonacci de forma invertida*/                  



                   for(i=Cant2-1; i>=0; i--)

                   {

                    arreglo2[a]=arreglo[i];

                         

                    a++;

                   }

             

                 }

/*retornamos el arreglo con la serie invertida guarda a la clase principal*/

  return arreglo2;    

}



}


 Captura del programa





 Conclusion.


La determinacion de la serie de fibonaccio requier de conocimiento de funciones en matematicas ademas de una serie programacion, ya que seutiliza el ciclo for, contadores, y lo primordial de esta actividad los arreglos, algo muy faci de aprender y de utilizar, resultando ser muy utiles para diferentes propositos.













1 comentario:

  1. Que tal cuando compile en Eclipse, me marco error en la palabra 'serie' en el array, a que se deberá eso?
    Saludos,
    Y quisiera saber como hacer para mostrar los tres o dos números anteriores a un numero insertado por el usuario. este es mi correo v298@hotmail.com, gracias!

    ResponderEliminar