偽·從零開始學(xué)算法 - 1.3 流程圖

簡介

流程圖是描述算法的工具之一。人教版高中數(shù)學(xué)課本上稱其為“程序框圖”。它是一種用規(guī)定的圖形、指向線及文字說明來準(zhǔn)確、直觀地表示算法的圖形。

目前最常用的流程圖的符號由美國國家標(biāo)準(zhǔn)學(xué)會(American National Standards Institute, ANSI)于20世紀(jì)60年代規(guī)范標(biāo)準(zhǔn),1970年,國際標(biāo)準(zhǔn)化組織(International Organization for Standardization, ISO)采納了ANSI制定的符號。目前的標(biāo)準(zhǔn)于1985年修改。

流程圖的基本符號

如果不包括流程線,有四大最基本的符號:

終端框(起止框):符號為膠囊狀矩形。表示一個算法的開始或結(jié)束。上面的文字一般只是“開始”或“結(jié)束”,也可以是觸發(fā)算法開始的操作或者是提交、傳值等將值傳給下一個算法的操作。

終端框

輸入、輸出框:符號為平行四邊形。表示一個算法輸入和輸出的信息。一般來說文字的開頭要注明“輸入”或“輸出”。

輸入、輸出框

處理框(執(zhí)行框):符號為矩形。表示一個賦值、計算等操作。文字注明具體操作。

處理框

判斷框:符號為菱形。表示判斷某條件是否成立。一般來說,它有兩個分支,條件成立與否之后的流程在分支線處標(biāo)明“是”“否”或“Y”“N”。對于不是判斷某條件是否成立,而是判斷某個表達(dá)式的值的情況(如C、Javascript的switch語句),目前沒有規(guī)定的畫法。我一般的做法是在分支處標(biāo)明值。

判斷框

流程線(指向線):流程圖各符號之間以有向單向線連接。線一般要求橫平豎直,可以有若干個90°的轉(zhuǎn)彎。流程線盡量不要交叉,當(dāng)兩條流程線不得已而交叉時,將其中一條流程線的交叉處用圓弧隔開。標(biāo)準(zhǔn)規(guī)定,如果不是從上到下、從左到右,流程線的箭頭是必需的。但是,一般來說,在任何情況下都要畫出流程線的箭頭。

流程線

此外還有一些不太常用的符號:

連接點/連接符/頁面內(nèi)引用:符號為圓形。用于將流程圖中的各個元素連接起來,可以在流程圖過于復(fù)雜、流程線過長或可能會發(fā)生混淆的情況下使用。

連接點

具體操作是:流程圖分裂開來,分裂時通常從流程圖的某一條流程線處分開,并在此流程線處標(biāo)注分裂號,同時在另一流程圖的入口位置標(biāo)注同樣的分裂號,以表示兩個流程圖在此標(biāo)號處連接。如圖:

連接點用例

跨頁引用/頁面外引用:符號為上面為方的五邊形。當(dāng)流程圖太長以至于需要斷開成多頁,可以在前頁的結(jié)尾和后頁的開頭插入。我沒找到它的詳細(xì)用法,可能和連接點的用法相似。事實上也有人使用連接點執(zhí)行上述職能。

跨頁引用
跨頁引用用例

注釋:如圖所示,為塊做注釋。

注釋,從一處理框引出

子流程/子程序/預(yù)定義流程:符號為左右各有一條豎線的矩形。這種符號一般用于比較龐大的工程中,用以分割基本功能。

子流程

此外還有一些極少用的符號,這里就不再贅述。一般來說,了解上面的符號,95%以上的流程圖就能夠掌握了。

流程圖的畫法

一般來說,流程圖是從上到下、從左到右畫的。豎版和橫版都可以,但豎版更為常見。

為了美觀大方,更能體現(xiàn)流程,流程圖應(yīng)該條理層次清晰,各塊不重疊、大小和間距盡量相同。流程線盡量不交叉,橫平豎直。

其實,在上面的“連接點用例”中,我們已經(jīng)看到了一個流程圖的例子。即使我沒有教后面的內(nèi)容,我想你們也能夠比較清楚它的執(zhí)行過程了吧(sqrt(x)是x的算術(shù)平方根,*是乘號,/是除號)。

一般來說,如果在紙上畫流程圖,最好事先打草稿,以免構(gòu)圖時遇到困擾。在電腦上畫流程圖有(但不限于)以下軟件或網(wǎng)站:

  • Microsoft Visio(Windows,流程圖只是其功能之一)
  • OmniGraffle(macOS)
  • yEd(跨平臺)
  • Inkscape(跨平臺,流程圖只是其功能之一)
  • ProcessOn(網(wǎng)站)

我用過Visio和ProcessOn,感覺還行。

Visio
ProcessOn

此外,一些使用Markdown的平臺(如Typora)有基于flowchart.js、mermaid的流程圖引擎,可以通過特定的語法生成流程圖。

我在這里以flowchart為例:

st=>start: 開始
e=>end: 結(jié)束
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生成結(jié)果

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,171評論 1 180
  • 我在寫1.1節(jié)的時候本來是要寫這個的,但是突然就忘了……就作為一節(jié)來寫吧。 順便說一下,1946年的今天,世界上第...
    阿啊阿吖丁閱讀 3,435評論 1 0
  • 最近,相信大家都被『23歲大學(xué)生李文星命喪傳銷組織』的消息給刷屏,正值花樣年華,不禁讓人惋惜。 截至目前涉案人員已...
    王姑釀閱讀 832評論 0 1
  • 抑郁,,,,昨晚的10.35分就寢,早晨我的5.40分呢,,鬧鐘5.28響關(guān)掉繼續(xù)睡,然而一覺睡到6.10,呀從睡...
    如風(fēng)一般的女子閱讀 145評論 0 1
  • 最近沿海地帶的寒潮開始來襲,以此小詩解心愁! 雨落如酥潤萋草, 沿海入春三月惱。 奈何春燕何其少? 疑恐潮襲潮遁巢!
    蕭慕雨閱讀 652評論 11 11

友情鏈接更多精彩內(nèi)容