2017-10-28 111 views
-4

我正在嘗試編寫一個函數,它接受一個int數組作爲參數,併爲該數組中的數據寫入一個帶有'*'的直方圖。從數組中的數據繪製直方圖

例如,對於int ARR [] {2,1,0,7,1,9},我們應該得到:

histogram

我應該怎麼寫這個代碼?

我的代碼:

using namespace std; 

    int max = 0; 
    char znak = '*'; 

    void histo(int arr[], size_t size) { 
     for (int i = 0; i < size; i++) { 
      if (arr[i] > max) 
       max = arr[i]; 
     } 

//drawing histogram 

while (max > 0) { 
      for (int i = 0; i < size; i++) { 
       if (arr[i] >= max) { 
        cout << znak << " "; 
       } 
       else { 
        cout << " "; 
       } 
      } 
      max--; 
     } 

    } 


    int main() 
    { 
     int arr[]{2,1,0,7,1,9}; 
     size_t size = sizeof(arr)/sizeof(*arr); 
     histo(arr, size); 

    } 
+0

你錯過了這個問題... – DimChtz

+0

_「我有繪圖直方圖的問題」_不是一個有效的問題陳述。您需要告訴我們您正在嘗試的是什麼,您遇到什麼問題,您期望的行爲,您正在觀察的行爲等。請訪問[help center](http://stackoverflow.com) /幫助),並閱讀部分[我如何問一個好問題](http://stackoverflow.com/help/how-to-ask)。 –

+0

對不起。我的錯。我編輯它。 – gallrdm

回答

0

這裏是如何的代碼應工作

char znak = '*'; 

void histo(int arr[], size_t size) { 

    //finding the top point of this hystogram 
    int max = arr[0]; 
    for (int i = 0; i < size; i++) { 
     if (arr[i] > max) { 
      max = arr[i]; 
     } 
    } 
    int level = max; 
    int currSize =0; 
    while (level != 0) { 
     for (int i = 0; i < size; i++) { 
      currSize = arr[i]; 
      if (currSize >= level) { 
       cout << znak; 
      } 
      else 
      { 
       cout << " "; 
      } 
     } 
     level--; 

     cout << "\n"; 
    } 
} 
int main() 
{ 
    int arr[]{2,1,0,7,1,9}; 
    size_t size = sizeof(arr)/sizeof(*arr); 
    histo(arr, size); 

} 

因爲一切都在同一時間進行打印時,要確保*時,纔會打印,如果陣列說它應該在這個高度打印。