#include <stdio.h>
#include <math.h>
int countPosition(double datum, double rangeMin, double delta,
int sizeHist)
{
int pos;
pos = (((int) (fabs(datum) / delta * 2)) + 1) / 2;
return pos = sizeHist / 2 + ((datum > 0) ? 1 : -1) * pos;
}
void showHistgram(int *dataHist, double rangeMin, double delta,
int sizeHist)
{
double tempMin = rangeMin;
double tempMax = rangeMin + delta;
int i, j;
/* for (i = 0; i <= sizeHist; i++) { */
for (i = 0; i < sizeHist; i++) {
printf("%+0.2f ~ %+0.2f :", tempMin, tempMax);
for (j = 0; j < dataHist[i]; j++)
printf("*");
puts("");
tempMax += delta;
tempMin += delta;
}
}
void histgram(double *data, double rangeMax, double rangeMin, double delta,
int sizeData)
{
/* int sizeHist = (int) (rangeMax - rangeMin) / delta + 1; */
int sizeHist = (int) ((rangeMax - rangeMin) / delta);
int dataHist[100] = { 0 };
int i;
for (i = 0; i < sizeData; i++)
dataHist[countPosition(data[i], rangeMin, delta, sizeHist)]++;
showHistgram(dataHist, rangeMin, delta, sizeHist);
}
int main(int argc, char *argv[])
{
double data[] = { 0.05, -0.05, 1.0, -1.0, 0.0 };
double rangeMax = 1.05;
double rangeMin = -1.05;
double delta = 0.1;
int sizeData = sizeof(data) / sizeof(data[0]);
histgram(data, rangeMax, rangeMin, delta, sizeData);
return 0;
}