我一直在編寫代碼來產生水平直方圖。該程序將用戶輸入的任何數字範圍轉換爲矢量。然後它詢問用戶想要直方圖開始的最低值,以及他們希望每個bin有多大。例如:直方圖程序給出奇怪的輸出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