Error sin sentido en tabla

Iniciado por eleon, 6 Mayo 2012, 14:21 PM

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

eleon

Buenas:

Estoy intentando guardar la sucesión de fibonacci en una tabla, algo muy sencillo, pero me da error. Al depurar encontré el fallo en la línea marcada:

int main ()
{
   
   int tabla [80] = {1, 1};
   int i;
   int max;
   
   scanf ("%d", &max);

   for (i = 2; i < max; i++) //Genero la sucesion de fibonacci hasta el maximo
   {
       tabla [i] = (tabla[i-1]) + (tabla[i-2]); //Aqui me da el error
   }

   for (i = 0; i < max; i++) //Imprimo la sucesion completa
   {
       printf ("%s", tabla[i]);
   }
}


Estoy seguro de que el fallo está en que intento acceder a elementos de la tabla que no existen, pero no lo veo. En la primera iteración:

tabla [ i ] = tabla [2]  ||  tabla [i-1] = tabla [1]  ||  tabla [i-2] = tabla [ 0 ]

Todos esos elementos existen y en las siguientes iteraciones se mantiene.

¿Alguna sugerencia?, gracias.

xiruko

cuando dices error no se si te refieres a error de compilacion o a que el programa no te funciona correctamente.

deberias tener en cuenta si el numero "max" introducido por el usuario es mayor o menor que el tamaño de la tabla. y en el "printf" del final, estas imprimiendo enteros, por lo tanto el especificador de formato deberia ser %d y no %s que es para una cadena. este de aqui esta probado y funciona correctamente:

#include <stdio.h>

#define TAM 10

int main ()
{

    int tabla[TAM]= {1, 1};
    int i, max;

    scanf ("%d", &max);

    for (i = 2; i < max && i < TAM; i++)
        tabla[i] = tabla[i-1] + tabla[i-2];

    for (i = 0; i < max && i < TAM; i++)
        printf ("%d ", tabla[i]);
   
    printf("\n");
    return 0;
}


otra manera seria hacerlo con punteros, asi declararias el tamaño de la tabla una vez sabes cuantos numeros, "max", quiere ver el usuario.

#include <stdio.h>
#include <stdlib.h>

int main ()
{

    int *tabla;
    int i, max;

    scanf ("%d", &max);
    tabla=(int*)malloc(max*sizeof(int));
    *tabla=1;
    *(tabla+1)=1;
   
    for (i = 2; i < max; i++)
        *(tabla+i) = *(tabla+i-1) + *(tabla+i-2);

    for (i = 0; i < max; i++)
        printf ("%d ", *(tabla+i));
   
    printf("\n");
    free(tabla);
    return 0;
}


espero que te haya servido!

eleon

No puede ser!!!, el fallo estaba en el especificador del printf!!!.

Muchas gracias, era eso. Saludos.