流程图节点以任何顺序允许?

时间:2019-02-04 17:16:58

标签: flowchart

我正在编写流程说明。步骤C,D和E必须在步骤B和步骤F之间完成,但是它们可以按任何顺序完成。在流程图中显示出来的最好方法是什么?

我希望有一个相关的问题:如果可以在步骤F和步骤K之间的任意位置执行 步骤X,我该如何在流程图中表示这一点?

1 个答案:

答案 0 :(得分:0)

  

我正在编写流程说明。步骤C,D和E必须在步骤B和步骤F之间完成,但是它们可以按任何顺序完成。在流程图中显示出来的最好方法是什么?

最佳方法由您决定。有种不同的方式,有些更容易编程,另一些更容易解释。而且,尽管您只询问流程;在编程计算机和指导他人之间至少有 some 相似之处。

第一张图显示了可以采用的各种路线。这些路由是使用类似状态图的形式呈现的,而无需注意转换的上下文。所需的上下文是 next ;也就是说,我做了这个-接下来是什么。。有六个组合,每个组合有四个路径,以涵盖所有可能性。

State Machine Diagram

尽管我在下面使用了简单的 process 符号;如果使用(或可以使用)单独的流程图对其进行绘制,则任何人都可能需要预定义的过程符号。

第二张图有两个实现选择。 (使用C伪代码进行解释。)

Flowchart

使用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语句,

Flowchart

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语句表示所需的模式,

Flowchart

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,我该如何在流程图中表示这一点?

enter image description here

{
    f();
    if (condition) x();
    g();
    if (condition) x();
    h();
    if (condition) x();
    i();
    if (condition) x();
    j();
    if (condition) x();
    k();
}