Come Creare un Istogramma con Codice C
Gli istogrammi si trovano comunemente come opzione grafica nei software per fogli di calcolo per l'analisi dati, e nei software di editing immagini per mostrare la distribuzione dei toni dal nero al bianco. Nel linguaggio C, usare un array per memorizzare il conteggio delle frequenze semplifica la creazione di un istogramma del tuo set di dati. Mentre i set di dati per gli istogrammi contengono solitamente valori interi, è possibile contare e graficare anche caratteri e stringhe.
Passaggio 1
Popola un array intero chiamato values con il tuo set di dati, e imposta la variabile numvalues al numero di valori nel set. Questi potrebbero essere generati casualmente, letti da un file, o raccolti interattivamente dall'utente. Questo esempio inizializza le variabili alla dichiarazione:
int numvalues = 20;
int values[numvalues] = { -3, 2, -2, 4, 5, 4, 2, 5, 4, 5, -1, 2, 3, 4, 7, 4, 2, 0, 7, -3 };
Passaggio 2
Imposta due variabili intere (i e j) da usare come iteratori:
int i = 0, j = 0;
Passaggio 3
Itera attraverso i tuoi dati — l'array values — e imposta la variabile maxval al valore massimo dei tuoi dati:
int maxval = 0;
for (i=0; i<numvalues; i++) {
if (values[i] > maxval) maxval = values[i];
}
Passaggio 4
Scorri i dati e imposta la variabile minval al valore minimo dei tuoi dati:
int minval = maxval;
for (i=0; i<numvalues; i++) {
if (values[i] < minval) minval = values[i];
}
Passaggio 5
Dichiara una variabile freqsize per contenere la dimensione del tuo array di frequenze:
int freqsize = maxval - minval + 1;
Passaggio 6
Dichiara un array per i conteggi delle frequenze e inizializza ogni elemento a zero:
int frequency[freqsize];
for (i=0; i<freqsize; i++) {
frequency[i] = 0;
}
C'è un elemento per ogni possibile valore nel tuo set di dati.
Passaggio 7
Scorri ogni valore nel set di dati, incrementando l'elemento dell'array delle frequenze corrispondente a quel valore:
for (i = 0; i < numvalues; i++) {
int index = values[i] - minval;
frequency[index]++;
}
L'indice corrispondente al valore corrente è generato spostando il valore per il valore minimo.
Passaggio 8
Scorri ogni elemento dell'array delle frequenze. Stampa il valore corrente (calcolato spostando l'iteratore i per il valore minimo). Stampa un numero di asterischi (*) corrispondente alla frequenza del valore corrente, ciclando da 1 al valore memorizzato nell'array delle frequenze, stampando un asterisco alla volta:
for (i=1; i<=freqsize; i++) {
printf("%2d\t|", i + minval);
for(j=0; j<frequency[i]; j++) {
printf("*");
}
printf("\n");
}