PDA

View Full Version : [C] Funzione calcolo frazione continua


luefash
05-05-2013, 17:55
Ciao, cerco qualcuno che possa darmi una mano a capire dove ho sbagliato: si tratta di una funzione ricorsiva che implementa un algoritmo per il calcolo della frazione continua. Il risultato che mi da l'output è errato di poco, non riesco proprio a capire dov'è l'errore.

#include <stdio.h>


float CalcFrazCont (int n, int arr[], float sum)
{
int i;

while (i <= n)
{
i++;
sum = sum + (1 / CalcFrazCont (i, arr[i], sum));
}

return sum;

}



int main (void)
{
int i, n;
int arr[100];
float sum;


printf ("Inserisci n: ");
scanf ("%i", &n);

printf ("Inserisci %i valori: \n", n);

for (i = 1 ; i <= n ; i++)
{
printf ("%i° valore= ", i);
scanf ("%i", &arr[i]);
}

sum = arr[1];

printf ("La frazione continua è: %f", CalcFrazCont(n, arr, sum));


return 0;

}




Grazie ;)

clockover
05-05-2013, 18:29
Guarda davvero non ho visto il codice ma ad un primo sguardo la variabile "i" in
float CalcFrazCont (int n, int arr[], float sum)
{
int i;

while (i <= n)
{
i++;
sum = sum + (1 / CalcFrazCont (i, arr[i], sum));
}

return sum;

}
non è inizializzata

luefash
07-05-2013, 15:22
Grazie per la risposta, hai perfettamente ragione, mi sono confuso con le variabili globali, che da quanto so vengono inzializzate automaticamente a 0 dal compilatore se lasciate non inizializzate all'interno del programma.

Il problema ora è che ponendo i = 0 mi da "segmentation fault" giusto prima del risultato :muro: non capisco, cosa devo allocare??

wingman87
07-05-2013, 15:33
Il passaggio dei parametri nella chiamata ricorsiva è sbagliato

balth@zar
09-05-2013, 15:45
Il problema ora è che ponendo i = 0 mi da "segmentation fault" giusto prima del risultato :muro: non capisco, cosa devo allocare??

Nella chiamata ricorsiva

sum = sum + (1 / CalcFrazCont (i, arr[i], sum));

arr[i] non è un int[] come richiesto dalla funzione, ma il valore dell'intero in posizione i che viene convertito a puntatore con effetti imprevedibili.