FIBONACCI

Iniciado por JOSE23, 22 Febrero 2011, 18:52 PM

0 Miembros y 1 Visitante están viendo este tema.

JOSE23

Tengo que hacer el siguiente ejercicio pero no se realizarlo, alguien podria hecharme una mano.

Introducir un número entero positivo. A continuación, mostrar los números de Fibonacci comprendidos entre 1 y el número introducido. Cuando alcancemos el límite (sin sobrepasarlo), el programa mostrará cuántos números de Fibonacci existen entre 0 y el límite señalado.

Se que en Fibonacci --> el primer elemento es 0, el segundo es 1, y cada digito siguiente es la suma de los dos anteriores: 0,1,1,2,3,5,8,13,21...

anterior = actual
actual = anterior + actual

El problema aquí es que ambas variables dependen una de la otra. Cuando cambiamos el valor de una, el valor previo (que es el que nos interesa) se pierde para siempre.

La solución es introducir una variable adicional, para guardar uno de los valores mientras actualizamos las variables. Lo que haremos será guardar el resultado de la suma en una variable nueva.

Las asignaciones correctas son:

suma = anterior + actual
anterior = actual
actual = suma

La cuenta la actualizaremos sumándole 1 en cada paso:

cuenta = cuenta + 1

RyogiShiki

Lo siento no se hacen tareas, a menos que muestres algo de código de tus intentos y dudas específicas nadie podrá ayudarte.

Saludos


satu

Hola

Has explicado el algoritmo perfectamente, ahora pásalo a lenguaje C o C++, piensa un poco antes de pedir ayuda.

Postea lo que lleves hasta ahora

Saludos
Breakbeat como forma de vida

JOSE23




#include <stdio.h>                   //Librerias que utilizara
#include<conio.h>                          //Librerias que utilizara

main(){                       //Inicio el cuerpo del programa
int num1, num2, suma, numero,cuenta;   //Declaro variables del tipo entero
cuenta=0;
num1=0; num2=1;                   //Inicializo mis variables con valor 1

printf("Ingresa el Numero a calcular por Fibonacci: ");        //Imprimo mensaje solicitando numero limite
scanf("%i",&numero);              //Guardo en una variable el numero limite

printf("\nEl primer numero de Fibonacci es %i", num1);                  //Imprimo el primer numero fibonacci 1

printf("\nEl segundo numero de Fibonacci es %i", num2);               //Imprimo el segundo numero fibonacci 1

printf ("\nExisten %i numeros de Fibonacci entre 0 y %i",cuenta,numero);

do {                                       //Inicializa ciclo do while
   suma=num1+num2;          //se suma num1 y num2 y se guarda en suma
   printf("\nEl valor de la suma es %i", suma);             //se imprime el valor de suma
   num1=num2;                    //se asigan el valor de num2 a num1
   num2=suma;
   cuenta=cuenta+1;                   //se asigna el valor de suma a num2
 
   }  while(suma<=numero);          //se lee la conficion del ciclo suma sea menor o igual al limite, el ciclo seguira realizandose
fflush(stdin);
getchar();  //da una pausa para que se pueda visualizar el resultado

}                   //fin del programa


Tengo este codigo, pero no me sale fino

satu

#4
Hola

¿Para que muestras "cuenta" antes del bucle? Lo lógico es mostrarla después, ¿no?

Además tienes que cambiar el bucle que utilizas do-while por un bucle while (acuérdate de inicializar la variable "suma" antes del bucle)

Y léete lo que te dije ayer
- No utilices conio
- main debe devolver un entero
- etc

Saludos

EDITO: utiliza la etiqueta GeSHi para poner el código para que se lea mejor (la tienes al lado del botón de cambio de fuente)
Breakbeat como forma de vida

RyogiShiki

#5
Bueno el código claramente tiene varios errores.

En primer lugar te sugiero que no uses Conio, después que comiences el programa con:
int main()
Y que lo termines  con un:
return 0;

Ahora también que inicialices todas tus variables a la hora de declararlas... ahh no te sigo diciendo porque me irrita >.<..... más bien! porfaor antes de que sigas cometiendo errores lee esto: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Ahora estás haciendo mal algunas cosas:
while(suma<=numero);
Esto no realizara el ciclo el número de veces que el usuario quiere, ya que lo estás comparando es con el resultado de la secuencia en el ciclo, debería ser más bien:
while(cuenta<=numero);

También te sugiero que muestres estas lineas después de quepidas e Límite:

printf("\nEl primer numero de Fibonacci es %i", num1);
printf("\nEl segundo numero de Fibonacci es %i", num2);    


Solamente tienes un límite superior más no uno inferior así que no veo el porque de esta linea:
printf ("\nExisten %i numeros de Fibonacci entre 0 y %i",cuenta,numero);
Yade por sí sabes que van a existir "límite" números de la secuencia de Fibonacci

y esto no es un error de programación es un error de entendimiento y redacción:
printf("Ingresa el Numero a calcular por Fibonacci: ");  
debería ser mejor algo parecido a esto:
printf("Ingresa la cantidad de numeros de la secuencia de Fibonacci a calcular: ");  

El resto es cuestión de malos hábitos de programación....


JOSE23

Gracias por las respuestas, pero NO ENTIENDO!!!

satu

Di qué es lo que no entiendes porque no te vamos a hacer el ejercicio
Breakbeat como forma de vida

BlackZeroX

.
En este hilo hay varios codigos de varios usuarios de vb6 realizando el codigo de la maneras mas prolija y tambien mas rapida.

Puedes ver los codigos fuente para darte una idea de como hacerlo.

http://foro.elhacker.net/programacion_visual_basic/reto_isfibonaccinumbern_as_long_as_boolean-t319480.0.html;msg1580947#msg1580947

Temibles Lunas!¡.
The Dark Shadow is my passion.

pajaras

una alternativa es con recursividad, pruebalo, distingue los casos base y aplica el caso recursivo donde la función se llama a sí misma. Una variante interesante, en breves cuelgo el algoritmo, NO en C.

un saludo, pajaras