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.