Skip to content

Блок-схеми: Mermaid і Graphviz

Перетворює той самий псевдокод на блок-схему Mermaid або Graphviz. Обидва рушії використовують однакову семантику; Graphviz надає перевагу детермінованій геометрії.

Наведені нижче схеми відтворюються MkDocs безпосередньо з джерел Mermaid і Graphviz; наближені статичні зображення не використовуються.

Повний приклад: гра «Вгадай число»

Спочатку зчитується n як верхня межа. Програма випадково вибирає ціль від 1 до n, а потім просить спроби m. Після вгадування Перервати завершує цикл.

Читати n
ціль = випадковеМіж(1, n)
m = ціль + 1
Поки m не дорівнює ціль:
    Читати m
    Якщо m > ціль Тоді:
        Виводити "Завелике!"
    Інакше Якщо m < ціль Тоді:
        Виводити "Замале!"
    Інакше:
        Виводити "Перемога!"
        Перервати
    Кінець
Кінець
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3[/"Читати n"/]
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    n4["ціль = випадковеМіж(1, n)"]
    %% pseudocode-edge e1 n3 n4 normal
    n3 e1@--> n4
    %% pseudocode-sequence e1 n3 n4
    n5["m = ціль + 1"]
    %% pseudocode-edge e2 n4 n5 normal
    n4 e2@--> n5
    %% pseudocode-sequence e2 n4 n5
    n6{"Поки m не дорівнює ціль ?"}
    %% pseudocode-edge e3 n5 n6 normal
    n5 e3@--> n6
    %% pseudocode-sequence e3 n5 n6
    subgraph loop1_body[" "]
        direction TB
    n7[/"Читати m"/]
    n8{"m #62; ціль ?"}
    %% pseudocode-edge e4 n7 n8 normal
    n7 e4@--> n8
    %% pseudocode-sequence e4 n7 n8
    n9[/"Виводити 'Завелике!'"/]
    %% pseudocode-edge e5 n8 n9 branch
    n8 e5@-->|"Так"| n9
    n10{"m #60; ціль ?"}
    %% pseudocode-edge e6 n8 n10 branch
    n8 e6@-->|"Ні"| n10
    n11[/"Виводити 'Замале!'"/]
    %% pseudocode-edge e7 n10 n11 branch
    n10 e7@-->|"Так"| n11
    n12[/"Виводити 'Перемога!'"/]
    %% pseudocode-edge e8 n10 n12 branch
    n10 e8@-->|"Ні"| n12
    n13["Перервати"]
    %% pseudocode-edge e9 n12 n13 normal
    n12 e9@--> n13
    %% pseudocode-sequence e9 n12 n13
    n14((" ")):::pseudocodeGhost
    %% pseudocode-edge e10 n9 n14 normal
    n9 e10@--- n14
    %% pseudocode-sequence e10 n9 n14
    %% pseudocode-edge e11 n11 n14 normal
    n11 e11@--- n14
    %% pseudocode-sequence e11 n11 n14
    end
    style loop1_body fill:none,stroke:none
    %% pseudocode-edge e12 n6 n7 branch
    n6 e12@-->|"Так"| n7
    %% pseudocode-loop-continue e12 n6 n7
    %% pseudocode-edge e13 n14 n6 loop_back
    n14 e13@--> n6
    %% pseudocode-loop-back e13 n14 n6
    %% pseudocode-edge e14 n6 n2 branch
    n6 e14@-->|"Ні"| n2
    %% pseudocode-loop-exit e14 n6 n2
    %% pseudocode-edge e15 n13 n2 normal
    n13 e15@--> n2
    %% pseudocode-sequence e15 n13 n2
    classDef pseudocodeGhost fill:transparent,stroke:transparent,color:transparent;

pseudocoden1:s->n3:nn3:s->n4:nn4:s->n5:nn5:s->n6:nn6:s->n7:nТакn6:e->__exit_top_3:wНіn7:s->n8:nn8:s->n9:nТакn8:e->n10:nНіn9:s->n14:nn10:s->n11:nТакn10:e->n12:nНіn11:s->n14:nn12:s->n13:nn13:s->n2:nn14:w->__return_bottom_1:e__return_bottom_1:n->__return_top_2:s__return_top_2:e->n6:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n2:en1Початокn2Кінецьn3Читати nn4ціль = випадковеМіж(1, n)n5m = ціль + 1n6Поки m не дорівнює ціль ?n7Читати mn8m > ціль ?n9Виводити "Завелике!"n10m < ціль ?n11Виводити "Замале!"n12Виводити "Перемога!"n13Перервати

Основні програмні конструкції

Наведені нижче приклади окремо показують найуживаніші керувальні конструкції, щоб швидко порівняти їхнє відображення в Mermaid і Graphviz.

Умова: Якщо … Тоді … Інакше …

x = 5
Якщо x > 0 Тоді:
    Виводити "додатне"
Інакше:
    Виводити "нуль або від’ємне"
