伪·从零开始学算法 - 1.3 流程图

简介

流程图是描述算法的工具之一。人教版高中数学课本上称其为“程序框图”。它是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形。

目前最常用的流程图的符号由美国国家标准学会(American National Standards Institute, ANSI)于20世纪60年代规范标准,1970年,国际标准化组织(International Organization for Standardization, ISO)采纳了ANSI制定的符号。目前的标准于1985年修改。

流程图的基本符号

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

终端框(起止框):符号为胶囊状矩形。表示一个算法的开始或结束。上面的文字一般只是“开始”或“结束”,也可以是触发算法开始的操作或者是提交、传值等将值传给下一个算法的操作。

终端框

输入、输出框:符号为平行四边形。表示一个算法输入和输出的信息。一般来说文字的开头要注明“输入”或“输出”。

输入、输出框

处理框(执行框):符号为矩形。表示一个赋值、计算等操作。文字注明具体操作。

处理框

判断框:符号为菱形。表示判断某条件是否成立。一般来说,它有两个分支,条件成立与否之后的流程在分支线处标明“是”“否”或“Y”“N”。对于不是判断某条件是否成立,而是判断某个表达式的值的情况(如C、Javascript的switch语句),目前没有规定的画法。我一般的做法是在分支处标明值。

判断框

流程线(指向线):流程图各符号之间以有向单向线连接。线一般要求横平竖直,可以有若干个90°的转弯。流程线尽量不要交叉,当两条流程线不得已而交叉时,将其中一条流程线的交叉处用圆弧隔开。标准规定,如果不是从上到下、从左到右,流程线的箭头是必需的。但是,一般来说,在任何情况下都要画出流程线的箭头。

流程线

此外还有一些不太常用的符号:

连接点/连接符/页面内引用:符号为圆形。用于将流程图中的各个元素连接起来,可以在流程图过于复杂、流程线过长或可能会发生混淆的情况下使用。

连接点

具体操作是:流程图分裂开来,分裂时通常从流程图的某一条流程线处分开,并在此流程线处标注分裂号,同时在另一流程图的入口位置标注同样的分裂号,以表示两个流程图在此标号处连接。如图:

伪·从零开始学算法 - 1.3 流程图_第1张图片
连接点用例

跨页引用/页面外引用:符号为上面为方的五边形。当流程图太长以至于需要断开成多页,可以在前页的结尾和后页的开头插入。我没找到它的详细用法,可能和连接点的用法相似。事实上也有人使用连接点执行上述职能。

跨页引用
伪·从零开始学算法 - 1.3 流程图_第2张图片
跨页引用用例

注释:如图所示,为块做注释。

注释,从一处理框引出

子流程/子程序/预定义流程:符号为左右各有一条竖线的矩形。这种符号一般用于比较庞大的工程中,用以分割基本功能。

子流程

此外还有一些极少用的符号,这里就不再赘述。一般来说,了解上面的符号,95%以上的流程图就能够掌握了。

流程图的画法

一般来说,流程图是从上到下、从左到右画的。竖版和横版都可以,但竖版更为常见。

为了美观大方,更能体现流程,流程图应该条理层次清晰,各块不重叠、大小和间距尽量相同。流程线尽量不交叉,横平竖直。

其实,在上面的“连接点用例”中,我们已经看到了一个流程图的例子。即使我没有教后面的内容,我想你们也能够比较清楚它的执行过程了吧(sqrt(x)是x的算术平方根,*是乘号,/是除号)。

一般来说,如果在纸上画流程图,最好事先打草稿,以免构图时遇到困扰。在电脑上画流程图有(但不限于)以下软件或网站:

  • Microsoft Visio(Windows,流程图只是其功能之一)
  • OmniGraffle(macOS)
  • yEd(跨平台)
  • Inkscape(跨平台,流程图只是其功能之一)
  • ProcessOn(网站)

我用过Visio和ProcessOn,感觉还行。

伪·从零开始学算法 - 1.3 流程图_第3张图片
Visio
伪·从零开始学算法 - 1.3 流程图_第4张图片
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
伪·从零开始学算法 - 1.3 流程图_第5张图片
flowchart.js生成结果

参考资料

  • Flowchart - Wikipedia
    https://en.wikipedia.org/wiki/Flowchart
  • 普通高中课程标准实验教科书(必修) 数学(A版) 必修3. 人民教育出版社
  • 5.2.2 使用流程图描述法 - 51CTO.COM
    http://book.51cto.com/art/201411/456514.htm
  • 继续在单独的页面上的流程图 - Visio
    https://support.office.com/zh-cn/article/%E7%BB%A7%E7%BB%AD%E5%9C%A8%E5%8D%95%E7%8B%AC%E7%9A%84%E9%A1%B5%E9%9D%A2%E4%B8%8A%E7%9A%84%E6%B5%81%E7%A8%8B%E5%9B%BE-6e21dd6a-06d0-4111-b3dc-8a2e8ec94fb9?ui=zh-CN&rs=zh-CN&ad=CN

你可能感兴趣的:(伪·从零开始学算法 - 1.3 流程图)