Vincenzoflaminio
26-10-2011, 23:36
Salve , ho bisogno di un aiuto...
ho scritto il seguente programma che mi calcola la media aritmetica dei voti
#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 :confused: un aiutino??
ho scritto il seguente programma che mi calcola la media aritmetica dei voti
#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 :confused: un aiutino??