Кінець
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3["x = 5"]
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    n4{"x #62; 0 ?"}
    %% pseudocode-edge e1 n3 n4 normal
    n3 e1@--> n4
    %% pseudocode-sequence e1 n3 n4
    n5[/"Виводити 'додатне'"/]
    %% pseudocode-edge e2 n4 n5 branch
    n4 e2@-->|"Так"| n5
    n6[/"Виводити 'нуль або від’ємне'"/]
    %% pseudocode-edge e3 n4 n6 branch
    n4 e3@-->|"Ні"| n6
    %% pseudocode-edge e4 n5 n2 normal
    n5 e4@--> n2
    %% pseudocode-sequence e4 n5 n2
    %% pseudocode-edge e5 n6 n2 normal
    n6 e5@--> n2
    %% pseudocode-sequence e5 n6 n2

pseudocoden1:s->n3:nn3:s->n4:nn4:s->n5:nТакn4:e->n6:nНіn5:s->n2:nn6:s->n2:nn1Початокn2Кінецьn3x = 5n4x > 0 ?n5Виводити "додатне"n6Виводити "нуль або від’ємне"

Цикл: Для … від … до …

total = 0
Для i від 1 до 5:
    total = total + i
Кінець
Виводити total
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3["total = 0"]
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    n4{"Для i від 1 до 5"}
    %% pseudocode-edge e1 n3 n4 normal
    n3 e1@--> n4
    %% pseudocode-sequence e1 n3 n4
    subgraph loop1_body[" "]
        direction TB
    n5["total = total + i"]
    end
    style loop1_body fill:none,stroke:none
    %% pseudocode-edge e2 n4 n5 branch
    n4 e2@-->|"Так"| n5
    %% pseudocode-loop-continue e2 n4 n5
    %% pseudocode-edge e3 n5 n4 loop_back
    n5 e3@-->|"(i = i + 1)"| n4
    %% pseudocode-loop-back e3 n5 n4
    n6[/"Виводити total"/]
    %% pseudocode-edge e4 n4 n6 branch
    n4 e4@-->|"Ні"| n6
    %% pseudocode-loop-exit e4 n4 n6
    %% pseudocode-edge e5 n6 n2 normal
    n6 e5@--> n2
    %% pseudocode-sequence e5 n6 n2

pseudocoden1:s->n3:nn3:s->n4:nn4:s->n5:nТакn4:e->__exit_top_3:wНіn5:w->__return_bottom_1:e(i = i + 1)n6:s->n2:n__return_bottom_1:n->__return_top_2:s__return_top_2:e->n4:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n6:en1Початокn2Кінецьn3total = 0n4Для i від 1 до 5n5total = total + in6Виводити total

Цикл: Для … від … до … з кроком …

Для i від 0 до 10 з кроком 2:
    Виводити i
Кінець
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3{"Для i від 0 до 10 з кроком 2"}
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    subgraph loop1_body[" "]
        direction TB
    n4[/"Виводити i"/]
    end
    style loop1_body fill:none,stroke:none
    %% pseudocode-edge e1 n3 n4 branch
    n3 e1@-->|"Так"| n4
    %% pseudocode-loop-continue e1 n3 n4
    %% pseudocode-edge e2 n4 n3 loop_back
    n4 e2@-->|"(i = i + 2)"| n3
    %% pseudocode-loop-back e2 n4 n3
    %% pseudocode-edge e3 n3 n2 branch
    n3 e3@-->|"Ні"| n2
    %% pseudocode-loop-exit e3 n3 n2

pseudocoden1:s->n3:nn3:s->n4:nТакn3:e->__exit_top_3:wНіn4:w->__return_bottom_1:e(i = i + 2)__return_bottom_1:n->__return_top_2:s__return_top_2:e->n3:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n2:en1Початокn2Кінецьn3Для i від 0 до 10 з кроком 2n4Виводити i

Цикл: Для … У …

Для c У "Привіт":
    Виводити c
Кінець
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3{"Для c У 'Привіт'"}
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    subgraph loop1_body[" "]
        direction TB
    n4[/"Виводити c"/]
    end
    style loop1_body fill:none,stroke:none
    %% pseudocode-edge e1 n3 n4 branch
    n3 e1@-->|"Так"| n4
    %% pseudocode-loop-continue e1 n3 n4
    %% pseudocode-edge e2 n4 n3 loop_back
    n4 e2@--> n3
    %% pseudocode-loop-back e2 n4 n3
    %% pseudocode-edge e3 n3 n2 branch
    n3 e3@-->|"Ні"| n2
    %% pseudocode-loop-exit e3 n3 n2

pseudocoden1:s->n3:nn3:s->n4:nТакn3:e->__exit_top_3:wНіn4:w->__return_bottom_1:e__return_bottom_1:n->__return_top_2:s__return_top_2:e->n3:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n2:en1Початокn2Кінецьn3Для c У "Привіт"n4Виводити c

Цикл: Поки …

i = 0
Поки i < 3:
    Виводити i
    i = i + 1
