Un sencillo programa: La Serie de Fibonacci

Estado
Cerrado para nuevas respuestas.

Kain

Lanero Reconocido
16 Jul 2001
1,985
Toy de acuerdo. Que tal si para empezar hacemos entre todos el programa de la serie de Fibbonacci?
 
Originalmente colocado por Kain
Toy de acuerdo. Que tal si para empezar hacemos entre todos el programa de la serie de Fibbonacci?

Pues no me parece mala idea ustedes que opinan?
 
Muchos pensaran que este programita es una tonteria, pero para los que no estan relacionados en el mundo de la programacion les va a ser util.

Empezemos por saber que es la serie de fibonacci:

La serie fue descubierta por un matemático italiano del siglo XIII, llamado Fibonacci. Cada número de la serie es el resultado de la suma de los dos anteriores. Veamos que aspecto tiene:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
 
Ahora diseñemos el algoritmo, una solucion seria la siguente, el cual imprime los numeros de la serie menores que 200.

  1. Iniciar Fibonacci
  2. f1=1
  3. f2=1
  4. imprimir f1
  5. mientras que f1<200
  6. imprimir f2
  7. f2=f2+f1
  8. f1=f2-f1
  9. fin mientras que
  10. fin fibonacci
    [/list=1]
    miremos algunas lineas importantes del algoritmo:
    4. Imprimos el primer numero de la serie
    7. lo que hacemos es: a f2 le llevamos el siquiente numero de la serie
    8. a f1 le llevamos lo que tenia f2, es decir el numero anterior al siguiente de la serie a ser impreso
 
el codigo en java corespondiente al anterior algoritmo es:

Código:
public class Fibonacci
{
	public static void main (String [] args)
	{
		int f1=1, f2=1;
		System.out.println (f1);
		while (f1<200)
		{
			System.out.println(f2);
			f2+=f1;			
			f1 = f2 - f1;
		} 
	}
}
 
  • Me gusta
Reacciones: yyescobare
Bueno, como el único lenguaje que estoy manejando por estos días es PHP, aquí está mi versión en PHP :D

http://proyectame.com/fibonacci.php


Y aquí está el source... Pero creo que lo hice mal pq el programa me muestra hasta el 233!
PHP:
<html>
<head><title>Fibonacci</title></head>
<body>
<?
echo "Iniciamos Fibonacci<p>";
$f1 = 1;
$f2 = 1;
echo $f1."<br>";
while ($f1 <= 200) {
	echo $f2."<br>";
	$f2=$f2+$f1;
	$f1=$f2-$f1;
}
echo "<p>Fin Fibonacci";
?>

</body>
</html>
 
  • Me gusta
Reacciones: yyescobare
fue porque le pusiste <= en ves de <, pero no quiere decir que este mal, jejejeje
 
No se, antes lo puse menor o igual pq pensé que ese era el problema o algo, pero originalmente lo hice con menor que simplecito :)
 
Si, el algoritmo de Victor es perfecto, voy a pasarlo a C para subirlo y que los interesados vean y jueguen un poco con el.

Ve esta bueno esto, deberíamos poner programitas sencillitos y dar tiempito para que la gente los vaya haciendo
 
He aqui a los que les interese en C(no C++).

Código:
#include <stdio.h> 
#include <conio.h> 

int main () 
{ 
	int fibo1, fibo2, i; 
	fibo1 = 1; 
	fibo2 = 1; 
	printf ("%d", fibo1); 
	for (i = o; i < 200; i++) 
	{ 
		printf ("%d", fibo2); 
		fibo2 += fibo1; 
		fibo1 = fibo2 - fibo1; 
	} 
	getch(): 
}

Una modificacion interesante es hacer que imprima una cantidad de terminos. Esa la mando ahorita, que me estan echando de la sala porque hay clase de algo aqui.

Suerte
 
listo ya la hago y les mando el fuente y el ejcutable
 
bueno Aqui tienen el codigo fuente:
Código:
import java.io.*;

