PDA

Visualizza la versione completa : [C] problema pareggio frequenze moda


Skass89
28-01-2010, 19:23
allora il problema da speigare semplice, gi dal titolo si deduce....praticamente ho un programma per l'analisi di dati ricavati da un sondaggio....nel programma base la funzione che calcola la moda sulle risposte ottenute (da qst sondaggio) la calcola e poi stampa in forma tebellare tutti i valori per le relative risposte con affianco un istogramma formato da tante * quant' la frequenza....ma non tiene conto dei casi di pareggio...cio se si verificano 10 risposte per il valore 4 e 10 per il valore 6...il programma stampa 4 come moda.

il codice del programma base questo e quindi manca il controllo dei casi di pareggio delle frequenze




void mode(int freq[], const int answer[]){

int rating;
int j;
int h;

/*contatori per controllo caso di pareggio frequenze */
int pax, contrl;
int max = 0;
int pareg;

int largest = 0;
int modeValue = 0;

printf("\n\n ***** MODA ***** \n");



for(rating = 1; rating <= 9; rating++){
freq[rating] = 0;
}

for(j = 0; j < SIZE; j++){
++freq[ answer[ j ] ];
}


printf("%s%11s%19s\n\n\n", "Risposta", "Frequenza", "Istogramma");


for(rating = 1; rating <= 9; rating++){
printf("%8d%11d ", rating, freq[rating]);



if(freq[rating] > largest){
largest = freq[rating];
modeValue = rating;
}


for(h = 1; h <= freq[rating]; h++){
printf( "*" );
}
printf("\n");
}

printf("\n");


}
}

printf("PAREGGIO = %d\n", max);

printf("La moda e' il numero piu' frequente in un insieme.\n"
"La moda in questo esercizio e' %d presente per %d volte\n\n",
modeValue, largest);
}



qualche ideuzza for me???????? mi sto stressando :dh:

oregon
28-01-2010, 19:29
Cosa dovrebbe fare nel caso che dici?

Skass89
28-01-2010, 19:30
segnalare che ci sia un caso di pareggio

oregon
28-01-2010, 19:34
Controlla (con un ciclo) se nel vettore freq[] esistono altri elementi che valgono largest ...

Skass89
28-01-2010, 19:39
max=freq[0];
for(contrl=1; contrl<9; contrl++){
if(freq[] == largest){
max++;
}
}

printf("PAREGGIO = %d\n", max);


mi viene in mente una cosa del genere ma non funziona

oregon
28-01-2010, 19:43
Se ne esistono altri oltre a quello relativo al numero gia' trovato ...

Skass89
28-01-2010, 21:53
non ho capito

oregon
28-01-2010, 22:00
Esamina tutti i valori di freq (a proposito ... perch da 1 a 9 ? E l'elemento 0 ?) e, tranne che per l'indice uguale a modeValue (trovato in precedenza) controlla se ne esiste uno uguale a largest.

Skass89
28-01-2010, 22:15
secondo me, dormo mentre programmo....




max=freq[0];
for(contrl=0; contrl<9; contrl++){
if(freq[contrl] == largest){
max++;
}
}

printf("PAREGGIO = %d\n", max);


cos dovrebbe essere giusto....

oregon
28-01-2010, 22:20
Scusa ... ma cosa frequ[0] da cui parte max ?

Loading