Universidad Católica de Temuco.
Creatividad e innovación
Nivel 1: Identifica respuestas novedosas para resolver mejor las demandas del entorno cotidiano.
Muchas soluciones a problemas, pueden ser solucionados de manera amplia, con grandes códigos y muchas trabas. Pero, lo creativo e innovador, es poder realizar el mismo resultado que aquellos grandes códigos con otros sencillos y prácticos.
Problema Fibonacci
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.
La serie de Fibonnaci es aquella en la cual se genera el siguiente término como el resultado
de la suma de los dos anteriores, por ejemplo:
0,1,1,2,3,5,8,13,... Fi := Fi-1 + Fi-2
En este problema el usuario ingresa la cantidad de N dígitos que desea visualizar de la serie,
en orden inverso, y la aplicación imprime el arreglo devuelto por el método.
Ejemplo:
3 → [P] → 1,1,0
5 → [P] → 3,2,1,1,0
Análisis del problema
Fib[i]=Fib[i-1]+Fib[i-2] → de la suma de los dos numeros anteriores resulta el nuevo
valor...
Se sabe de la serie fibonacci que los primeros dos valores son el '0' y el '1'...
Fib[0]=0; Fib[1]=1;
entonces como continuación 'i' de Fib[i] equivale a
'2'
(el espacio '2' equivale a los espacios '2-1' + '2-2')
Fib[2]=Fib[1]+Fib[0] → 1
Sabiendo los datos descritos se puede utilizar un for en el cual el contador
es el espacio del arreglo.
Fib[i]=Fib[i-1]+Fib[i-2] → → → → for(i = 2; i < num; i++)
fib[i] = fib[i-1] + fib[i-2];
Con esta simple ecuacion logramos obtener la serie fibonacci y guardarla en un arreglo,
pero aun queda invertir esta...
numero = numero igresado por el usuario.
Si el numero ingresado es mayor a 0, generamos un nuevo array para guardar los
datos de fib[] inversamente.
Relacionamos el array con el metodo utilizado para obtener la serie, y utilizamos un for
que nos entregara los valores al reves.
for(espacioarray = numero-1; espacioarray >= 0; espacioarray--)
System.out.print(fibinv[espacioarray] +", ");
Código del programa
package Fibonacci;
//paquete al que pertenece la clase.
/**
* @author carlos
*/
import java.util.Scanner;
por teclado.
//Libreria utilizada, en este caso Scanner para ingresar datos
public class Fibonacciinverso {
int [] fibonacci (int num){
//comienzo clase
//iniciar el metodo, en este caso llamado “fibonacci”.
int[] fib = new int[num];
//iniciar arreglo donde guardaremos la serie
fibonacci.
int i; //variable que utilizaremos como contador y que daremos las
posiciones al arreglo.
fib[0] = 0;
//Se entrega valor a la posicion 0 del arreglo, la cual ya
sabemos y nos sirve de base.
fib[1] = 1;
//Se entrega valor a la posicion 1 del arreglo, la cual ya
sabemos y nos sirve de base.
for(i = 2; i < num; i++)
//ciclo que nos entrega la serie fibonacci.
(iniciamos del espacio 2 del arreglo por lo que “i=2”)
fib[i] = fib[i-1] + fib[i-2];
//Serie fibonacci, sabemos que fib 'c' = fib
'b' + fib 'a', esto lo interpretamos de esta forma en el arreglo.
return fib;
}
//valor que retorna el metodo fibonacci.
//fin del metodo fibonacci.
public static void main(String[] args) throws Exception
solucion de exepciones.
//comienzo main con
int numero; //creamos variable cuyo valor sera ingresado por teclado
int fibinv[];
orden inverso.
//creamos arreglo que utilizaremos para entregar la serie fibonacci en
Try{ //comenzamos try que sera lo que se ejecutara si no existe alguna exepcion
del programa.
System.out.println("Numero entero que se pasara a fibonacci:");
donde pedimos al usuario que ingrese un valor
//texto
Scanner ningresado = new Scanner(System.in);
//iniciamos Scanner
que nos permite escribir por teclado y a su vez entregarle un valor a una variable
numero = ningresado.nextInt();
if(numero==1)
//le damos valor a la variable numero
//iniciamos if, si el numero ingresado es igual a 1
System.out.println("0, serie inversa del valor 1.");
else
//imprimimos
//sino lo es
if (numero > 0){
//iniciamos if, si el numero ingresado es mayor a 0
int espacioarray;
//creamos variable que sera la posicion en el
arreglo
Fibonacciinverso clase = new Fibonacciinverso();
fibinv = clase.fibonacci(numero); //decimos que “fibinv” sera igual al
resultado del metodo utilizando “numero” (numero en el metodo sera el valor de num)
for(espacioarray = numero-1; espacioarray >= 0; espacioarray--)
//iniciamos un for donde decimos que el espacio de partida sera el ultimo espacio
del arreglo, y de este desendera hasta que el espacio sea igual a 0
System.out.print(fibinv[espacioarray] +", ");
//imprimimos los
valores obtenidos del arreglo, que seran inversos al orden del metodo utilizado.
System.out.println("serie inversa del valor " +numero +"."); //imprimir
} //fin del 'if'
else //si el valor no es mayor que 0
System.out.println("el entero debe ser mayor que 0");//imprimir
}
// fin del try
catch(Exception e){
//si se presenta alguna exepcion
System.out.println("Se ha ingresado un valor erroneo");
}
//fin del catch
finally {
//se finaliza el programa al haber exepcion o al cumplirse el proseso
del try
System.out.println("");
}
//imprimir
//fin del finally
} //fin del main
}//fin de la clase
Reflexión
La creatividad e innovación, llevan a la gente a ser mas, y no estancarse en lo cotidiano, ya que este cambio es positivo y atractivo para otras personas.
Espero que este método, que es uno de los mas cortos para la solución(ya que son pocas lineas de código de este).
Cualquier consulta escribirme. Hasta Luego.

No hay comentarios:
Publicar un comentario