Vuokaaviot: Mermaid ja Graphviz¶
Muuntaa saman pseudokoodin Mermaid- tai Graphviz-vuokaavioksi. Molemmat moottorit käyttävät samaa semantiikkaa; Graphviz painottaa determinististä geometriaa.
Alla olevat kaaviot renderöidään MkDocsissa suoraan Mermaid- ja Graphviz-lähteistä; likimääräisiä staattisia kuvia ei käytetä.
Kokonainen esimerkki: arvaa luku¶
Ensin luetaan n ylärajaksi. Ohjelma valitsee satunnaisen kohde-luvun väliltä 1–n ja pyytää sitten arvauksia m. Kun luku löytyy, Keskeyttää päättää silmukan.
Lukea n
kohde = satunnainenVäliltä(1, n)
m = kohde + 1
Niin Kauan Kuin m ei ole yhtä suuri kuin kohde:
Lukea m
Jos m > kohde Niin:
Näyttää "Liian suuri!"
Muuten Jos m < kohde Niin:
Näyttää "Liian pieni!"
Muuten:
Näyttää "Voitit!"
Keskeyttää
Loppu
Loppu
%%{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(["Alku"])
n2(["Loppu"])
n3[/"Lukea n"/]
%% pseudocode-edge e0 n1 n3 normal
n1 e0@--> n3
%% pseudocode-sequence e0 n1 n3
n4["kohde = satunnainenVäliltä(1, n)"]
%% pseudocode-edge e1 n3 n4 normal
n3 e1@--> n4
%% pseudocode-sequence e1 n3 n4
n5["m = kohde + 1"]
%% pseudocode-edge e2 n4 n5 normal
n4 e2@--> n5
%% pseudocode-sequence e2 n4 n5
n6{"Niin Kauan Kuin m ei ole yhtä suuri kuin kohde ?"}
%% pseudocode-edge e3 n5 n6 normal
n5 e3@--> n6
%% pseudocode-sequence e3 n5 n6
subgraph loop1_body[" "]
direction TB
n7[/"Lukea m"/]
n8{"m #62; kohde ?"}
%% pseudocode-edge e4 n7 n8 normal
n7 e4@--> n8
%% pseudocode-sequence e4 n7 n8
n9[/"Näyttää 'Liian suuri!'"/]
%% pseudocode-edge e5 n8 n9 branch
n8 e5@-->|"Kyllä"| n9
n10{"m #60; kohde ?"}
%% pseudocode-edge e6 n8 n10 branch
n8 e6@-->|"Ei"| n10
n11[/"Näyttää 'Liian pieni!'"/]
%% pseudocode-edge e7 n10 n11 branch
n10 e7@-->|"Kyllä"| n11
n12[/"Näyttää 'Voitit!'"/]
%% pseudocode-edge e8 n10 n12 branch
n10 e8@-->|"Ei"| n12
n13["Keskeyttää"]
%% 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@-->|"Kyllä"| 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@-->|"Ei"| 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;
Tärkeimmät ohjelmointirakenteet¶
Seuraavat esimerkit näyttävät tavallisimmat ohjausrakenteet erikseen, jotta niiden Mermaid- ja Graphviz-esityksiä voi verrata nopeasti.
Ehto: Jos … Niin … Muuten …¶
x = 5
Jos x > 0 Niin:
Näyttää "positiivinen"
Muuten:
Näyttää "nolla tai negatiivinen"
Loppu
%%{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(["Alku"])
n2(["Loppu"])
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[/"Näyttää 'positiivinen'"/]
%% pseudocode-edge e2 n4 n5 branch
n4 e2@-->|"Kyllä"| n5
n6[/"Näyttää 'nolla tai negatiivinen'"/]
%% pseudocode-edge e3 n4 n6 branch
n4 e3@-->|"Ei"| 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
Silmukka: Jokaiselle … arvosta … arvoon …¶
total = 0
Jokaiselle i arvosta 1 arvoon 5:
total = total + i
Loppu
Näyttää 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(["Alku"])
n2(["Loppu"])
n3["total = 0"]
%% pseudocode-edge e0 n1 n3 normal
n1 e0@--> n3
%% pseudocode-sequence e0 n1 n3
n4{"Jokaiselle i arvosta 1 arvoon 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@-->|"Kyllä"| 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[/"Näyttää total"/]
%% pseudocode-edge e4 n4 n6 branch
n4 e4@-->|"Ei"| n6
%% pseudocode-loop-exit e4 n4 n6
%% pseudocode-edge e5 n6 n2 normal
n6 e5@--> n2
%% pseudocode-sequence e5 n6 n2
Silmukka: Jokaiselle … askeleella …¶
Jokaiselle i arvosta 0 arvoon 10 askeleella 2:
Näyttää i
Loppu
%%{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(["Alku"])
n2(["Loppu"])
n3{"Jokaiselle i arvosta 0 arvoon 10 askeleella 2"}
%% pseudocode-edge e0 n1 n3 normal
n1 e0@--> n3
%% pseudocode-sequence e0 n1 n3
subgraph loop1_body[" "]
direction TB
n4[/"Näyttää i"/]
end
style loop1_body fill:none,stroke:none
%% pseudocode-edge e1 n3 n4 branch
n3 e1@-->|"Kyllä"| 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@-->|"Ei"| n2
%% pseudocode-loop-exit e3 n3 n2
Silmukka: Jokaiselle … Joukossa …¶
Jokaiselle c Joukossa "Hei":
Näyttää c
Loppu
%%{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(["Alku"])
n2(["Loppu"])
n3{"Jokaiselle c Joukossa 'Hei'"}
%% pseudocode-edge e0 n1 n3 normal
n1 e0@--> n3
%% pseudocode-sequence e0 n1 n3
subgraph loop1_body[" "]
direction TB
n4[/"Näyttää c"/]
end
style loop1_body fill:none,stroke:none
%% pseudocode-edge e1 n3 n4 branch
n3 e1@-->|"Kyllä"| 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@-->|"Ei"| n2
%% pseudocode-loop-exit e3 n3 n2
Silmukka: Niin Kauan Kuin …¶
i = 0
Niin Kauan Kuin i < 3:
Näyttää i
i = i + 1
Loppu
%%{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(["Alku"])
n2(["Loppu"])
n3["i = 0"]
%% pseudocode-edge e0 n1 n3 normal
n1 e0@--> n3
%% pseudocode-sequence e0 n1 n3
n4{"Niin Kauan Kuin i #60; 3 ?"}
%% pseudocode-edge e1 n3 n4 normal
n3 e1@--> n4
%% pseudocode-sequence e1 n3 n4
subgraph loop1_body[" "]
direction TB
n5[/"Näyttää 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@-->|"Kyllä"| 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@-->|"Ei"| n2
%% pseudocode-loop-exit e5 n4 n2
Silmukka: Toista … kertaa¶
Toistaa 3 kertaa:
Näyttää "Hei"
Loppu
%%{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(["Alku"])
n2(["Loppu"])
n3{"Toistaa 3 kertaa"}
%% pseudocode-edge e0 n1 n3 normal
n1 e0@--> n3
%% pseudocode-sequence e0 n1 n3
subgraph loop1_body[" "]
direction TB
n4[/"Näyttää 'Hei'"/]
end
style loop1_body fill:none,stroke:none
%% pseudocode-edge e1 n3 n4 branch
n3 e1@-->|"Kyllä"| 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@-->|"Ei"| n2
%% pseudocode-loop-exit e3 n3 n2
Silmukka: Toista … Kunnes …¶
i = 0
Toistaa:
Näyttää i
i = i + 1
Kunnes 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(["Alku"])
n2(["Loppu"])
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[/"Näyttää 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@-->|"Ei"| n4
%% pseudocode-loop-back e4 n6 n4
%% pseudocode-edge e5 n6 n2 branch
n6 e5@-->|"Kyllä"| n2
%% pseudocode-loop-exit e5 n6 n2