Problema con programa Fibonacci que trabaja con tablas

Iniciado por Enri_f99, 3 Diciembre 2017, 00:28 AM

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

Enri_f99

Hola buenas, no consigo que el siquiente programa funcione y no se cual es el problema ya que al ejecutarlo solo dice "press any key to continue", si alguien sabe por que es y me lo pudiera decir lo agradecería mucho.


#include <iostream>

using namespace std;

/*
* Pre: Introduce un número entero
* Post: Devuelve el número de la serie de Fibonnaci correspondiente a la posición
* del número indicado previamente
*/


char FibonacciChar(int n) {
     char F[1000];
     F[0] = '0';
     F[1] = '1';
     F[2] = '1';
     
     if(n == 1) {
         return F[1];
    }
    else if(n == 2) {
        return F[2];
    }
    else if(n == 0) {
        return F[0];
    }
    else {
        for( int i = 3 ; i <= n ; i++){
            F = F[i-1] + F[i-2] -2 * '0';
            F = F[n];
        }
        return F[n];
    }
}

/*
* Pre: Introduce dos números positivos siendo el primero el primer término
*  y el segundo el último término de la sucesión de Fibonacci que desea presentar.
* Post: Devuelve los números de fibonnaci de el rango especificado por los dos números.
*/

int main(){
    int n1,n2;
   
    cout << "Terminos desde y hasta (0 o nega   tivo para acabar):"<<endl;
    cin >> n1;
    cin >> n2;
    if(n1 > 0 && n2 > 0 && n2 > n1){
        for(int i = n1; i < n2; i++){
        cout << i << ". " << FibonacciChar(i) << "\n";
        }
        cout << n2 << ". " << FibonacciChar(n2) << "\n";
        cout << "Terminos desde y hasta (0 o negativo para acabar):"; cin >> n1 ;
        cin >> n2;
    }
     
    return 0;
}

CalgaryCorpus

No se si esta es la razon, pero sospecho que asi es:

Si haces

a = 3;

y en la linea de abajo haces

a = 5;

quedando

a = 3;
a = 5;

la primera asignacion no sirve para nada. No tiene sentido hacerla.
Esta explicacion es para que entiendas solamente. No es que estes haciendo esto literalmente. Lo que si estas haciendo es asignar 2 veces (y entonces la primera es superflua) a la variable F en el else.

Fibonnacci parte con 0 y 1 (o 1 y 1), no con '0' y '1'.
Cuando resuelvas el primer problema que te digo (este de asignar 2 veces la misma variable) tendras problema con el segundo.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

BloodSharp

#2
Cita de: Enri_f99 en  3 Diciembre 2017, 00:28 AMPre: Introduce un número entero
Post: Devuelve el número de la serie de Fibonnaci correspondiente a la posición
del número indicado previamente

Código (cpp) [Seleccionar]

char FibonacciChar(int n) {
    char F[1000];
    F[0] = '0';
    F[1] = '1';
    F[2] = '1';
   
    if(n == 1) {
        return F[1];
   }
   else if(n == 2) {
       return F[2];
   }
   else if(n == 0) {
       return F[0];
   }
   else {
       for( int i = 3 ; i <= n ; i++){
           F = F[i-1] + F[i-2] -2 * '0';
           F = F[n];
       }
       return F[n];
   }
}

No entiendo porqué hacerse tanto problema de esa manera (y encima con un vector tan largo en la pila lo cuál suele ser un problema de seguridad) cuando se puede resolver prácticamente facil la secuencia de fibonacci con calculos con números aureos en 2 líneas...

Código (cpp) [Seleccionar]
#include<cmath>
#include<cstdio>

#define FI ((float)((float)((float)1+((float)sqrt(5)))/(float)2))
#define FIBONACCI(posicion) ((int)((pow(FI,posicion)/sqrt(5))+0.5f))

int main()
{
int i;
for(i^=i;i<10;i++)
printf("Fibonacci en posicion (%i): %i\n",i,FIBONACCI(i));
return 0;
}


B#