admin 管理员组文章数量: 1184232
2024年4月26日发(作者:getrealpath的是target目录)
2010年12月 电 脑 学 习 第6期
将非结构化的流程图转化为结构化的
N—S流程图的通用算法框架
陈培军 王欣洁 李馨梅
摘 要:介绍了将非结构化流程图等价的转化为结构化的N-S流程图的通用算法框架。
关键词: 流程图:N—S流程图:非结构化流程图:等价变换
中图分类号:TP311 文献标识码: A 文章编号:1002-2422(2010)06-0103-02
A General Equivalent C:onversion Framework Form Unstructured Flowchart
to Structured N-S Flowchart
Chen Peijun Wang Xinjie Li Xinmei
Abstract:We design a general equivalent conversion framework for converting unstructured flowchart into structured N—S flow—
chart.
Kev w0rds:Flowchart;N—S Diagram;Unstructured Flowchart;Program Equivalence
1通用转换框架
(1)将每一步的具体的计算过程抽象、简化,并用不同
的编号表示不同的过程,简化的传统流程图如图1所示。
2(b)需要先通过重复书写语句的等价变换变成类似图2(a)
的样子。
有了上面的理解,从而一般的框架可抽象为:找出当前
顶点个数最小的圈,依次对圈中每个顶点的度进行判断。如
果只有一个顶点的度大于等于3,并且该顶点的度等于4,则
为图2中(a)中的情形;如果只有两个顶点的度大于等于3,
并且这两个顶点的度都等于3,进一步若该圈在原有向图
中,也是一个有向圈,则为图2中(b)的情形,否则为图2中
(c)的情形。重复上述过程直到没有圈可以简化。
(4)将流程图分成一系列顺序执行的子块。不包含在任
意圈中的顶点自身为一个子块。对于任意的两个圈,如果这
两个圈有一个相同的顶点,则这两个圈中包含的所有顶点属
于同一个子块:对于上述子块,若包含满足下面性质的项
点一所有指向该顶点的有向边所在的圈所包含的顶点与所
有从该顶点出发的有向边所在的圈所包含的顶点的交集只
有这个顶点,则可在该顶点处将该子块分成两个子块,该顶
点包含在后面的子块里。经过上述过程,可将流程图分成一
(C)
系列顺序执行的子块。该实例可以分为三个子块,A、E分别
为两个子块,其余的属于同一个子块。
(5)对每个包含多个圈的子块,通过逐分支遍历,动态
调整建立其N—S流程图。如果只有分支结构,即该子块中虽
然有圈,但没有有向圈,则总可以通过重复书写语句将其转
化为N—S流程图。如果最外层的条件为分支条件,则可以通
过重复书写语句得到该条件的每个分支,然后利用第(4)步
将每个分支分解为一系列顺序执行的子块。根据上面的分
析,设计以下抽象的算法:
图1简化的流程图
图2可进一步简化的
内容的示意图
(2)将流程图看成图论中的图。将流程图中的每个操
作,每个判断“是”,“否”均看成图的顶点,流向箭头看成有
向图中的有向边,则可将传统的流程图看成一个有向图。根
据需要,也可将其视为无向图,则循环结构中有圈、分支结构
或不同的出口最终汇总时,也会出现圈。
(3)将简单的循环结构或分支结构用一个编号表示,并
记录该编号的含义,从而进一步简化流程图。
如果流程图中出现图2中的三种情形,都可以简化。图
①如果该子块不包含圈,结束:否则,执行第②步。
②从子块的入口,顺着箭头的方向,逐分支遍历,找到第
一
2(a)和图2(c)中可用一个编号表示虚线框住的部分,对图
个条件,判断条件是否包含于任意一个有向圈中。如果不
收稿日期:2010一ll—O1
陈培军、王欣洁太原科技大学讲师(山西,太原030024)。
李馨梅东北农业大学理学院信息与计算科学专业2009级本科生(黑龙江,哈尔滨150030)。
包含于任何一个有向圈中,则采用重复书写语句的方法得到
(无条件执行条件C1的循环体)。结果见图5。
该条件的每一个分支,并将每一个分支分成一系列顺序执行
的子块,对每一个子块递归(转第①步);如果包含于一个有
算法框架中所有的其他操作,都是为了将流程图转换为
类似图1的情形,核心的问题就是处理类似上面的问题。通
过上面的分析,可以体会到如何决定遍历的顺序,如何决定
条件类型,以及如何逐分支将当前的结果融入已有的框架,
向圈中,则转第③步。
③将该条件作为当前子块的最外层的循环条件,和该条
件位于同一个有向圈中的其他条件均作为分支条件。按一定
的顺序遍历所有分支,通过动态调整,得到结构化的循环体
和退出循环后的操作,从而得到相应的N—S流程图。
I函 l亩
岫
(c)
中
(a)
(d) (e)
(b)
图3图1中所有的有向图
图3中的5个有向圈包含了子块所有的顶点,为全部可
能的遍历路径。从子块的入口,顺着箭头的方向,逐分支遍
历,找到第一个条件C1,且C1包含在有向圈内见图3(a)和
图3(b),选择将C1作为外层循环条件。由图1可以看出退
出循环后,在子块内,什么也不做;继续找出条件Cl不成立
时的循环体。从包含C1的最简单的有向圈图3(a),通过重
复书写语句得到图4(a),其中画问号的地方有待于进一步
完善,下面继续遍历其他的路径将其不断完善。
继续找包含条件C1的当前最简单的路径,对该实例还
只有一个有向圈见图3(b)包含C1,将该圈包含的内容融入
4(a),得到图4(b),其中两个画问号的分支需要确定
从剩下的路径中选择一个简单的见图3(c)。图3(c)
表示当条件C3不成立时,无条件执行循环;当c3成立时,
退出循环。引入辅助变量flagl,给其赋初值0,当flag1==0
时,执行循环;当flagl==l时,退出循环。当c3不成立时,不
修改flagl的值,从而继续执行循环;当c3成立时,修改
lfagl的值为l,从而退出循环。所以将图3(c)进一步融入已
有的N—S流程图,得到图4(c)。进一步融入图3(d)(该图
表示当C3成立时,C4不成立时,C5不成立时,无条件执行
操作H、C-),得图4(d)。
对最后的有向圈图3(e),表示当C2和C3成立,C4不
成立,C5成立,退出内层的循环,执行完操作J后,无条件进
入条件c1的循环体,对应图4(d)中画问号的部分的内容。
引入辅助变量na异2,赋初值0,修改外层循环的条件为“当
C1不成立或flag2==l”,为了使其他分支仍与原来等价,在
外层循环体内的开始部分,增加语句flag2=0;所以4(d)中
画问号部分的操作为J;flagl=l(跳出内层循环);flag2=l
修正得到与已有框架相容的新的框架,最终得到N-S流程图
的过程。上述过程还有待于进一步抽象、细化、完善。要解决
上下文的语义识别、逻辑关系的理解及其等价变形。
B
B
B
C C
C
D
D
D
当C1不成立时 当Cl不成立时 当Cl不成立
’
F
\ <
\ 2/1
\C
G
G
G
\【:3 K
lfazl=O K lfail:o
B
当flagl=O B
当flagl--0 K
C
、、C3 C \l: B
D
D
\c / C
D
t
D
lag=1ll
'l  ̄l-
(d)
图4不断修正得到N—S流程图的中间过程
A
B
C
上)
tlag2-0
当Cl小成立时或flag2=l
lfae2=O
F
——、 C2
G
flagl=0
当flagl=O
、
—\
C4/
N
3
K
I iy-'--- ̄s B
C I H C
D lfagl=l H G D
lfagl=l flag2=l G
E
图5最终的N—S流程图
(6)将各个层级的子块组装,将第(3)步中得到的各
个中间编号,根据相应的记录逐级展开还原,得到相应的N—
S流程图。对本例只有一个子块有圈,并且第一个条件即为
循环条件,且没有第(3)步中的简化,所以组装非常简单,最
终的结果如图5所示。
2结束语
结合具体的实例,给出了由非结构化的流程图转化为与
之等价的N—S流程图的宏观算法框架,仅是一种可行的方
法,可用于指导一般问题的转换。
参考文献
【1】邓德祥.结构化流程图的回顾与改进意见L玎.北京:北方工业大
学学报,1992,4(3):81—87.
【2]张广泉.非结构化程序流程图及其等价变换L乃.重庆:重庆师范
学院学报(自然科学版),1993,10(3):28—31.
【3】孙靖民,粱迎春.机械优化设计【M】(第4版).北京:机械工业出
版社,2o07:130-135.
版权声明:本文标题:将非结构化的流程图转化为结构化的N-S流程图的通用算法框架 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1714108570a666029.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论