首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流程图-一种绘制GOTOs的方法?

流程图-一种绘制GOTOs的方法?
EN

Stack Overflow用户
提问于 2014-09-29 09:52:09
回答 2查看 3.3K关注 0票数 1

后台:我继承了一个概念证明项目,它为用户提供了一个绘图画布来构建流程图。然后,它尝试从流程图中生成一些过程代码。

我非常怀疑这是否真的会成功,部分原因是因为有那么多的bug,但从根本上说是因为.

问题:流程图不只是绘制GOTOs的一种方式吗?因此,从流程图中生成结构良好的过程代码不一定很困难吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-30 03:01:10

这是我自己的答案,我不会接受(至少几个星期),因为我真的想要别人的意见。

使用流程图表示的算法更类似于使用goto编写的代码,而不是结构化语言(如C#、Pascal或Java )。

流程图连接器有时可以表示代码中的语句序列。在其他时候,它可以表示结构化结构的一部分,如īfwhile等。但由于这些原因,它更一般地代表了goto

  1. 连接器的功能只是将控制从一条语句传输到另一条语句。这正是goto所做的。
  2. 连接器的目标可以是页面上的任何节点。类似地,goto可以针对作用域中的任何语句。

流程图和代码与goto之间的这种更紧密的相似性可以通过比较小更改的效果来说明。让我们看一下流程图的两个版本,看看如何在结构化代码和使用goto的代码中表示它们。

流程图的两个版本之间唯一的区别在于“注册投票?没有”连接器的目标。

下面是作为结构化代码的A版本:

代码语言:javascript
复制
REM Version A
decide who to vote for
IF registered to vote THEN
    vote
END IF

要获得版本B,必须对版本A的结构化代码进行大量重构:

代码语言:javascript
复制
REM Version B
DO
    decide who to vote for
UNTIL registered to vote
vote

下面是带有goto的A版代码

代码语言:javascript
复制
REM Version A
decide who to vote for
IF registered to vote THEN GOTO VOTE
GOTO FINISH
VOTE:
vote
FINISH:

使用gotos的代码的B版本非常类似:

代码语言:javascript
复制
REM Version B
DECIDE:
decide who to vote for
IF registered to vote THEN GOTO VOTE
GOTO DECIDE
VOTE:
vote
FINISH:

使用goto对代码的更改类似于流程图中所做的更改:更改连接器的目标,更改goto目标。相比之下,结构化代码中所需的更改与流程图中所做的更改没有任何相似之处:如果条件为真,则版本A执行某些操作,而B版本在条件为真之前执行其他操作。

因此,流程图用goto的代码表示得更紧密,流程图组件和goto代码组件之间的对应关系更密切。流程图连接器直接对应于代码中的goto

结论

通过对流程图进行小的修改,可以显着地改变算法的意图。因此,您可能会说,虽然流程图可以表示算法的机制,但它并不能很好地表示意图。

这是因为流程图连接器的目的是表示低层次的方法,而不是算法试图实现的目标。相比之下,结构化代码(如ifwhile等)中的构造更多地是关于什么的。

因此,要回答这个问题:是的,绘制流程图连接器是表示gotos的一种方法。

脚注

正如策划人对这个问题所评论的那样,在我们都用Java、C#等语言编写的结构良好的代码背后,至少在机器代码级别上是有C#的。但这只是故事的一部分。在结构化代码中,低级别goto总是以一种谨慎控制的方式使用,并且经常与其他人工物品(例如标签)一起使用,而这些标签在高级代码中是看不到的。

票数 0
EN

Stack Overflow用户

发布于 2019-02-18 04:23:43

我为青少年写了一本程序指南,我认为goto很容易解释程序的流程,所以我用goto替换while/if/ for .

当我绘制流程图时,我用一个带有标签的圆圈来描述它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26097082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档