程式概念闡述:輸出資料以直條圖顯示

有一個1維陣列 arr = { 1, 3, 2, 4}

我們通常會想這樣輸出
[0] *
[1] ***
[2] **
[3] ***

但是你是可以這樣輸出的
[0] [1] [2] [3]
* * * *
  * * *
  *   *
      *

演算法描述:
一行輸出的時候,就掃描陣列元素然後判斷是否輸出星號
每次遞減元素內容直到所有的數字都小於等於0
我們還需要一個flag來判斷是不是還有星號要輸出

Pseudocode Code:

putstring [header]
set flag = 1
while flag != 0 then
 set flag = 0
 for i = 0 ~ arr.length then
  if arr[i] = 0 then
   set arr[i] = arr[i] - 1
   set falg = 1
  else
   putchar [space]
 putchar [nextline]
putstring [tailer]


運作演示:
開始前,flag設為1。

第一行輸出表頭
結果
[0] [1] [2] [3]

第二行輸出時
flag != 0 then
設定flag 為 0
arr[0] != 0 then 輸出星號 並將arr[0]減一 , 設定flag為 1
arr[1] != 0 then 輸出星號 並將arr[1]減一 , 設定flag為 1
arr[2] != 0 then 輸出星號 並將arr[2]減一 , 設定flag為 1
arr[3] != 0 then 輸出星號 並將arr[3]減一 , 設定flag為 1
結果 (描述省略兩個*之間輸出的空白)
[0] [1] [2] [3]
* * * *

第三行輸出時
flag != 0 then
設定flag 為 0
arr[0] == 0 then 輸出空白
arr[1] != 0 then 輸出星號 並將arr[1]減一 , 設定flag為 1
arr[2] != 0 then 輸出星號 並將arr[2]減一 , 設定flag為 1
arr[3] != 0 then 輸出星號 並將arr[3]減一 , 設定flag為 1
結果
[0] [1] [2] [3]
* * * *
  * * *

第四行輸出時
flag != 0 then
設定flag 為 0
arr[0] == 0 then 輸出空白
arr[1] != 0 then 輸出星號 並將arr[1]減一 , 設定flag為 1
arr[2] == 0 then 輸出空白
arr[3] != 0 then 輸出星號 並將arr[3]減一 , 設定flag為 1
結果
[0] [1] [2] [3]
* * * *
  * * *
  *   *

第五行輸出時
flag != 0 then
設定flag 為 0
arr[0] == 0 then 輸出空白
arr[1] == 0 then 輸出空白
arr[2] == 0 then 輸出空白
arr[3] != 0 then 輸出星號 並將arr[3]減一 , 設定flag為 1
結果
[0] [1] [2] [3]
* * * *
  * * *
  *   *
      *

第六行要輸出時
flag != 0 then
設定flag 為 0
arr[0] == 0 then 輸出空白
arr[1] == 0 then 輸出空白
arr[2] == 0 then 輸出空白
arr[3] == 0 then 輸出空白
結果
[0] [1] [2] [3]
* * * *
  * * *
  *   *
      *
〔這裡還多一行空白行〕


完成! 不想輸出空白行就自己調整囉

留言