PDA

Visualizza la versione completa : [C] Determinare numero più frequente


WithoutSam
14-11-2006, 01:08
dov'è che sbaglio???
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#define dim 1000
int main()
{
int Sam[dim];
int y=0,m=0,x=0,j,max=0,i=0,k;
printf("L'UTENTE INSERISCE UNA SERIE LUNGA A PIACERE DI INTERI COMPRESI TRA 0 E 100.\nLA SERIE TERMINA QUANDO L'UTENTE INSERISCE -1.IL PROGRAMMA DEVE STAMPARE IL NUMERO PIU' FREQUENTE E QUELLO MENO FREQUENTE.\n\n");
do {
printf("Inserisci numero %d: ",i+1);
scanf("%d",&y);
if(y==-1) break;
Sam[i]=y;
i++;
} while(y!=-1);
for(j=0;j<i;j++){ printf("%d\t",Sam[j]);}
for(j=0;j<=100;j++) { for (k=0;k<=i;k++) {if (j==Sam[k]){ m++;
if(m>max) {max=m;x=j;
}
}
}
m=0;


}

printf("Il numero che hai inserito con piu' frequenza nella serie e': %d",x);
system("PAUSE");
return 0;
}
---------------------------------------------------------------------
alcune volte il numero + frequente non è quello giusto...
Nel caso inserisco numeri tutti diversi e volessi avere un messaggio che mi avvisa?
Come imposto il codice se volessi determinare anche un numero minimo come frequenza?
E nel caso in cui numeri diversi appaiano con la stessa frequenza?
scusate ma nn c sto + dentro avrei bisogno di qlk dritta....
magari poi è sbagliata proprio l'impostaizonje del flusso e per gestire casi + ampi bisogna impostarlo proprio diversamente..nn so..semidate una manina vene sarei grato..
p.s. grassie oregon ..scusa se stresso 6 molto gentile !
ciao
WithoutSam

Lak3d
14-11-2006, 02:17
Originariamente inviato da WithoutSam
dov'è che sbaglio???


for(j=0;j<=100;j++){
for (k=0;k<=i;k++)
if (j==Sam[k])
m++;
if(m>max){
max=m;
x=j;
}
m=0;
}



in quel pezzo qui sopra ho variato la posizione delle parentesi... secondo me non c'è bisogno che controlli m ad ogni passaggio, basta che lo fai alla fine del ciclo for più interno... solo a quel punto ti sarà utile sapere se è maggiore del massimo o meno.
Occhio agli indici di non sforare oltre e il costrutto while in alto mi sembra ridondante... subito dopo scanf hai già il controllo con il break... puoi benissimo usare un for infinito.

Comunque, per fare quello che chiedi tu (maggiore e minor numero di occorrenze), perchè non usi un array di 100 elementi sfruttandone gli indici e incrementandolo ogni volta di una unità? Alla fine avrai l'array che ti riassume tutte le occorrenze per ogni numero. Ovvero, indice=numero, contenuto=occorrenze.

due righe valgon più di mille parole, quindi posto anche le righe: :D



int risultati[100]={0};

for(k=0;k<=i;k++)
risultati[Sam[k]]++;


Così facendo eviti due cicli for da un numero di iterazioni pari a 100*size(sam[]) e alla fine hai pure un array completo da cui estrarre qualsiasi tipo di statistica...

alka
14-11-2006, 02:54
Ricordo di indicare il linguaggio anche nel titolo... :stordita:
Qui ho corretto io.

Loading