Oppure

Loading
28/04/11 17:32
Daniele T
Ciao Ragazzi, Sono nuovo, ne approfitto per presentarmi e lo farò il prima possibile nella sezione apposito, se il forum ne dispone.

Mi chiamo Daniele ho 20 anni e mi sto avvicinando per la prima volta al linguaggio di programmazione C.

Dunque non riesco a capire perché il mio programma che sembra tanto scontato, mi restituisce un valore del risultato pari a "1,#INF00" ora con qualche piccola modifica del codice restituisce sempre il valore 2,00 ...Chiedo una mano a voi esperti, speriamo bene :) (Il commento spiega la consegna dell'esercizio)

/* in matematica la costante e = 1 + 1/1! + 1/2! + 1/2!... -> infinito
   scrivere un programma che approssimi il valore di 'e' calcolando:
   1+ 1/1! + 1/2! ... + 1/n! , con n immesso da tastiera
*/

#include <stdio.h>

int main (void) {
unsigned short n;
float eValue = 1.00f;
int i,j, den = 1;
printf("Ins n");
scanf("%hd", &n);
for (i=1; i<=n; i++) {
    j = i;
    while (j > 0) {
          den *= j;
          j--;
    }
    eValue += (1/den);
}
printf("eValue: %.2f", eValue);
scanf("%hd", &n);        
}


PS. non fate caso alla struttura del programma, è stato sottoposto a 1000 modifiche nella speranza di trovare una soluzione :) Ciaooo
aaa
28/04/11 17:44
lumo
I problemi sono due:
for (i=1; i<=n; i++) {
    j = i;
    while (j > 0) {
          den *= j;
          j--;
    }
    eValue += (1/den);
}

1) l'espressione (1/den) non dà un float, bensì un int, per questo il programma dà 2: il risultato viene arrotondato
metti eValue += (1.f/den);
2) ad ogni iterazione devi mettere den = 1; altrimenti avrai il calcolo del fattoriale sbagliato
Ultima modifica effettuata da lumo 28/04/11 17:45
aaa