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
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
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
#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
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)
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....
Gracias por las respuestas, pero NO ENTIENDO!!!
Di qué es lo que no entiendes porque no te vamos a hacer el ejercicio
.
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!¡.
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
Hace unos días la hice también en C++:
#include <stdio.h>
#include <iostream>
using namespace std;
int main (void)
{
int a, b, sum;
a = 0;
b = 1;
for (int i = 0; i < 20; i++)
{
sum = a + b;
cout << sum << endl;
a = b;
b = sum;
}
}
SI te fijas, hay un apartado donde hago el bucle; en el ejemplo he puesto hasta 20 carácteres:
for (int i = 0; i < 20; i++)
Solo hace falta que hagas un cin para pedir al usuario un número que se guardará por ejemplo en NUM, y hacer
for (int i = 0; i < NUM; i++)
Donde NUM será la variable que guardará cuantos numeros se mostrarán (los que pida el usuario.
Así que queda:
#include <stdio.h>
#include <iostream>
using namespace std;
int main (void)
{
int a, b, sum, num;
a = 0;
b = 1;
cout << "Introduce la cantidad de numeros a mostrar: ";
cin >> num;
for (int i = 0; i < num; i++)
{
sum = a + b;
cout << sum << endl;
a = b;
b = sum;
}
}
Espero lo hayas entendido y que no haya perdido minutos de mi vida en explicártelo ;)
Un abrazo
Funció FibonacciRecursiu (ent n:enter) retorna enter
Var
f:enter
fvar
Si
n=0 o n=1 ----> f:=1
n>1 ----> f:= FibonacciRecursiu(n-1)+FibonacciRecursiu(n-2)
fsi
Retorna f
ffunció
ventajas, es como un while pero la función se llama a sí misma hasta llegar al caso base n=0 o n=1, reduces longitud de codigo considerable.
PD: como te dije, aqui tienes el algorisme de la sucesión de fibonacci, està en catalan mi lengua (si no lo entiendes traductor ;) ) cualquier otra duda, pregunta, espero haberte ayudado.
Cita de: pajaras en 23 Febrero 2011, 20:48 PM
Funció FibonacciRecursiu (ent n:enter) retorna enter
Var
f:enter
fvar
Si
n=0 o n=1 ----> f:=1
n>1 ----> f:= FibonacciRecursiu(n-1)+FibonacciRecursiu(n-2)
fsi
Retorna f
ffunció
ventajas, es como un while pero la función se llama a sí misma hasta llegar al caso base n=0 o n=1, reduces longitud de codigo considerable.
PD: como te dije, aqui tienes el algorisme de la sucesión de fibonacci, està en catalan mi lengua (si no lo entiendes traductor ;) ) cualquier otra duda, pregunta, espero haberte ayudado.
No soy muy partidario de la Recursión, la verdad nunca me gustó, me gusta más la iteración, pero bueno, siempre hay muchas buenas y diferentes soluciones a un problema no?
Programa: Secuencia de Fibonacci
Inicio Programa:
Entero CasoInicial = 0
Entero CasoInicial2 = 1
Mostrar CasoInIcial ", " CasoInicial2
Para i = 0 Hasta 13 ConIncremento = 1 Hacer:
Entero j = 0
j = CasoInicial + CasoInicial2
Mostrar ", " j
CasoInicial = CasoInicial2
CasoInicial = j
Fin_Para
Fin_Programa