Newsgroup: it.comp.lang.c++
Titolo: ancora(purtroppo) la media dei risultati

Sono rimasto bloccato sul calcolo della media ho provato moltissime volte ma
il risultato finale e' sempre la divisione dell'ultimo dato immesso potreste
per favore dirmi dove sbaglio?Vi posto una delle varie versioni spero
abbiate pazienza e mi aiutiate a capire.
 
# include <iostream.h>
# include <iomanip.h>
int main()
{
  float gallons,//galloni immessi
  miles,//miglia percorse
  milgals,// media dell miglia percorse
  finish,// fine del ciclo
  count=0,// numero di cicli
  midi;// media del totale
  while(finish!=-1) {
 cout << "galloni di benzina immessi:";
 cin >> gallons;
 cout << "miglia percorse:";
 cin >> miles;
 milgals=miles/gallons;
  cout << setiosflags(ios::fixed | ios::showpoint)
  << setprecision(6) << setw(19) <<
  "miglia percorse per gallone:" << milgals << endl;
  cout << "finish:";
  cin >> finish;
  count++;
  if(finish==-1) {
  midi=static_cast<float>(milgals)/count;
   cout << "la media e':" << midi << endl;
  }
  }
 return 0;
}
Grazie per la cortese attenzione.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Te lo ricorreggo on the fly
# include <iostream.h>
# include <iomanip.h>
int main()
{
  float gallons,//galloni immessi
  miles,//miglia percorse
  milgals,// media dell miglia percorse
  count=0,// numero di cicli
  midi=0;// media del totale
  char finish='s' //se lo metti con un char non cambia niente nel programma
ma l'output ha più stile
  while(finish=='s') {
 cout << "galloni di benzina immessi:";
 cin >> gallons;
 cout << "miglia percorse:";
 cin >> miles;
 milgals=miles/gallons;
midi+=milgals// a midi verranno sommati tutti i valori di milgals e alla
fine conterrà la somma totale di tutti i valori
  cout << setiosflags(ios::fixed | ios::showpoint)
  << setprecision(6) << setw(19) <<
  "miglia percorse per gallone:" << milgals << endl;
  cout << "Vuoi continuare? (S/n)"; //diamo un po' di stile alla richiesta
  cin >> finish;
  tolower(finish); //trasformo in minuscolo la lettera immessa
  count++;
  }
//se lo metti fuori dal while ti risparmi un if, in un programmino così non
cambia molto ma in un programma più complesso influisce sull'ordine e
leggermente sulle prestazioni
midi/=cont; //usando la formula xmedio=somma valori/numero valori divido
midi che contiene la somma per cont che contiene il numero di valori
cout << "la media e':" << midi << endl;
 return 0;
}
Capito tutto?
-- 
Axel
Moderatore 
http://www.cropcirclecrew.org/public/cccforum/index.php
Sezione Programmazione Domande/risposte


Ti ringrazio moltissimo ora mi e'chiaro^_^



PS:ho immesso gli stessi indentici dati dello pseudocodice di esempio
dell'esercizio e mentre i risultati parziali di ogni media sono identici la
media del totale e' leggermente differente e non capisco perche'.I dati da
me immessi per la prova sono i seguenti:
galloni=12.8-miglia=287,galloni=10.3-miglia=200,galloni=5-miglia=120.Il
risultato finale dell'esempio e'di
21.601413 mentre a me risulta 21.946449.Che sia un errore di battitura o
dipende da altro?
Vi ringrazio ancora per la cortese attenzione.


se vuoi calcolare la media stai  sbagliando a livello concettuale:
questo codice:
            while(finish=='s') {
                 cout << "galloni di benzina immessi:";
                 cin >> gallons;
                 cout << "miglia percorse:";
                 cin >> miles;
                 milgals=miles/gallons;
                midi+=milgals;
                .
                .
                .
                count++;
        }
        midi/=cont;
e sbagliato:
    per calcolare la media devi fare la <distanza totale percorsa >/<galloni
totali immessi>
    non <somma di medie parziali>/<numero di medie parziali> cosi non tieni
conto della distanza percorsa con ogni media parziale.
....spero di essermi espresso in modo chiaro
ciao.


Grazie ora il risultato e' perfetto ,facendo il calcolo come dici tu ho
pututo anche eliminare il contatore del ciclo^_^