public class Fibonacci
{
	public static void main (String [] args)
	{
		double f1=1, f2=1;
		int cantidad=0;		
		
		BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
		
		try
		{
			System.out.println("Digita cuantos numeros de las serie quieres ver: ");
			cantidad=Integer.parseInt(teclado.readLine());
		}
		catch(IOException e)
		{
			System.exit(0);
		}
		catch(NumberFormatException e1)
		{
			System.out.println("No Digito Un Numero!");
			System.exit(0);
		};
		
		System.out.println (f1);
		
		for(int i=0; i<cantidad-1; i++)
		{
			System.out.println(f2);
			f2+=f1;			
			f1 = f2 - f1;
		} 
	}
}
 
  • Me gusta
Reacciones: yyescobare
Me parece realmente facil esta aplicacion, sino miren Victor y yo dedicimos el programa de una manera realmente facil.

Aunque nos quedo la duda de que la salida del programa al ser LONG quedan numeros decimales

1.00
1.00
2.00
ETC.

Como hariamos para eliminar numeros decimales en salidas long?

alguien sabe?
 
La cosa es que la variable entera tiene bastanes numeros, pero no los suficientes, entonces se desborda muy facil.
 
Alguno de ustedes no ha trabajado matemáticas discretas?, bueno digo, porque un ingenieró de sistemas que se respete debe ser muy bueno en este campo, lo digo porque en esta materia "que me tiré por cierto el semestre pasado", uno cosas muy importantes como Algebra de Boole y Relaciones, aja, relaciones, como árboles, grafos, etc.. y tambien Relaciones de Recurrencia, aquí viene el caso, la sucesión de Fibonacci es una de éstas, y pues bueno, ¿Cómo es que están haciendo el programa? En función de los términos anteriores?, dejenme decirles que esto no es optimo, por ejemplo, necesitamos hallar el término 100, y que?, nos vamos a poner al pc a calcular todo eso?, "que perdida de tiempo!!", para eso hay que documentarse.., ;), se nota que no han estudiado en la distri... aquí la malicia indígena va por delante :diablo:, miren, la ecuación para esa relación de recurrencia es:

Fn=[ 1/((5)^1/2) ][ ( ((1+(5)^1/2))/2)^(n+1) ) - ( ((1-(5)^1/2))/2)^(n+1) ) ]

Espero que me hayan quedado bien esos parentesis, me voy a almorzar, estoy de afán...

Ahh, si quieren mirar como se resuelve esa relación de recurrencia y cualquier otra miren el el libro de Grimaldi de matemática discreta ó el Ross...
 
Yo estoy estudiando Matemáticas Discretas este semestre (apenas estoy en segundo), pero solo hemos visto lógica y matemáticas booleanas. Me parece muy interesante la idea de analizar la complejidad y eficacia de un algoritmo matemáticamente, porque todo el tiempo lo he hecho de una forma más bien empírica.
 
Bien interesante lo de el análisis de algoritmos, el semestre pasado vi Ciencias de la Computación I, y pues ahi vi un poco sobre analisis y complejidad de algoritmos, de los más optimos, los más recursivos etc..., les recomiendo el siguiente libro: Diseño de Programas, Formalismo y abstracción, Ricardo Peña Marí. ED. Pentice Hall. Y un datico, lo compre en la Panaméricana en un remate de libros, 10.000 pesos y la verdad es que es muy bueno.
 
a mi me importa muy poco el tiempo de ejecuccion de este programa ya que es muy pequeño me parece mucho mas practico asi:

Código:
#include<iostream.h>
#include<conio.h>

long fibo(long num)
{ if(num==0 || num==1)
     { return num;}
  else
     { return fibo(num-1) + fibo(num-2); }
 }

void main()
{ long igual, numero;
  clrscr();
  cout<<"entre un numero: \n";
  cin>>numero;
  igual=fibo(numero);
  cout<<"el termino numero "<<numero<<" de la serie fibonacci    es: "<<igual;
  getch();
}

ademas es mas elegante jejejejeje...
 
Estado
Cerrado para nuevas respuestas.