如何将流程图转换为实现?

如何将流程图转换为实现?,第1张

如何将流程图转换为实现?

引用OP: 最好且非常有希望的是,我正在寻找一种算法方法来实现任何算法

好吧,最明显的答案是用目标语言为算法的每个步骤定义一个标签,在该标签上为每个步骤编写代码,并按照算法所描述的完全插入GOTO语句。这将为您提供一个工作程序,大多数人将其称为“意大利面条代码”。

OP进行了冗长的介绍,暗示他(或者可能是Tom)宁愿以令人信服的匹配算法的方式编写无goto版本。

好的,所以好消息是Bohm和Jocopini早就表明,您可以仅使用
sequence 的三个基本控制流 *** 作, if-then-elsewhile循环 来实现任何计算,并且具有单项输入的好特性。
,一次退出。因此,我们知道有一个“结构化程序”实现。

不好的消息是它们的构造性证明(从gotoful
/流程图的版本构建这样的程序的过程)引入了一组布尔变量和其他测试来控制循环。这些变量用于跳过循环迭代的其余部分,以强制退出循环,并告诉循环调用者循环已退出。对我来说,这些额外的代码使所生成的程序在读取时有些糟糕,即使您不反对管理这些变量所需的存储和执行时间。(请参阅Wikipedia链接以获取针对goto-
ful COBOL程序执行此 *** 作的算法)。

更好的消息是,S。Rao
Kosaraju证明,如果您可以摆脱任意嵌套深度的循环,则无需额外的控制变量即可构建此类程序。许多编程语言都提供了这种功能。C提供了一个脆弱的版本,其“
break
N”;从N个嵌套循环中跳出的语句(当有人在现有代码中插入一个额外的循环而没有注意到break语句时,使用此著名的AT&T崩溃的东海岸电话系统)。Ada和其他语言允许人们给循环加上标签,实际上是“
leave”以指定的标签名称离开循环。对我来说,这是一个不错的解决方案。[我更喜欢一种变体,其中有一个带有标签的开始-
结束块可以被“离开”。如果您的语言没有这样的标签离开结构, 每个循环之后,写“ goto”而不是请假。

因此,我们知道可以从干净的任意流程图/有信用的程序中构建结构化程序。

为此,有一种算法可以按照Sue Graham
1975年的论文《一种快速且通常为线性的全局流量分析算法》将原始流程图简化为结构化的子元素

该算法的本质是在可能的情况下,逐步将原始流程图逐步简化为Bohm / Jacopini原语(序列/ if-then-else /loop)构造,并减少“不可归约”构造(以流程图中的小结为例)
)看起来并不特殊。在每个步骤中,流程图的一部分都被简化为该部分的单个摘要节点。最终,此过程将任意复杂度的原始流程图简化为单个节点。此时,还原过程可以反向运行,每个摘要节点都可以扩展回原始节点。

出于OP的目的,摘要节点的扩展提供了以结构化方式为简化的子图表编写代码的机会。重复进行直到产生原始流程图,然后使整个程序以结构化的方式编写。

[今天就这些。让我们看看我是否可以产生一个算法。关注此空间]。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5040156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存