Узлы блок-схемы разрешены в любом порядке? - PullRequest
0 голосов
/ 04 февраля 2019

Я пишу инструкции для процесса.Шаги C, D и E должны быть выполнены между шагами B и F, но они могут быть выполнены в любом порядке.Как лучше всего показать это на блок-схеме?

В чем, я надеюсь, есть связанный вопрос: если Шаг X можно выполнить в любой точке между Шагом F и Шагом K, как быЯ обозначаю это на блок-схеме?

1 Ответ

0 голосов
/ 03 апреля 2019

Я пишу инструкции для процесса.Шаги C, D и E должны быть выполнены между шагами B и F, но они могут быть выполнены в любом порядке.Какой лучший способ показать это на блок-схеме?

Лучший способ зависит от вас.Есть разных способов , некоторые из них легче программировать, другие легче объяснить.И, пока вы спрашиваете только о процессе;по крайней мере, некоторое сходство между программированием компьютера и инструктажем других.

На первой диаграмме показаны различные маршруты, которые могут быть приняты.Эти маршруты представлены с использованием чего-то вроде диаграммы состояний, без учета контекста переходов.Необходимый контекст: next ; Я сделал это - что дальше .. Есть шесть комбинаций, каждая из которых имеет четыре пути, чтобы охватить все возможности.

State Machine Diagram

Хотя я использовал простой процесс символов в следующем;любой может нуждаться в символе предопределенного процесса , если они (или могут быть) представлены в виде отдельной блок-схемы.

Вторая диаграмма имеет два варианта реализации.(Использование C psuedocode для объяснения.)

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();
}

Я надеюсь, что это связанный вопрос: если Шаг X можно выполнить в любой точке между Шагом F и Шагом K,как бы я обозначил это на блок-схеме?

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();
}
...