PDA

View Full Version : [C++] Mediana e Moda (Statistica)


kane_alfa
08-02-2007, 18:01
Devo affrontare un problema per un esercizio di statistica in c++

L'esercio sarebbe di trovare la mediana nei numeri dati in input

Tutto questo facendo le frequenze cumulate

Qualcuno può aiutarmi a programmare questo problema in c++????

Grazie a tutti quelli che si interesseranno

Ciaooo

cionci
08-02-2007, 18:46
Lo scopo del esercizio è imparare il C++ o fare un programma per la statistica ? Te lo chiedo perchè a seconda della risposta ti indirizzerei a soluzioni diverse.

Comunque principalmente si tratta di prendere in input l'insieme dei valori accompagnati dalla frequenza ed andarli ad inserire in un vettore. Poi ordini il vettore, prima per il valore ed individui il valore centrale (basta sommare la frequenza fino a raggiungere il totale / 2) della distribuzione (mediana) e poi ordini per la frequenza ed il valore corrispondente alla frequenza massima è la moda.

kane_alfa
08-02-2007, 18:48
Per tutti e due i motivi

ma sono gia una settimana che ci sbatto ma non mi riesce

Se qualcuno mi può dare il sorgente lo ringrazio

cionci
08-02-2007, 18:59
Qui è buon uso non fare esercizi per intero, anche perchè altrimenti non impareresti niente.

Intanto comincia a fare l'input degli elementi. Poi ci fai vedere a cosa sei arrivato.

Comunque il mio discorso iniziale era per dirti che non so cosa ti posso consigliare o meno di usare. Ad esempio la classe vector e l'algoritmo sort lo puoi usare ?

kane_alfa
08-02-2007, 20:09
si posso usare tutto quello che vuoi

cionci
08-02-2007, 20:31
Allora è semplicissimo... Fai un vettore di strutture...

struct data
{
int value;
int frequency;
};


vector<data> v;

Riempi i vari elementi di v presi dall'input e poi usi sort per ordinare per valore...

sort(v.begin(), v.end(), sortByValue);

Dove sortByValue è:

bool sortByValue(data elem1, data elem2)
{
return elem1.value > elem2.value;
}

Mentre per ordinare per frequenza dopo che hai trovato la mediana:

sort(v.begin(), v.end(), sortByFrequency);

Dove sortByFrequency è:

bool sortByFrequency(data elem1, data elem2)
{
return elem1.frequency > elem2.frequency;
}

L'elemento con frequenza massima è la moda.

PS: l'elemento con frequenza massima lo potresti anche rilevare durante l'inserimento. Ogni volta che inserisci un elementi guardi se la sua frequenza è maggiore di quella dell'elemento con la frequenza più alta, in caso positivo aggiorni con il nuovo elemento