2015-09-10 62 views
0

因此,我所擁有的是兩個陣列,每個陣列具有不同的溫度讀數。我有一個低的陣列,包括一個月的低溫和一個包含當月高溫的高陣列。我通過從文本文件中讀取這些變量來獲取這些變量。我的代碼如下所示:創建沒有大「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]; 
    } 
} 
+0

使用查找表作爲直方圖行的限制。這使您可以更改行限制而無需更改查找功能或直方圖繪製功能。 –

+0

我很好奇爲什麼<= 9,<= 19等等,而不是<10,<20等。由於四捨五入錯誤和浮點表示,與浮點相等通常不能很好地工作。 –

+0

請勿在循環條件中使用'eof'(請參閱[這裏](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong))。如果間隔被分解爲10個值的靜態範圍,則可以直接將這些值映射到這些範圍內。 – Jason

回答

0

他是做到這一點的一種方法:

  1. 創建數組正確的直方圖條目數
  2. 用每個條目的計數填充數組
  3. 打印出數組。

對於#2,您可以使用一些數學來確定要在數組中使用的索引。你可能還需要一對夫婦的if語句,但不是很多,你正在想:

  • 試驗< 0 - 增加計數的數組[0]
  • 試驗> 99 - 增加計數in array [11]
  • 否則通過使用(temp/10) + 1來計算要填寫哪個條目。 +1是跳過第一個數組項(< 0)temp/10將使用整數數學(假設temp是一個int)給你一個介於0和9之間的數字,表示temp的「十」部分。
+0

謝謝。這工作完美! – luiscovar