[C] Moda di un vettore
Buonasera a tutti, ho creato questo programma per trovare la moda di un vettore..Il problema è che il risultato non è sempre giusto in quanto se nel vettore ci sono 2 o più elementi che si ripetono con la stessa frequenza, mi viene dato come risultato solo uno di essi..Qualcuno mi aiuta a correggerlo?
Grazie
#include
#include
#define n 100
int main () {
int array[6] = {2, 2, 1, 4, 3, 3 };
int i, max, imax;
int arrayfreq[n];
printf ("Il vettore e': \n");
for (i=0; i<6; i++) {
printf ("%i ", array);
}
printf ("\n");
max=arrayfreq[0];
for (i=0; i<6; i++) {
if ( arrayfreq> max && arrayfreq>0) {
max=arrayfreq;
imax=i;
}
}
printf ("lA MODA E': %i\n", array[imax]);
}
Grazie
#include
#include
#define n 100
int main () {
int array[6] = {2, 2, 1, 4, 3, 3 };
int i, max, imax;
int arrayfreq[n];
printf ("Il vettore e': \n");
for (i=0; i<6; i++) {
printf ("%i ", array);
}
printf ("\n");
max=arrayfreq[0];
for (i=0; i<6; i++) {
if ( arrayfreq> max && arrayfreq>0) {
max=arrayfreq;
imax=i;
}
}
printf ("lA MODA E': %i\n", array[imax]);
}
Risposte
Ciao
quando esegui l'ultimo printf fai vedere soltanto un valore.
Quanto hai terminato di popolare l'array arrayfreq devi fare un ciclo che verifichi se ci sono elementi uguali in quell'array e li visualizzi tutti
quando esegui l'ultimo printf fai vedere soltanto un valore.
Quanto hai terminato di popolare l'array arrayfreq devi fare un ciclo che verifichi se ci sono elementi uguali in quell'array e li visualizzi tutti
Come potrei fare?
Ciao,c'è uno statement che mi desta particolarmente attenzione,L'inizializzazione di un vettore è sempre un incognita da parte di noi programmatori,poiché il compilatore spesso e volentieri scrive nelle celle dei vettori numeri casuali, quindi se tu fai questo statement max=arrayfreq[0]; stai praticamente prendendo il valore casuale scritto nella cella 0 di quell'array e lo metti in max, a questo punto ti faccio una domanda per come è scritto il codice se la moda si trovasse nella cella 0 dell'array e fosse unica te la manderebbe in output?
2)Forse sono decisamente stupido,oppure non vedo bene, ma nel secondo for tu stai facendo un controllo del tipo arrayfreq che nel primo caso i=0, è maggiore di max?? No perché hanno lo stesso valore(casuale)...Quindi in realtà cosa controlli? il controllo dovresti farlo tra array e max, perché come ho detto i valori di arrayfreq sono casuali, a meno che come ho detto non copi inutilmente array in arrayfreq.Inoltre per la risoluzione del problema che hai posto al forum,Come ti ha suggerito summer dovresti controllare che una volta trovata la moda non ci sia un'altra uguale nel caso ci fosse barbaramente puoi fare un loop che ti riscrive lo stesso numero n volte e per esempio uscirebbe la moda è 8 8 .Spero di esserti stato di aiuto.
2)Forse sono decisamente stupido,oppure non vedo bene, ma nel secondo for tu stai facendo un controllo del tipo arrayfreq che nel primo caso i=0, è maggiore di max?? No perché hanno lo stesso valore(casuale)...Quindi in realtà cosa controlli? il controllo dovresti farlo tra array e max, perché come ho detto i valori di arrayfreq sono casuali, a meno che come ho detto non copi inutilmente array in arrayfreq.Inoltre per la risoluzione del problema che hai posto al forum,Come ti ha suggerito summer dovresti controllare che una volta trovata la moda non ci sia un'altra uguale nel caso ci fosse barbaramente puoi fare un loop che ti riscrive lo stesso numero n volte e per esempio uscirebbe la moda è 8 8 .Spero di esserti stato di aiuto.