domingo, 21 de octubre de 2012

Sucesion de Fibonacci Normal e Inversa

Autor: Juan Albarran Gutierrez
Competencia: Desarrollo de Software (Curso 2do Semestre).
Palabras Clave: Fibonacci, Ciclos, Programacion II, for, Java.

¡Hola que tal!, en esta entrada quiero compartir con ustedes un programa en Java que me ha ayudado a comprender mas los ciclos para el curso Programación II, este programa realizado en un Laboratorio del mismo ramo es sobre la Sucesion de Fibonacci que segun el numero N que sera ingresado por el usuario, mostrara el orden normal de la sucesion "y" el orden inverso de la sucesion.


Solucion

Como siempre un pseudocodigo puede ayudarte a guiarte en como sera el resultado final del programa, el cual el siguiente ilustra como deberia quedar el programa.


Algoritmo Fibonacci
         numeroFibonacciN, numeroFibonacci1 <- 0, numeroFibonacci2 <- 1, numeroIngresado | Enteros Largos;
         Escribir "Ingrese numero N";
         Leer numeroIngresado;
         SI numeroIngresado > 0 Entonces
                 Escribir "Orden Normal";
                 Para i <- 0 Hasta numeroIngresado Con Paso 1 Hacer
                          Escribir numeroFibonacci1;
                          numeroFibonacciN <- numeroFibonacci1 + numeroFibonacci2;
                          numeroFibonacci1 = numeroFibonacci2;
                          numeroFibonacci2 = numeroFibonacciN;
                  Fin Para
                  Escribe "Orden Inverso";
                  Para j <- numeroIngresado Hasta 0 Con Paso -1 Hacer
                           numeroFibonacciN = numeroFibonacci2 - numeroFibonacci1;
                           numeroFibonacci2 = numeroFibonacci1;
                           numeroFibonacci1 = numeroFibonacciN;
                           Escribir numeroFibonacci1;
                  Fin Para
         Sino
                  Escribir "Error";
         Fin Sino

Fin Algoritmo  
                 
Ejemplo








              
Se ingresa 3
"Orden Normal"
       
en el ciclo que comienza en 0 y debe terminar en 3
 i <- 0
 ---------
Escribe nro1 // 0

nroN = nro1 + nro2 // 1 <- 0+1
nro1 = nro2 //  1
nro2 = nroN //  1
  i <- i +1 // 1

Escribe nro1 // 1

nroN = nro1 + nro2 // 2 <- 1+1
nro1 = nro2 //  1
nro2 = nroN //  2

 i <- i+1 // 2

Escribe nro1 // 1

nroN = nro1 + nro2 // 3 <- 1+2
nro1 = nro2 //  2
nro2 = nron //  3

 i <- i+1 // 3

Escribe nro1 // 2

nroN = nro1 +nro2 // 5 <- 2+3
nro1 = nro2 //  3
nro2 = nroN //  5

*Termina el primer ciclo*
---------------------------------------------
"Orden Inverso"
 
Comienza el segundo ciclo que empieza en el numero ingresado (3) y termina en 0     

i <- 3
---------
nroN = nro2 - nro1 // 2 <- 5 - 3
nro2 = nro1 //  3
nro1 = nroN / 2

Escribe nro1 // 2

i <- i - 1 // 2

nroN = nro2 - nro1 // 2 <- 3 - 2
nro2 = nro1//  2
nro1 = nroN // 1

Escribe nro1 // 1
 
 i <- i - 1 //1

nroN = nro2 - nro1 // 1 <- 1 - 2
nro2 = nro1 // 1
nro1 = nroN //  1

Escribe nro1 // 1
 
i<- i - 1 //0

nroN = nro2 - nro1 // 0 <- 1 - 1
nro2 = nro1 //  1
nro1 = nroN // 0
 
Escribe nro1 // 0
 
*Termina el segundo ciclo*
 ---------------------

 *Termina el Programa*

 Codigo del Programa

import java.util.Scanner;

public class Fibonacci {

    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
       
        // Variables
        long numeroFibonacciN, numeroFibonacci1 = 0, numeroFibonacci2 = 1, numeroIngresado;
            // Solicita el ingreso de N
            System.out.println("Porfavor ingrese el valor N de numeros a mostrar");
            numeroIngresado = leer.nextLong();
            // Si el numero es mayor que cero ejecute el resto
            if (numeroIngresado > 0) {
                // anuncio orden
                System.out.println("Orden Normal");
               
                // Comienza el primer ciclo
                for (long i = 0; i <= numeroIngresado; i++) {

                    System.out.println(numeroFibonacci1);
                    numeroFibonacciN = numeroFibonacci1 + numeroFibonacci2;
                    numeroFibonacci1 = numeroFibonacci2;
                    numeroFibonacci2 = numeroFibonacciN;
                }
                //Comienza el segundo ciclo
                System.out.println("Orden inverso");

                for (long j = numeroIngresado; j >= 0; j--) {
                    numeroFibonacciN = numeroFibonacci2 - numeroFibonacci1;
                    numeroFibonacci2 = numeroFibonacci1;
                    numeroFibonacci1 = numeroFibonacciN;
                    System.out.println(numeroFibonacci1);
                }
            }
            // Si N es menor a cero Envie mensaje de error y termina el programa
            else {
                System.out.println("El numero debe ser mayor a cero para que la sucesión sea valida");
            }
       
    }
}

Nota: puede que paresca que puede llegar a números mas altos, pero el dato "Long" tiene un limite en la memoria lo cual un numero ingresado muy elevado puede conllevar a sobreecarga e imprimiría números aleatorios.

Demostraciones


 

               
                                          
Reflexión
  En esta ocasion complico un poco al principio de como se podria implementar los ciclos en este programa y la logica que habia que implementar, pero con el tiempo deidicado a la actividad y se pudo crear este programa con ciclos "for" y me ayudo a intender mejor este concepto.
  Te invito a que si tienes dudas o quieres complementar esta actividades mediante opiniones, otras informaciones no tengas miedo de emitir tus comentarios, a participar donde cada comentario hará que se haga más interactivo este espacio.
           
 

No hay comentarios:

Publicar un comentario