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.
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!
No puede ser!!!, el fallo estaba en el especificador del printf!!!.
Muchas gracias, era eso. Saludos.