Διαγράμματα ροής: 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 › στόχος ?"}
%% 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 ‹ στόχος ?"}
%% 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;
Κύριες δομές προγραμματισμού¶
Τα παρακάτω παραδείγματα παρουσιάζουν χωριστά τις συνηθέστερες δομές ελέγχου, ώστε να συγκρίνεται γρήγορα η απόδοσή τους σε 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 › 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
Βρόχος: Για … από … μέχρι …¶
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
Βρόχος: Για … από … μέχρι … με βήμα …¶
Για 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
Βρόχος: Για … Σε …¶
Για 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
Βρόχος: Όσο …¶
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 ‹ 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
Βρόχος: Επανάλαβε … φορές¶
Επαναλαμβάνω 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
Βρόχος: Επανάλαβε … Μέχρι …¶
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 ›= 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