版权归原作者所有,如有侵权,请联系我们

[科普中国]-算法逻辑图

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

符号

美国国家标准化协会ANSI曾规定了一些常用的逻辑图符号,为世界各国程序工作者普遍采用。最常用的逻辑图符号见图。1

处理框(矩形框),表示一般的处理功能。

判断框(菱形框),表示对一个给定的条件进行判断,根据给定的条件是否成立决定如何执行其后的操作。它有一个入口,二个出口。输入输出框(平行四边形框)。

起止框(圆弧形框),表示流程开始或结束。

连接点(圆圈),用于将画在不同地方的流程线连接起来。用连接点,可以避免流程

线的交叉或过长,使逻辑图清晰。

流程线(指向线),表示流程的路径和方向。

注释框,是为了对逻辑图中某些框的操作做必要的补充说明,以帮助阅读逻辑图的人更好地理解逻辑图的作用。它不是逻辑图中必要的部分,不反映流程和操作。

程序框图表示程序内各步骤的内容以及它们的关系和执行的顺序。它说明了程序的逻辑结构。框图应该足够详细,以便可以按照它顺利地写出程序,而不必在编写时临时构思,甚至出现逻辑错误。逻辑图不仅可以指导编写程序,而且可以在调试程序中用来检查程序的正确性。如果框图是正确的而结果不对,则按照框图逐步检查程序是很容易发现其错误的。逻辑图还能作为程序说明书的一部分提供给别人,以便帮助别人理解你编写程序的思路和结构。

基本结构传统的逻辑图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以毫不受限制地使流程随意地转来转去,使逻辑图变得毫无规律,阅读者要花很大精力去追踪流程,使人难以理解算法的逻辑。如果我们写出的算法能限制流程的无规律任意转向,而像一本书那样,由各章各节顺序组成,那样,阅读起来就很方便,不会有任何困难,只需从头到尾顺序地看下去即可。

为了提高算法的质量,使算法的设计和阅读方便,必须限制箭头的滥用,即不允许无规律地使流程乱转向,只能按顺序地进行下去。但是,算法上难免会包含一些分支和循环,而不可能全部由一个一个框顺序组成。如上例不是由各框顺序进行的,包含一些流程的向前或向后的非顺序转移。为了解决这个问题,人们设想,如果规定出几种基本结构,然后由这些基本结构按一定规律组成一个算法结构,整个算法的结构是由上而下地将各个基本结构顺序排列起来的。1966年,Bohra和Jacoplni提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元。

顺序结构顺序结构:如图所示的虚线框内,A和B两个框是顺序执行的。顺序结构是最简单的一种基本结构。

选择结构选择结构:如图所示的虚线框中包含一个判断框。

根据给定的条件p是否成立而选择执行A和B。p条件可以是“x>0”或“x>y”等。注意,无论p条件是否成立,只能执行A或B之一,不可能既执行A又执行B。无论走哪一条路径,在执行完A或B之后将脱离选择结构。A或B两个框中可以有一个是空的,即不执行任何操作。

循环结构循环结构:又称重复结构,即反复执行某一部分的操作。有两类循环结构:1

当型(While):当给定的条件p成立时,执行A框操作,然后再判断p条件是否成立。如果仍然成立,再执行A框,如此反复直到p条件不成立为止。此时不执行A框而脱离循环结构。

直到型(Until):先执行A框,然后判断给定的p条件是否成立。如果p条件不成立,则再执行A,然后再对p条件作判断。如此反复直到给定的p条件成立为止。此时脱离本循环结构。

注意两种循环结构的异同:两种循环结构都能处理需要重复执行的操作;当型循环是“先判断(条件是否成立),后执行(A框)”。而直到型循环则是“先执行(A框),后判断(条件)”;当型循环是当给定条件成立满足时执行A框,而直到型循环则是在给定条件不成立时执行A框。

同一个问题既可以用当型循环来处理,也可以用直到型循环来处理。对同一个问题,如分别用当型循环结构和直到型循环结构来处理的话,则两者结构中的判断框内的判断条件恰为互逆条件。

结构逻辑图1973年美国学者提出了一种新的逻辑图形式。在这种逻辑图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内。在该框内还可以包含其它的从属于它的框,即可由一些基本的框组成一个大的框。这种适于结构化程序设计的逻辑图称N-S结构化逻辑图,它用以下的逻辑图符号:1

1、顺序结构:A和B两个框组成一个顺序结构。

2、选择结构:当p条件成立时执行A操作,p不成立则执行B操作结构。

3、循环结构:当型循环结构下,图符表示先判断后执行,当p条件成立时反复执行A操作,直到p条件不成立为止。

用以上三种N-S逻辑图中的基本框.可以组成复杂的N-S逻辑图,以表示算法。

例:将判别素数的算法用N-S逻辑图表示。

上面的非结构化逻辑图不是由三种基本结构组成的:图中间的循环部分有两个出口,不符合基本结构的特点。由于不能直接分解为三种基本结构,应当先作必要的变换再用N-S逻辑图的三种基本结构的符号来表示。即将第一个菱形框的两个出口汇合在一点。其方法是设一个标志值K,它的初始状态为0(表示N为素数),当K≠0时为非素数。注意当型和直到型的判断条件。

N-S图表示算法的优点是:比传统逻辑图紧凑易画,尤其是它废除了流程线。整个算法结构是由各个基本结构按顺序组成的,其上下顺序就是执行时的顺序。写算法和看算法只需从上到下进行就可以了,十分方便。归纳起来,一个结构化的算法是由一些基本结构顺序组成的;在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转);一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。

转换逻辑图到类c语言的实时转换过程如下:

逻辑图结构由封装为Icon形式的功能模块和表示不同分支属性的连线组成,每个功能模块表示一条语句,而直线和折线表示逻辑关系。不同的语句以功能模块名称加以区别,而连线则以颜色和方向加以区别.定义主逻辑采用垂直方向的连线表示,而分支逻辑(循环、条件判断等)采用水平方向的连线表示.通过这种表示,逻辑图按垂直和水平方向展开成树型结构。功能模块是树的节点,逻辑关系是这一树型结构的连线。对不同执行模块的函数封装,定义一套库函数,对不同流程控制模块封装类c语言代码,这些语句可以控制各个执行模块的执行流程,执行模块参照封装的库函数,而流程控制模块参照封装的语句翻译为不同的类c语言代码。

具体的转换方法:在功能模块中定义模块的类别、属性参数等;由某个模块或多个模块组成的逻辑图程序是存储在一个模块集合或称为一个模块树中,当用户添加、删除、移动或修改功能模块时会实时根据各个模块间的父子关系遍历模块树,并参照功能模块封装的库函数或语句转换为对应的类C语言代码,体现转换的实时性;生成的类c语言代码自动添加注释,方便用户对类c语言代码的理解。1