|
|
Zeile 1: |
Zeile 1: |
| {{Thumbnailbox|INHALT=<graphviz format="svg">digraph PAP {
| | <graphviz format="svg">digraph PAP { |
| node [ fontname="Source Sans Pro" ]; | | node [ fontname="Source Sans Pro" ]; |
| edge [ fontname="Source Sans Pro" ]; | | edge [ fontname="Source Sans Pro" ]; |
| layout="neato" | | layout="neato" |
| start[label="Start", shape="ellipse", pos="0,1.5!"];
| | splines="false" |
| traurig[label="Bin ich\ntraurig?", shape="diamond", pos="0,0!"];
| | praesens [label="Präsens", URL="Präsens", shape="rectangle", pos="0,0!"] |
| korn[label="Trinke\neinen Korn", shape="rectangle", pos="2.5,0!"];
| | futuri [label="Futur I", URL="Futur I", shape="rectangle", pos="4,0!"] |
| ende[label="Ende", shape="ellipse", pos="-2.5,0!"];
| | futurii [label="Futur II", URL="Futur II", shape="rectangle", pos="2,0!"] |
| inv1[shape="point", width="0", height="0", style="invis", pos="2.5,-1!"]; | | imperfekt [label="Imperfekt", URL="Imperfekt", shape="rectangle", pos="-2,0!"] |
| inv2[shape="point", width="0", height="0", style="invis", pos="0,-1!"]; | | ierfekt [label="Perfekt", URL="Perfekt", shape="rectangle", pos="-2,1!"] |
| start -> traurig;
| | pqperfekt [label="Plusquamperfekt", URL="Plusquamperfekt", shape="rectangle", pos="-4,0!"] |
| traurig -> korn [label="Ja"];
| | |
| korn -> inv1 [arrowhead="none"];
| | inv1[shape="point", width="0", height="0", style="invis", pos="-5,-1!"]; |
| inv1 -> inv2 [arrowhead="none"]; | | inv2[shape="point", width="0", height="0", style="invis", pos="5,-1!"]; |
| inv2 -> traurig;
| | inv1 -> inv2 [label="Zeit"] |
| traurig -> ende [label="Nein"];
| | futuri -> futurii [label="vorzeitig"] |
| } | | } |
| </graphviz> | | </graphviz> |
| |CAPTION=Ein Programmablaufplan zum [https://www.youtube.com/watch?v=ngwsPE5SV7I Erhardt-Algorithmus]}}
| |
| [[Programmablaufplan|Programmablaufpläne (PAPs)]] sind ein Diagrammtyp, mit dem der [[Kontrollfluss|Ablauf]] von [[Algorithmus|Algorithmen]] visualisiert werden kann.
| |
|
| |
| Indem man sich das, was man programmieren möchte, zunächst analog und schriftlich veranschaulicht, kann man sich eine Menge Programmieraufwand ersparen:
| |
| # Der Ablauf des Algorithmus kann schon vor der Implementierung, etwa mit [[Trace-Tabelle]]n händisch getestet werden.
| |
| # Es ist leichter, kleine elementare Anweisungen in eine Programmiersprache zu übersetzen, als komplexe Ideen.
| |
| # Wenn man den Ablauf auf Papier neben sich liegen hat, verliert man das große Ganze, an dem man gerade sitzt, nicht so schnell aus dem Blick und verzettelt sich nicht.
| |
| # Wenn man alle Abläufe auf Papier festgehalten hat, kann man die Umsetzung leichter delegieren
| |
|
| |
| == Syntaxelemente ==
| |
|
| |
| {{Thumbnailbox|INHALT=<mermaid>flowchart TD
| |
| node["Anweisung"]
| |
| </mermaid>}}
| |
| {{Thumbnailbox|INHALT=<mermaid>flowchart TD
| |
| node{"Bedingung"}
| |
| </mermaid>}}
| |
| {{Thumbnailbox|INHALT=<mermaid>flowchart TD
| |
| node[/"Ein-/Ausgabe"/]
| |
| </mermaid>}}
| |
| {{Thumbnailbox|INHALT=<mermaid>flowchart TD
| |
| node[["Unterprogramm"]]
| |
| </mermaid>}}
| |
| {{Thumbnailbox|INHALT=<mermaid>flowchart LR
| |
| start(["Start"])
| |
| ende(["Ende"])
| |
| </mermaid>}}
| |
|
| |
| Ein Programmablaufplan besteht aus den einzelnen Ablaufelementen, die mit Pfeilen verbunden sind. Der besseren Lesbarkeit halber ist ein Programmablaufplan typischerweise von oben nach unten angeordnet. Davon darf aber abgewichen werden, das Ziel sollte immer die bestmögliche Lesbarkeit sein.
| |
|
| |
| Die einzelnen Ablaufelemente sind
| |
|
| |
| === Anweisung ===
| |
|
| |
| Einfache [[Anweisung|Anweisungen]] wie <code>lösche die Ausgabe</code> oder <code>x := x * 2</code> werden in ein Rechteck gesetzt. Von jeder Anweisung darf nur ein weiterer Pfeil ausgehen, sonst wäre der Ablauf des Algorithmus nicht mehr eindeutig.
| |
|
| |
| === Bedingung ===
| |
|
| |
| [[Bedingte Verzweigung|Bedingungen]] wie <code>x > 2?</code> oder <code>name = "Hans Meier"?</code> werden in Rauten gesetzt, die auf der Spitze stehen. Von jeder Bedingung müssen zwei Pfeile ausgehen, die mit <code>ja</code> und <code>nein</code> beschriftet sind. Diese Pfeile dürfen auch auf vorhergehende Stellen im Plan zeigen.
| |
|
| |
| '''Bedingungen enden immer mit einem Fragezeichen.'''
| |
|
| |
| === Ein- und Ausgabe ===
| |
|
| |
| Ein- und Ausgaben wie <code>x := Eingabe</code> oder <code>Gib y aus</code> werden in Parallelogramme gesetzt. Der Übersichtlichkeit halber kann man in die untere rechte Ecke ein kleines <code>E</code> für Eingaben oder ein <code>A</code> für Ausgaben setzen, muss man aber nicht.
| |
|
| |
| === Unterprogramme ===
| |
|
| |
| Um PAPs übersichtlicher zu halten, können einzelne Programmteile in [[Unterprogramm]]e ausgelagert werden. Für jedes Unterprogramm wird ein eigener PAP gezeichnet. Der Aufruf eines Unterprogramms wird in ein Rechteck mit doppelten senkrechten Linien gesetzt.
| |
|
| |
| === Start und Ende ===
| |
|
| |
| Jeder PAP beginnt mit einem Startknoten, der typischerweise ganz oben steht, und endet mit einem Endknoten, der typischerweise ganz unten steht. Dies dient aber nur der Lesbarkeit und ist keine feste Vorschrift.
| |
|
| |
| {{Navigationsleiste Diagrammtypen}}
| |
|
| |
| [[Kategorie:Algorithmen]]
| |