Innanzitutto scusate eventuali violazioni di regola ma sono nuovo. Detto questo il programma è questo:
Scrivere un programma che:
- legga da tastiera un numero intero positivo 1000 <= N <= 3000, controllandone
la validità e richiedendolo di nuovo se non valido
- generi N numeri random interi compresi tra 1 e 100 usando la funzione
drand48( ) e li memorizzi in un array data
- conti quante volte ciascun numero intero compare in data (cioè la frequenza
dei 100 numeri )
(es.: il numero 17 compare 22 volte, il numero 18 compare 21 volte etc.)
- memorizzi le frequenze calcolate in un array freq e stampi l’array in modo chiaro e leggibile
- trovi il numero più frequente e il numero meno frequente e quindi calcoli il valor medio
degli scarti <S> =? i | Fi – N/100 | /100, stampandoli alla fine.
Mia risoluzione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int N,i,data[102] = {0},freq[101],X,seed,Xmax=0, Xmin=0;
seed = time(NULL);
srand(seed);
do{
printf("Inserisci un numero N, 1000<=N<=3000\n");
scanf("%d",&N);
}while(N < 1000 || N> 3000);
for(i=0; i<=N;i++)
{
X = rand()%100 + 1;
data[X-1]++;
freq[X-1] = data[X-1];
}
int max = freq[1];
int min = freq[1];
for(X=1;X<=100;X++)
{
printf("freq[%d] = %d\n",X,freq[X-1]);
if (freq[X] > max)
{
max = freq[X];
Xmax=X;
}
if (freq[X] < min)
{
min = freq[X];
Xmin=X;
}
}
printf("il numero con maggiore frequenza e' %d\n",Xmax);
printf("il numero con minor frequenza e' %d\n",Xmin);
return 0;
}
Il problema sta nella parte finale. La parte iniziale sembra funzionare ma le ultime 2 richieste no. La penultima non riesco a capire perchè non funzioni correttamente, mentre l'ultima non so proprio come impostarla. Qualcuno può aiutarmi?