|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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;
}
|
|
|
|
|
|
#2 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21833
|
Quote:
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Grazie della risposta, ho da poco iniziato il corso di c++ .
Volevo utilizzare l'algoritmo insertion_sort per attenermi a quanto studiato , però mi chiedo quando passo i parametri alla function di ordinamento , come faccio a passare voti[] se è un attributo privato ? |
|
|
|
|
|
#4 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21833
|
Quote:
set e get come dovresti fare per ogni variabile?
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
ma perchè avresti bisogno di un algoritmo di ordinamento per la media dei voti?
per me ti complichi la vita inutilemnte. puoi farlo comunque senza alcun ordinamento: quando effettui il calcolo della media all'interno del ciclo che somma tutti i voti ad ogni passo individui di volta in volta i due voti minimi e poi al termine del ciclo li sottrai al totale Ultima modifica di SerMagnus : 29-10-2011 alle 13:01. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 1539
|
Come ha detto sermagnus modica
Codice:
double Voti:: media () {
if (n ==0) return -1; // errore: nessun dato !
if ( n == 1)
return voti[0]
if (n == 2)
return (voti[0] + voti[1]) / 2;
double somma = 0;
for (int i=0; i < n; i++)
somma += voti[i];
return (somma - max() - min()) / n - 2;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:58.




















