Я пишу инструкции для процесса.Шаги C, D и E должны быть выполнены между шагами B и F, но они могут быть выполнены в любом порядке.Какой лучший способ показать это на блок-схеме?
Лучший способ зависит от вас.Есть разных способов , некоторые из них легче программировать, другие легче объяснить.И, пока вы спрашиваете только о процессе;по крайней мере, некоторое сходство между программированием компьютера и инструктажем других.
На первой диаграмме показаны различные маршруты, которые могут быть приняты.Эти маршруты представлены с использованием чего-то вроде диаграммы состояний, без учета контекста переходов.Необходимый контекст: next ; Я сделал это - что дальше .. Есть шесть комбинаций, каждая из которых имеет четыре пути, чтобы охватить все возможности.
Хотя я использовал простой процесс символов в следующем;любой может нуждаться в символе предопределенного процесса , если они (или могут быть) представлены в виде отдельной блок-схемы.
Вторая диаграмма имеет два варианта реализации.(Использование C psuedocode для объяснения.)
Использование оператора 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();
}
Я надеюсь, что это связанный вопрос: если Шаг X можно выполнить в любой точке между Шагом F и Шагом K,как бы я обозначил это на блок-схеме?
{
f();
if (condition) x();
g();
if (condition) x();
h();
if (condition) x();
i();
if (condition) x();
j();
if (condition) x();
k();
}