因此,我所擁有的是兩個陣列,每個陣列具有不同的溫度讀數。我有一個低的陣列,包括一個月的低溫和一個包含當月高溫的高陣列。我通過從文本文件中讀取這些變量來獲取這些變量。我的代碼如下所示:創建沒有大「if-else」塊的溫度直方圖
while (!file.eof())
{
file >> high[i] >> low[i];
i++;
}
我知道數組的大小,因爲它是文本文件的第二行顯示如下。
April 6, 2010
24
88 72
52 36
73 48
89 72
97 84
61 41
48 37
68 45
88 63
79 52
48 21
55 46
54 41
97 81
55 37
79 70
72 43
68 45
102 80
57 39
37 32
45 28
66 45
59 36
現在我必須從溫度中獲得計數並創建一個類似於下面示例的直方圖。因此,如果有例如2個溫度大於或小於49,我會在間隔標籤後打印兩顆星。
< 0|
<= 9|
<=19|
<=29|*
<=39|
<=49|**
<=59|*
<=69|
<=79|*
<=89|
<=99|
>99|
我在想兩個數組合併成一個,並通過他們的循環,但我目前我知道如何做到這一點的唯一方法是使用一個開關盒或其他如塊巨大的。即使溫度在0到9之間,我仍然需要打印「< = 9 |」。我不確定如何在沒有實際使用if-else的情況下創建計數函數。任何想法將不勝感激。
我有我的計數功能的代碼,現在,它結合了兩個數組,但也差不多了:
void count(float lowArr[], float highArr[], int num){
int size = num * 2, i = 0, j =0;
float *arr;
arr = new float[size];
for (i ; i < num; ++i)
{
arr[i] = lowArr[i];
}
for (j; j < num; ++j, ++i)
{
arr[i] = highArr[j];
}
}
使用查找表作爲直方圖行的限制。這使您可以更改行限制而無需更改查找功能或直方圖繪製功能。 –
我很好奇爲什麼<= 9,<= 19等等,而不是<10,<20等。由於四捨五入錯誤和浮點表示,與浮點相等通常不能很好地工作。 –
請勿在循環條件中使用'eof'(請參閱[這裏](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong))。如果間隔被分解爲10個值的靜態範圍,則可以直接將這些值映射到這些範圍內。 – Jason