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 ?