Somma in C

Messaggioda bad.alex » 14/06/2017, 00:41

Ciao ragazzi.
Avrei un dubbio riguardo una sommatoria in C.
Dovrei scrivere la seguente formula:

$S=(1/200)*(\sum|P(t)-C|)$

Avevo pensato di scrivere:

Codice:
double P[TIME], C, sum;
int t;
sum=0.;
for(t=1; t<200; t++){
sum=(1/200)*(sum+fabs(P[t]-C));
}

printf("Sum: %lf\n", sum);

 


E' corretto?

Vi ringrazio per l'aiuto

p.s. gli estremi della sommatoria sono 1 e 200.
bad.alex
Senior Member
Senior Member
 
Messaggio: 1071 di 1283
Iscritto il: 10/01/2007, 19:01

Re: Somma in C

Messaggioda apatriarca » 14/06/2017, 01:41

No. (1/200) esegue una operazione intera. Sono infatti due costanti intere e la loro divisione e quindi quella tra numeri interi. Il risultato è quindi zero. Puoi seguire due strategie:
1. Scrivere (1.0 / 200.0).
2. Dividere semplicemente la somma per 200 al di fuori del ciclo una singola volta.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4665 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Somma in C

Messaggioda insideworld » 14/06/2017, 15:05

nel for dovresti scrivere t<=200 altrimenti sommi solo fino al 199esimo elemento.
se stai scandendo un vettore con 200 elementi allora probabilmente dovresti scrivere for(t=0;t<200,t++)
a questo punto sarebbe giusto fermarsi alla casella numero 199 perchè contando da zero è la 200esima.
inoltre dentro il ciclo for dovresti scrivere
Codice:
sum=sum+fabs(P[t]-C));

volendo puoi riscriverla usando questo operatore per non ripetere sum
Codice:
sum += fabs(P[t]-C));
ma se non l'hai mai usato lascia perdere.
infine devi fare la divisione fuori dal ciclo come hanno già detto
Codice:
sum=sum/200.0
Avatar utente
insideworld
Junior Member
Junior Member
 
Messaggio: 102 di 306
Iscritto il: 13/01/2017, 15:24

Re: Somma in C

Messaggioda Raptorista » 14/06/2017, 18:07

apatriarca ha scritto:Puoi seguire due strategie:
1. Scrivere (1.0 / 200.0).

Questa non mi sembra corretta. Per come è scritto, la moltiplicazione deve stare per forza fuori dal ciclo for.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 4410 di 9616
Iscritto il: 28/09/2008, 19:58

Re: Somma in C

Messaggioda apatriarca » 14/06/2017, 18:14

Avevo letto velocemente il codice e notato subito quell'errore, ma non ho letto il resto. Ovviamente va cambiata la riga in modo da accumulare il risultato al di fuori della moltiplicazione. Fare il prodotto fuori ha diversi vantaggi, ma le soluzioni discusse volevano essere 'generiche'. Ci sono casi in cui un coefficiente non è facile da estrarre ed è necessario assicurarsi che il rapporto sia calcolato con valori in virgola mobile e non interi.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4672 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Somma in C

Messaggioda Raptorista » 14/06/2017, 18:17

Sì, capisco. La sommatoria è scritta male in partenza.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 4412 di 9616
Iscritto il: 28/09/2008, 19:58

Re: Somma in C

Messaggioda kobeilprofeta » 15/06/2017, 07:42

1.0/200.0 non è necessario
penso che il .0 basti in uno dei due a tua scelta

Ma sono comunque dettagli
kobeilprofeta
Cannot live without
Cannot live without
 
Messaggio: 2398 di 5262
Iscritto il: 24/09/2012, 18:25

Re: Somma in C

Messaggioda apatriarca » 15/06/2017, 09:33

Ne basta uno, ma sono solo due caratteri e preferisco essere esplicito sul tipo delle costanti.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4673 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Somma in C

Messaggioda bad.alex » 15/06/2017, 11:42

Grazie a tutti per l'aiuto.


(scusate se rispondo in ritardo, ma ho avuto problemi con la connessione)
bad.alex
Senior Member
Senior Member
 
Messaggio: 1072 di 1283
Iscritto il: 10/01/2007, 19:01

Re: Somma in C

Messaggioda insideworld » 16/06/2017, 11:38

in realtà la somma può stare anche dentro il ciclo però non come l'hai scritta tu @bad.alex
Codice:
sum=sum + fabs(P[t]-C)/200.0

in questa maniera dividi ogni elemento della somma prima di sommarlo(propr.distributiva), nell'altra dividevi più volte il risultato delle somme degli elementi precedenti :smt023
Avatar utente
insideworld
Junior Member
Junior Member
 
Messaggio: 104 di 306
Iscritto il: 13/01/2017, 15:24

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite