zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
SALVE
Vorrei riuscire a capire perchè non riesco a far girare questo programma.
Codice sorgente - presumibilmente C/C++ |
/* QUESTO PROGRAMMA ACQUISISCE DA TASTIERA UN NUMERO INTERO POSITIVO N,
E CALCOLA E STAMPA SUL VIDEO LA SOMMA E LA MEDIA DEI PRIMI N ELEMENTI
DELLA SUCCESSIONE DI NUMERI REALI a(n):
a(n)=(n+3)/(n^3+5) n=1,2,3... */
#include <stdio.h>
#include <stdlib.h>
main()
{
int N,n;float MEDIA,SOMMA,x,y;
printf("Scrivi un numero intero positivo N e il programma calcolera'");
printf("\nla somma e la media dei primi N elementi della successione");
printf("\ndi numeri reali a(n):");
printf("\n\n a(n)=(n+3)/(n^3+5)");
printf("\n\n\n N = ");scanf("%d",&N);
SOMMA=0;
for (n=1;n<=N;n++)
{
x=((n+3)/((n*n*n)+5));
SOMMA=SOMMA+x;
}
printf("\n\nECCO LA SOMMA: SOMMA = %f",SOMMA);
MEDIA=0;
for (n=1;n<=N;n++)
{
y=((n+3)/((n*n*n)+5));
MEDIA=MEDIA+y;
}
MEDIA=MEDIA/N;
printf("\n\nECCO LA MEDIA: MEDIA = %f\n\n",MEDIA);
system("pause");
return 0;
}
|
Mi dite dove sbaglio e come devo correggierlo???GRAZIE
|
|
ingMark (Ex-Member)
Pro
Messaggi: 176
Iscritto: 19/07/2009
|
cosa ti dice il compilatore?
cos'è che non funziona?
ps. è c non c++
|
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Niente esegue il programma bene, solamente che al posto dei risultati di SOMMA e MEDIA scrive 0.000000.
BOH!E' impazzito il compilatore?
P.s Lo so che scritto cosi è C, però ho iniziato a studiare il C++ a partire da C e quindi per ora so scrivere con qst sintassi (ancora non conosco bene cout cin)...
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
x=(float)(n+3)/((n*n*n)+5);
y=(float)(n+3)/((n*n*n)+5);
|
|
ingMark (Ex-Member)
Pro
Messaggi: 176
Iscritto: 19/07/2009
|
anche io avevo provato come hai detto theprogrammer ma il risultato era sempre 0.0000
invece funziona se faccio:
x=(float)(n+3)/(float)((n*n*n)+5);
|
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Hai ragione ingMark, il codice funzione prorpio come hai detto tu!! GRAZIE. Puoi però spiegarmi perchè dovevo fare cosi? perche ho dovuto mettere quei float???
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da zaire90:
Hai ragione ingMark, il codice funzione prorpio come hai detto tu!! GRAZIE. Puoi però spiegarmi perchè dovevo fare cosi? perche ho dovuto mettere quei float??? |
Il codice funziona anche come ti ho suggerito ... il float serve ad effettuare il casting quando vengono fatti i calcoli, in modo che i risultati temporanei siano in floating point (dato che n e' un int).
Un'altra soluzione, infatti, e' quella di indicare le costanti che stanno nell'espressione come float in modo che tutta l'espressione sia calcolata in float
x=(n+3.0f)/((n*n*n)+5.0f);
y=(n+3.0f)/((n*n*n)+5.0f);
Ultima modifica effettuata da theprogrammer il 19/10/2009 alle 17:17 |
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Ah......
Beh non è che abbia pienamente capito perchè non sono un esperto. Sono un principiante nel campo! Comunque ok, penserò alla tua spiegazione!Per adesso basta che il programma mi funzioni...GRAZIE a tutti.
|
|
ingMark (Ex-Member)
Pro
Messaggi: 176
Iscritto: 19/07/2009
|
si, ha ragione theprogrammer, funziona anche come ha scritto lui, errore mio che avevo messo una parentesi di troppo e quindi faceva la conversione dopo che aveva già diviso.
In ogni caso questi problemi nascono dalle conversioni implicite che il c fa.
Esistono dei manualoni, che se vuoi puoi studiarti, su come il c faccia tutto quello che fa.
Se vuoi stare tranquillo fai sempre le conversioni esplicite e ti togli il peso dallo stomaco
|
|