Un sencillo programa: La Serie de Fibonacci

Estado
No está abierto para más respuestas.

Kain

Lanero Reconocido
Se unió
16 Jul 2001
Mensajes
1,985
Toy de acuerdo. Que tal si para empezar hacemos entre todos el programa de la serie de Fibbonacci?
 

neo

Lanero Reconocido
Se unió
31 Ene 2002
Mensajes
268
Hmm, este Kain con sus chistes...!
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
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?
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
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, ...
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
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
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
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;
		} 
	}
}
 

JulianD

Lanero Reconocido
Se unió
13 Abr 2001
Mensajes
9,511
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>
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
fue porque le pusiste <= en ves de <, pero no quiere decir que este mal, jejejeje
 

JulianD

Lanero Reconocido
Se unió
13 Abr 2001
Mensajes
9,511
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 :)
 

Kain

Lanero Reconocido
Se unió
16 Jul 2001
Mensajes
1,985
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
 

Kain

Lanero Reconocido
Se unió
16 Jul 2001
Mensajes
1,985
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
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
listo ya la hago y les mando el fuente y el ejcutable
 

VictorV

LANero Fundador
Miembro del equipo
Se unió
14 Abr 2001
Mensajes
1,033
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;
		} 
	}
}
 

ZeN<CyBeRKiLLeR>

LANero oficial
Se unió
15 Abr 2001
Mensajes
2,491
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?
 

JulianD

Lanero Reconocido
Se unió
13 Abr 2001
Mensajes
9,511
Pues, convirtiendo la variable long en una entera. no?
 

ZeN<CyBeRKiLLeR>

LANero oficial
Se unió
15 Abr 2001
Mensajes
2,491
La cosa es que la variable entera tiene bastanes numeros, pero no los suficientes, entonces se desborda muy facil.
 

neo

Lanero Reconocido
Se unió
31 Ene 2002
Mensajes
268
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...
 

MigPosada

Lanero Reconocido
Se unió
16 Mar 2002
Mensajes
1,161
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.
 

neo

Lanero Reconocido
Se unió
31 Ene 2002
Mensajes
268
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.
 

ZeN<edsadr>

Lanero Reconocido
Se unió
12 Feb 2002
Mensajes
717
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
No está abierto para más respuestas.
Arriba