iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 25
1

沒有好的流程圖,就跟在沙漠跑步一樣。你知道目標是跑出沙漠,但不知道方向是哪。
而且當你一睡醒來後,可能連昨天往哪個方向跑也不知道。
只按著眼前情況寫程式,沒做好事前規劃,是一件很危險的事。
除非你是經驗老道,不然就算程式寫完了,功能也沒有延伸性,最後很有可能要再寫一次。
流程圖可以了解程式過程中的各個階段的功能,並利用不同圖形與箭頭代表它們在程式中的流向。
上一步的結果,決定下一步何去何從
此外,流程圖也可以讓你將瑣碎且複雜的資料整理、歸納,讓其他人對你的程式內容一目了然。

不同人對不同圖像也會有不一樣的差異,為了減少此問題,我們必需要統一流程圖的圖像,提升通用性
現在我們說明一下常見的流程圖圖像的含義及用法:

https://ithelp.ithome.com.tw/upload/images/20180106/20107818AYclzbF1Li.png
放置於程式開始端 或是 結束端
用來表示程式開始或結束的圖形

https://ithelp.ithome.com.tw/upload/images/20180106/20107818QXf5lT5WtG.png
用來表示程式需要輸入的圖形

https://ithelp.ithome.com.tw/upload/images/20180106/20107818xXVkepntEj.png
可以用來表示副程式或是一堆程式步驟的圖形

https://ithelp.ithome.com.tw/upload/images/20180106/20107818hUCSV0VhT8.png
用來表示單一程式步驟的圖形

https://ithelp.ithome.com.tw/upload/images/20180106/20107818UYThcxMhg7.png
用來表示條件判斷的圖形

https://ithelp.ithome.com.tw/upload/images/20180106/201078184vWCy4iawR.png
用來表示影印輸出文件的圖形

===========================心得===========================

範例:
https://ithelp.ithome.com.tw/upload/images/20180106/20107818GgTMiaEgvG.png

利用圖形來代替部份文字,可以有助閱讀
此外,也可以幫助自己規劃程式、debug...提高程式的邏輯性
新人常常會:
血心來潮就寫幾行;沒想法也寫幾行。
今天想到新方法,再修改前幾天的程式。
到最後,程式寫到一半發現不對勁,就砍掉重練。
那是因為事前沒有為程式做好規劃,呼叫function需要取/傳哪些變數...導致一堆問題產生

先把流程圖規定好,想考慮可行性、邏輯性...
第二步才撰寫程式
如果某一天有新想法,也要先按照來本的流程圖撰寫。(除非真的真的真的有更好的方式)
你可以把新想法記到筆記本中,將來可以為程式製作Ver 2.0、3.0 ....更多版本


上一篇
[影像處理系列] 當模糊遇上細線化[1]結果分析
下一篇
碰撞檢測 [2]方形檢測
系列文
提神?看程式比喝咖啡更有效。30
0
youhongkuo
iT邦新手 5 級 ‧ 2018-10-31 18:57:59

不好意思,請問一下,
就習慣上,變數的宣告和賦予初始值會畫在流程圖裡面嗎?
如果有變數的值來自於副程式,那又應該要怎樣畫呢?
附一下我的程式碼的開始的部分....

//Global是區域宣告
Global GPath, ThreadStart, ThreadMax, workerStr
Global theDateIsMyDay,JobIdentifierNo,LeaderName
GPath = "C:\test_game\Nooo"
workerStr = mA1_workerStr_M()
ThreadMax = 2
ThreadStart = False
theDateIsMyDay = date
ThreadExclusive1 = 100000000000000
ThreadExclusive2 = 100000000000000

Dim QuiS,WhoIdle
ReDim WhoIdle(0, 1, ThreadMax)
QuiS = mA0_CheckQui()

我在想到底該不該把他們塞在一個方框裡面,
還是有兩條直線的方框裡面,
還是等到有到用的時候在畫進去呢?
其中比較有問題的地方是
workerStr = mA1_workerStr_M()
QuiS = mA0_CheckQui()
這兩段應該要怎樣畫呢?
是不是等到workerStr或QuiS有用到的時候在畫就可以了呢?
要畫的時候是直接用方框加兩條直線的,
裡面寫副程式名稱就好了嗎?

看更多先前的回應...收起先前的回應...

在流程圖,我不會詳述所有初始值
我會直接用1個方框就表示「設定完所有變數及初始值」
因為它是流程圖,而不是虛擬碼

瞭解了;)
那麼像這樣的流程圖,你覺得OK嗎?

Dim QuiS,WhoIdle
QuiS = mA0_CheckQui()'確認QUI設定正確
//
If QuiS  <> "" Then
    MsgBox QuiS
Else 
    QuiS = mX9_Folder_RE'確認資料夾可以被重置
    //
    If QuiS <> "" Then 
        QuiS = MsgBox QuiS
    Else 
        Call MZ9_main01(WhoIdle)
    End If
    //
End If
//

https://ithelp.ithome.com.tw/upload/images/20181031/20113024YZXH6Wo8a2.jpg
如果不管圖形線條有沒有歪掉的話@@a...

https://ithelp.ithome.com.tw/upload/images/20181101/20113024IYXhRDCpq2.png
終於完成了一部分,最後決定主線和子線分開畫了@@a...
因為子線複雜度太高了...
放在一起整個比例都會很難調整...
這樣應該有60分了吧XDDD
對了,
我這是用Draw.io線上版畫的,
還蠻好用的;)

https://ithelp.ithome.com.tw/upload/images/20181101/20113024IOVW4Zg2ZO.png
我覺得之前學過的東西...好像有回來了XDDD

https://ithelp.ithome.com.tw/upload/images/20181103/20113024MkjX6AcoPD.png
畫這樣應該有80幾分了吧XDDD

0
youhongkuo
iT邦新手 5 級 ‧ 2018-10-31 19:06:17

另外,
我的程式是多線程的程式,
主線和子線的溝通管道有兩種:
1.變數數量隨著線程數量增加而增加的,
利用創建、瀏覽、刪除資料夾來溝通的,
我該如何畫這一個部分呢?
2.不會隨著線程數量增加的,
宣告多個單一區域變數,
這一部分又應該怎樣畫呢?

我在別的地方有看到流程圖的符號有桶子狀的,
我是不是該把跨線程的變數畫在桶子裡面呢?

0
youhongkuo
iT邦新手 5 級 ‧ 2018-11-01 06:41:54

還有一個問題,
Select Case也是要和If Than用一樣的圖形嗎?
我的問題好像很多@@a....

我要留言

立即登入留言