Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - SOMMA E MEDIA
Forum - C/C++ - SOMMA E MEDIA

Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 16:19
Lunedì, 19/10/2009
SALVE
Vorrei riuscire a capire perchè non riesco a far girare questo programma.

Codice sorgente - presumibilmente C/C++

  1. /* QUESTO PROGRAMMA ACQUISISCE DA TASTIERA UN NUMERO INTERO POSITIVO N,
  2.    E CALCOLA E STAMPA SUL VIDEO LA SOMMA E LA MEDIA DEI PRIMI N ELEMENTI
  3.    DELLA SUCCESSIONE DI NUMERI REALI a(n):
  4.                           a(n)=(n+3)/(n^3+5)         n=1,2,3...               */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. main()
  8. {
  9.       int N,n;float MEDIA,SOMMA,x,y;
  10.       printf("Scrivi un numero intero positivo N e il programma calcolera'");
  11.       printf("\nla somma e la media dei primi N elementi della successione");
  12.       printf("\ndi numeri reali a(n):");
  13.       printf("\n\n                  a(n)=(n+3)/(n^3+5)");  
  14.       printf("\n\n\n                        N = ");scanf("%d",&N);
  15.       SOMMA=0;
  16.       for (n=1;n<=N;n++)
  17.            {
  18.             x=((n+3)/((n*n*n)+5));
  19.             SOMMA=SOMMA+x;
  20.            }
  21.       printf("\n\nECCO LA SOMMA:      SOMMA = %f",SOMMA);    
  22.       MEDIA=0;
  23.       for (n=1;n<=N;n++)
  24.           {
  25.            y=((n+3)/((n*n*n)+5));
  26.            MEDIA=MEDIA+y;
  27.           }
  28.       MEDIA=MEDIA/N;
  29.       printf("\n\nECCO LA MEDIA:      MEDIA = %f\n\n",MEDIA);
  30.       system("pause");
  31.       return 0;
  32. }



Mi dite dove sbaglio e come devo correggierlo???GRAZIE

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 16:32
Lunedì, 19/10/2009
cosa ti dice il compilatore?
cos'è che non funziona?

ps. è c non c++ ;)

PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 16:38
Lunedì, 19/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)...

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 16:58
Lunedì, 19/10/2009
x=(float)(n+3)/((n*n*n)+5);

y=(float)(n+3)/((n*n*n)+5);

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 16:59
Lunedì, 19/10/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);

PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 17:10
Lunedì, 19/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???

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 17:11
Lunedì, 19/10/2009
Testo quotato

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
PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 17:20
Lunedì, 19/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.:)

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 18:44
Lunedì, 19/10/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 :k:

PM Quote