Я писал код для создания горизонтальной гистограммы. Эта программа вводит пользовательский ввод любого диапазона чисел в вектор. Затем он запрашивает у пользователя минимальное значение, по которому они хотят, чтобы гистограмма начиналась, и насколько большой они хотят, чтобы каждый из них был. Например:Программа гистограммы дает странный результат C++
если lowestValue = 1
и binSize = 20
и вектор заполняется значениями {1, 2, 3, 20, 30, 40, 50}
было бы напечатать что-то вроде:
(bin) (bars) (num)(percent)
[ 1-21) #### 4 57%
[21-41) ## 2 28%
[41-61) ## 2 28%
Здесь большая часть кода, который делает так:
void printHistogram(int lowestValue, int binSize, vector<double> v)
{
int binFloor = lowestValue, binCeiling = 0;
int numBins = amountOfBins(binSize, (int)range(v));
for (int i = 0; i<=numBins; i++)
{
binCeiling = binFloor+binSize;
int amoInBin = amountInBin(v,binFloor, binSize);
double perInBin = percentInBin(v, amoInBin);
if (binFloor < 10)
{
cout << "[ " << binFloor << '-' << binCeiling << ") " << setw(20) << left << formatBars(perInBin) << ' ' << amoInBin << ' '<< setprecision(4) << perInBin << '%' << endl;
binFloor += binSize;
}
else
{
cout << '[' << binFloor << '-' << binCeiling << ") " << setw(20) << left << formatBars(perInBin) << ' ' << amoInBin << ' '<< setprecision(4) << perInBin << '%' << endl;
binFloor += binSize;
}
}
}
и функция, которая подсчитывает количество терминов в каждом бункере:
int amountInBin(vector<double> v, int lowestBinValue, int binSize)
{
int count = 0;
for (size_t i; i<v.size(); i++)
{
if (v[i] >= lowestBinValue && v[i] < (lowestBinValue+binSize))
count += 1;
}
return count;
}
Теперь мой вопрос:
По какой-то причине он не считает значения между 20-40. По крайней мере, насколько мне видно из моего тестирования. Вот образ бега:
Любая помощь приветствуется.
Ух, я всегда делаю эту простую ошибку .. спасибо! – Tom