我正在编写流程说明。步骤C,D和E必须在步骤B和步骤F之间完成,但是它们可以按任何顺序完成。在流程图中显示出来的最好方法是什么?
我希望有一个相关的问题:如果可以在步骤F和步骤K之间的任意位置执行 步骤X,我该如何在流程图中表示这一点?
答案 0 :(得分:0)
我正在编写流程说明。步骤C,D和E必须在步骤B和步骤F之间完成,但是它们可以按任何顺序完成。在流程图中显示出来的最好方法是什么?
最佳方法由您决定。有种不同的方式,有些更容易编程,另一些更容易解释。而且,尽管您只询问流程;在编程计算机和指导他人之间至少有 some 相似之处。
第一张图显示了可以采用的各种路线。这些路由是使用类似状态图的形式呈现的,而无需注意转换的上下文。所需的上下文是 next ;也就是说,我做了这个-接下来是什么。。有六个组合,每个组合有四个路径,以涵盖所有可能性。
尽管我在下面使用了简单的 process 符号;如果使用(或可以使用)单独的流程图对其进行绘制,则任何人都可能需要预定义的过程符号。
第二张图有两个实现选择。 (使用C伪代码进行解释。)
使用for
语句,
int next[3]; // next is prepared elsewhere,
// because each next[] value is unique there can be no repetition
{
b();
for (int i = 0; i < 3; i++)
{
case 1: c();
case 2: d();
case 3: e();
}
f();
}
或者,对于旧时状态机的人,使用goto
语句(请注意,goto
通常用于美国所得税形式的说明中,在其他情况下可能对其他人很有用。)
int next[4]; // next is prepared elsewhere, next[3] defaults to 4 or F
int i = 0;
{
b();
switch (next[i++])
{
case 1: goto C;
case 2: goto D;
case 3: goto E;
default: goto F;
}
C: c(); // do the C thing
switch (next[i++])
{
case 1: goto C;
case 2: goto D;
case 3: goto E;
default: goto F;
}
D: d(); // do the D thing
switch (next[i++])
{
case 1: goto C;
case 2: goto D;
case 3: goto E;
default: goto F;
}
E: e(); // do the E thing
switch (next[i++])
{
case 1: goto C;
case 2: goto D;
case 3: goto E;
default: goto F;
}
F: f();
}
第三张图使用嵌套的if
语句,
int next[3]; // next is prepared elsewhere, next[3] is not used
{
b();
if (next[0] == 1)
{
c();
if (next[1] == 2)
{
d();
e();
}
else
{
e();
d();
}
}
else if (next[0]) == 2)
{
d();
if (next[1] == 1)
{
c();
e();
}
else
{
e();
c();
}
}
else if (next[0] == 3)
{
e();
if (next[1] == 1)
{
c();
d();
}
else
{
d();
c();
}
}
f();
}
第四张图使用switch
语句表示所需的模式,
int pattern; // prepared elsewhere, values 1 through 6
{
b();
switch (pattern)
{
case 1:
{
c();
d();
e();
}
case 2:
{
c();
e();
d();
}
case 3:
{
d();
c();
e();
}
case 4:
{
d();
e();
c();
}
case 5:
{
e();
c();
d();
}
case 6:
{
e();
d();
c();
}
}
f();
}
我希望有一个相关的问题:如果可以在步骤F和步骤K之间的任何时候执行步骤X,我该如何在流程图中表示这一点?
{
f();
if (condition) x();
g();
if (condition) x();
h();
if (condition) x();
i();
if (condition) x();
j();
if (condition) x();
k();
}