Professional Documents
Culture Documents
Strukturierte Programmierung
OOPM, Ralf Lmmel
44
Algorithmus fr ! (Fakultt)
Eingabe: natrliche Zahl Ausgabe: natrliche Zahl Verfahren: 1. Weise Eingabe an Variable n zu. 2. Initialisiere r mit 1. 3. Wenn n = 0 dann gehe nach 7. 4. Weise n * r an r zu. 5. Dekrementiere n. 6. Gehe nach 3. 7. Gebe r als Ausgabe aus.
Ergebnistyp
Umsetzung (in C)
Funktionsname
int factorial(int n) { int r = 1; start: ! if (n == 0) goto end;
Argument(e)
Krper
45
46
E.Dijkstra: Vater der Strukturierten Programmierung, Autor von GOTO Considered Harmful
A study of program structure has revealed that programs can differ tremendously in their intellectual manageability. A number of rules have been discovered, violations of which will either seriously impair or totally destroy the intellectual manageability of the program.... I now suggest that we confine ourselves to the design and implementation of intellectually manageable programs.
https://cs.senecac.on.ca/~chris.szalwinski/archives/btp100.043/content/const.html
(C) Ralf Lmmel, OOPM, Universitt Koblenz-Landau
47
48
Fakulttsfunktion in Java
Ergebnistyp Funktionsname
Argument(e)
Krper
Iteration
Dekrement
49
50
Die Rolle von public, class, static, void, etc. wird erst spter behandelt.
(C) Ralf Lmmel, OOPM, Universitt Koblenz-Landau
51
52
Schleifenkonstruktionen (Java)
While-Schleife (Vorabtesten der Bedingung) Syntax: while (Bedingung) Anweisung; while (Bedingung) { ... } For-Schleife: Syntaktischer Zucker: for ( int i=0; i < n; i++) Anweisung; Expansion: int i = 0; while (i < n) { Anweisung; i++; }
(C) Ralf Lmmel, OOPM, Universitt Koblenz-Landau
53
54
GOTO
Baumartige Zerlegung eines Programms in Teilprogramme (Prozeduren) -- Top-Down Ansatz Keine Verwendung von GOTO auf unterster Ebene; lediglich Sequenz, Auswahl und Wiederholung
Die Vorgehensweise der baumartigen Zerlegung wird an dieser Stelle bergangen.
(C) Ralf Lmmel, OOPM, Universitt Koblenz-Landau
return r;
55
56
Funktion bzw. Block int fak(int n) r=1 n>1 r=r*n n=n-1 return r Schleife mit Test am Anfang Bediung der Selektion Zweige der Selektion Sequentielle Schritte
57
58
Struktogramm fr ggT
int ggT(int x, int y) x != y x>y
ggT in Java
public static int ggT( int x, int y ) { while (x != y) { if (x > y) x = x - y; else = y - x; y } return x;
FALSE y=y-x
bungsaufgabe: Argumentieren Sie, dass dieses Verfahren in der Tat den ggT ermittelt.
59
60
(Folgerung aus dem) Satz von Bhm-Jacopini: Jedes GOTO-Programm kann in ein While-Programm umgewandelt werden. (Es reicht eine While-Schleife.)
Intuition: Benutze eine Variable v als Sprungziel-Speicher. GOTOs werden als Zuweisungen an v gehandhabt. Anspringbare Anweisungen mssen nun v testen. Wiederhole alle Anweisungen (bis zum return).
ISAAC NASSI
BEN SHNEIDERMAN
Der so erhaltene Code ist u.U. nicht gut lesbar. Es gibt alternative Eliminationstechniken.
61
62
63
64
65
66
Zwischenberlegungen
Warum machen wir uns Gedanken um GOTOs? Java enthlt keine allgemeine Goto-Anweisung. Grnde Es gibt noch andere Sprachen ausser Java. Es gibt weitere Kontrollstrukturen (in Java). Es gibt weitere Beherrschbarkeitsprobleme.
Verwendung globaler Variablen Unstrukturierte Nebenlugkeit Code-Klone und Tangled Code Vermengung von Daten, Logik und GUI ...
67
68
Programmablaufplne (Flussdiagramme)
A
A VIE N
Oval: Start, Stopp Pfeil, Linie: Forsetzung mit ... Rechteck: Operation Rechteck mit Linien: Unterprogrammaufruf Raute: Verzweigung Parallelogramm: Ein- und Ausgabe
Setze r auf r n
Rckgabe r Ende
c Jrg Siekmann, Nils Hebbinghaus, Claus Zinn, SS 06
69
SA
IS
70
UN
IV
E R SIT
A VIE N
IS
Vorsicht: Spaghetti
Flussdiagramme sind sehr freizgig: Pfeile entsprechen allgemeinem GOTO.
SA
x=y?
ja
x<y?
Setze x auf x y
Strukturierte Flussdiagramme sind grasch erkennbar. (Folgerung aus dem) Satz von Bhm-Jacopini: Jedes Flussdiagramm lsst sich ein quivalentes Struktorgramm umformen.
(C) Ralf Lmmel, OOPM, Universitt Koblenz-Landau
Rckgabe x Ende
c Jrg Siekmann, Nils Hebbinghaus, Claus Zinn, SS 06 Einfhrung in die Informatik fr Hrer aller Fakultten I p.8
Quelle: Einfhrung in die Informatik Jrg Siekmann, Nils Hebbinghaus, Claus Zinn Universitt des Saarlandes
71
72
Zusammenfassung Strukturierte Programmierung = Zuweisung + Sequenz + if + while ! GOTO Nassi-Shneiderman-Diagramme genau richtig Programmablaufplne zu freizgig Ausblick Nchstes Mal: Numerische Algorithmen bernchstes Mal: Programmierung mit Feldern
73