Кінець
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3["i = 0"]
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    n4{"Поки i #60; 3 ?"}
    %% pseudocode-edge e1 n3 n4 normal
    n3 e1@--> n4
    %% pseudocode-sequence e1 n3 n4
    subgraph loop1_body[" "]
        direction TB
    n5[/"Виводити i"/]
    n6["i = i + 1"]
    %% pseudocode-edge e2 n5 n6 normal
    n5 e2@--> n6
    %% pseudocode-sequence e2 n5 n6
    end
    style loop1_body fill:none,stroke:none
    %% pseudocode-edge e3 n4 n5 branch
    n4 e3@-->|"Так"| n5
    %% pseudocode-loop-continue e3 n4 n5
    %% pseudocode-edge e4 n6 n4 loop_back
    n6 e4@--> n4
    %% pseudocode-loop-back e4 n6 n4
    %% pseudocode-edge e5 n4 n2 branch
    n4 e5@-->|"Ні"| n2
    %% pseudocode-loop-exit e5 n4 n2

pseudocoden1:s->n3:nn3:s->n4:nn4:s->n5:nТакn4:e->__exit_top_3:wНіn5:s->n6:nn6:w->__return_bottom_1:e__return_bottom_1:n->__return_top_2:s__return_top_2:e->n4:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n2:en1Початокn2Кінецьn3i = 0n4Поки i < 3 ?n5Виводити in6i = i + 1

Цикл: Повтори … разів

Повторювати 3 разів:
    Виводити "Привіт"
Кінець
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3{"Повторювати 3 разів"}
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    subgraph loop1_body[" "]
        direction TB
    n4[/"Виводити 'Привіт'"/]
    end
    style loop1_body fill:none,stroke:none
    %% pseudocode-edge e1 n3 n4 branch
    n3 e1@-->|"Так"| n4
    %% pseudocode-loop-continue e1 n3 n4
    %% pseudocode-edge e2 n4 n3 loop_back
    n4 e2@--> n3
    %% pseudocode-loop-back e2 n4 n3
    %% pseudocode-edge e3 n3 n2 branch
    n3 e3@-->|"Ні"| n2
    %% pseudocode-loop-exit e3 n3 n2

pseudocoden1:s->n3:nn3:s->n4:nТакn3:e->__exit_top_3:wНіn4:w->__return_bottom_1:e__return_bottom_1:n->__return_top_2:s__return_top_2:e->n3:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n2:en1Початокn2Кінецьn3Повторювати 3 разівn4Виводити "Привіт"

Цикл: Повтори … ДокиНе …

i = 0
Повторювати:
    Виводити i
    i = i + 1
ДокиНе i >= 3
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":55,"rankSpacing":72,"htmlLabels":false},"layout":"elk","look":"classic","elk":{"preset":"modelOrder","nodePlacementStrategy":"LINEAR_SEGMENTS","nodePlacementAlignment":"NONE","layeringStrategy":"NETWORK_SIMPLEX","cycleBreakingStrategy":"MODEL_ORDER","considerModelOrder":"NODES_AND_EDGES","forceNodeModelOrder":true,"keepEntryNodeOnTop":true,"straightenEdges":true,"lineHops":false,"mergeEdges":false},"htmlLabels":false}}%%
%% pseudocode-layout-profile: validated-loop-attached-edges-v22
flowchart TD
    n1(["Початок"])
    n2(["Кінець"])
    n3["i = 0"]
    %% pseudocode-edge e0 n1 n3 normal
    n1 e0@--> n3
    %% pseudocode-sequence e0 n1 n3
    subgraph loop1[" "]
        direction TB
        subgraph loop1_body[" "]
            direction TB
    n4[/"Виводити i"/]
    n5["i = i + 1"]
    %% pseudocode-edge e1 n4 n5 normal
    n4 e1@--> n5
    %% pseudocode-sequence e1 n4 n5
        end
    style loop1_body fill:none,stroke:none
        subgraph loop1_condition[" "]
            direction TB
    n6{"i #62;= 3 ?"}
        end
    style loop1_condition fill:none,stroke:none
    %% pseudocode-edge e2 n5 n6 normal
    n5 e2@--> n6
    %% pseudocode-sequence e2 n5 n6
    end
    style loop1 fill:none,stroke:none
    %% pseudocode-edge e3 n3 n4 normal
    n3 e3@--> n4
    %% pseudocode-sequence e3 n3 n4
    %% pseudocode-edge e4 n6 n4 loop_back
    n6 e4@-->|"Ні"| n4
    %% pseudocode-loop-back e4 n6 n4
    %% pseudocode-edge e5 n6 n2 branch
    n6 e5@-->|"Так"| n2
    %% pseudocode-loop-exit e5 n6 n2

pseudocoden1:s->n3:nn3:s->n4:nn4:s->n5:nn5:s->n6:nn6:w->__return_bottom_1:eНіn6:e->__exit_top_3:wТак__return_bottom_1:n->__return_top_2:s__return_top_2:e->n4:w__exit_top_3:s->__exit_bottom_4:n__exit_bottom_4:w->n2:en1Початокn2Кінецьn3i = 0n4Виводити in5i = i + 1n6i >= 3 ?