Discussione: [C++] Media voti
View Single Post
Old 27-10-2011, 00:36   #1
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
[C++] Media voti

Salve , ho bisogno di un aiuto...
ho scritto il seguente programma che mi calcola la media aritmetica dei voti
Codice:
#include <cstdlib>
#include <iostream>
  #define MAX 100
using namespace std;


class Voti {
   double voti[MAX];  // campo private
   int crediti[MAX]; //crediti dei voti
   int n; //numero dei voti inseriti
public:
   bool inserisci ( double v, int c);  // funzione di inserimento
   void inizializza ();       // funzione che inizializza i voti
   void inizializza_c ();    //inizializza crediti
   double media();        // funzione che ritorna la media dei voti
   double max();          // funzione che ritorna il massimo dei voti
   double min();          // funzione che ritorna il minimo dei voti
};

bool Voti:: inserisci (double v, int c) {
  if ( n >= MAX || v <0 )
      return false;
  voti[n++] = v;
  crediti[c++] = c;
  return true;
}
void Voti:: inizializza (){
    for( int i =0; i < MAX; i++)
       voti[i]= 0;
          n=0;
}
void Voti:: inizializza_c (){
    for( int i =0; i < MAX; i++)
       crediti[i]=0;
          n=0;
}

double Voti:: media () {
if (n ==0) return -1;  // errore: nessun dato !
double somma = 0;
for (int i=0; i < n; i++)
   somma += voti[i];
   return (somma /n);
}

double Voti:: max () {
if (n ==0) return -1;  // errore: nessun dato !
double m = voti[0];
for (int i=1; i < n; i++)
   if ( voti[i]> m)
        m= voti[i];
 return m;
}
double Voti:: min () {
if (n ==0) return -1;  // errore: nessun dato !
double m = voti[0];
for (int i=1; i < n; i++)
   if ( voti[i] < m)
        m= voti[i];
 return m;
}

int main()
{
Voti v;
v.inizializza ();
cout <<"scrivi un numero negativo per terminare" << endl;
for (int i=0; i < MAX; i++) {
    double voto;
    int crediti;
    cout << "voto?";
    cin >> voto;
    cout<< "crediti?";
    cin >> crediti;
    if ( voto < 0)
          break;
    v.inserisci (voto, crediti);
}
cout << endl<<"media : " << v.media() << endl << "massimo : " << v.max();
cout << endl << "minimo : " << v.min() << endl;
system("PAUSE");
    
return 0;
}
Quello che dovrei fare ora è modificarlo in modo che la media sia data dalla media aritmetica dei voti esclusi i due voti piu bassi. Quindi ho bisogno prima di ordinarli e poi eliminare i due voti piu bassi (e in caso di pari voto elimina quello da piu crediti) ... nn so bene come farlo un aiutino??
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso