[[Algoritmo] Numero di nepero]

xMauri94
Ciao a tutti, ho un problema di questo tipo:

- La costante matematica $ e $ è definita dall'espressione:

$ e = 1/(0!) + 1/(1!) + 1/(2!) + 1/(3!) + 1/(4!) + ... $

Escogitare un algoritmo che calcoli $ e $ con $ n $ termini.


Allora ho pensato di risolvere l'algoritmo in questo modo: (Il linguaggio utilizzato per descriverlo è il C)

main ()
{
   float Somma = 0, Fattoriale = 1;
	int i, N;
	
	printf ("A quale termine vuoi fermare la disposizione della costante di Nepero 'e'? \n");
	scanf ("%d", &N);
	
	for (i=1; i<=N; i=i+1)
	{
	    Fattoriale = Fattoriale * (1/i);
		Somma = Somma + Fattoriale;
	}
	
	printf ("Il risultato e': %f \n", Somma); 
	
	return;
}


Però, in fase di esecuzione, il risultato che ottengo è sempre $ 1 $, per ogni valore $ n $ in input. Mi aiutate a capire dov'è l'errore? Grazie mille.

Risposte
Summerwind78
Ciao

è sbagliato il modo in cui calcoli il fattoriale

prova così

il fattoriale si calcola:

$n! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot ... \cdot (n-1) \cdot n = (n-1)! \cdot n$


main ()
{
    float somma;
    float fattoriale;
    int i;
    int n;

    printf ("A quale termine vuoi fermare la disposizione della costante di Nepero 'e'? \n");
    scanf ("%d", &n);

    somma = 0;
    fattoriale = 1.0;

    for (i=1; i<=n; i++)
    {
        fattoriale *= i;
        somma += 1/fattoriale;
    }

    printf ("Il risultato e': %f \n", somma);

    return;
}



xMauri94
Giusto, grazie per la correzione.

vict85
Sinceramente non penso che il metodo descritto sia un buon metodo per calcolare $e$.

Detto questo, il vero problema del codice iniziale è che "i" era un int e quindi 1/i era uguale a 0. Sono cose a cui bisogna fare attenzione. Di fatto lavorare con l'inverso del fattoriale o con il fattoriale cambia poco le cose.

Inoltre \(\displaystyle\frac{1}{0!} = 1\) quindi avresti dovuto far partire somma da \(1\).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.