簡介
流程圖是描述演算法的工具之一。人教版高中數學課本上稱其為「程序框圖」。它是一種用規定的圖形、指向線及文字說明來準確、直觀地表示演算法的圖形。
目前最常用的流程圖的符號由美國國家標準學會(A merican N ational S tandards I nstitute, ANSI)於20世紀60年代規範標準,1970年,國際標準化組織(International Organization for Standardization, ISO)採納了ANSI制定的符號。目前的標準於1985年修改。
流程圖的基本符號
如果不包括流程線,有四大最基本的符號:
終端框(起止框) :符號為膠囊狀矩形。表示一個演算法的開始或結束。上面的文字一般只是「開始」或「結束」,也可以是觸發演算法開始的操作或者是提交、傳值等將值傳給下一個演算法的操作。
終端框
輸入、輸出框 :符號為平行四邊形。表示一個演算法輸入和輸出的信息。一般來說文字的開頭要註明「輸入」或「輸出」。
輸入、輸出框 處理框(執行框) :符號為矩形。表示一個賦值、計算等操作。文字註明具體操作。
處理框 判斷框 :符號為菱形。表示判斷某條件是否成立。一般來說,它有兩個分支,條件成立與否之後的流程在分支線處標明「是」「否」或「Y」「N」。對於不是判斷某條件是否成立,而是判斷某個表達式的值的情況(如C、Javascript的switch
語句),目前沒有規定的畫法。我一般的做法是在分支處標明值。
判斷框 流程線(指向線) :流程圖各符號之間以有向單向線連接。線一般要求橫平豎直,可以有若干個90°的轉彎。流程線盡量不要交叉,當兩條流程線不得已 而交叉時,將其中一條流程線的交叉處用圓弧隔開。標準規定,如果不是從上到下、從左到右,流程線的箭頭是必需的。但是,一般來說,在任何情況下都要畫出流程線的箭頭。
流程線 此外還有一些不太常用的符號:
連接點/連接符/頁面內引用 :符號為圓形。用於將流程圖中的各個元素連接起來,可以在流程圖過於複雜、流程線過長或可能會發生混淆的情況下使用。
連接點 具體操作是:流程圖分裂開來,分裂時通常從流程圖的某一條流程線處分開,並在此流程線處標註分裂號,同時在另一流程圖的入口位置標註同樣的分裂號,以表示兩個流程圖在此標號處連接。如圖:
連接點用例 跨頁引用/頁面外引用 :符號為上面為方的五邊形。當流程圖太長以至於需要斷開成多頁,可以在前頁的結尾和後頁的開頭插入。我沒找到它的詳細用法,可能和連接點的用法相似。事實上也有人使用連接點執行上述職能。
跨頁引用
跨頁引用用例 注釋 :如圖所示,為塊做注釋。
注釋
子流程/子程序/預定義流程 :符號為左右各有一條豎線的矩形。這種符號一般用於比較龐大的工程中,用以分割基本功能。
子流程 此外還有一些極少用的符號,這裡就不再贅述。一般來說,瞭解上面的符號,95%以上的流程圖就能夠掌握了。
流程圖的畫法
一般來說,流程圖是從上到下、從左到右畫的。豎版和橫版都可以,但豎版更為常見。
為了美觀大方,更能體現流程,流程圖應該條理層次清晰,各塊不重疊、大小和間距盡量相同。流程線盡量不交叉,橫平豎直。
其實,在上面的「連接點用例」中,我們已經看到了一個流程圖的例子。即使我沒有教後面的內容,我想你們也能夠比較清楚它的執行過程了吧(sqrt(x)是x的算術平方根,*是乘號,/是除號)。
一般來說,如果在紙上畫流程圖,最好事先打草稿,以免構圖時遇到困擾。在電腦上畫流程圖有(但不限於)以下軟體或網站:
Microsoft Visio(Windows,流程圖只是其功能之一)
OmniGraffle(macOS)
yEd(跨平臺)
Inkscape(跨平臺,流程圖只是其功能之一)
ProcessOn(網站)
我用過Visio和ProcessOn,感覺還行。
Visio
ProcessOn
此外,一些使用Markdown的平臺(如Typora)有基於flowchart.js、mermaid的流程圖引擎,可以通過特定的語法生成流程圖。
我在這裡以flowchart為例:
st=>start: 開始
e=>end: 結束
input=>inputoutput: 輸入a、b
output=>inputoutput: 輸出max
cond1=>condition: a ≥ b?
op1=>operation: max = a
op2=>operation: max = b
st->input->cond1
cond1(yes)->op1->output
cond1(no)->op2->output
output->e
flowchart.js生成結果
參考資料
推薦閱讀:
Please enable JavaScript to view the comments powered by Disqus.