Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Algorithmen und Datenstrukturen 1 SS 2002

Ähnliche Präsentationen


Präsentation zum Thema: "Algorithmen und Datenstrukturen 1 SS 2002"—  Präsentation transkript:

1 Algorithmen und Datenstrukturen 1 SS 2002
Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz Termin 2 – Dijkstra Diagramme

2 Übersicht Organisation Themenbereiche heute Strukturierung im Kleinen
unbeschränkte Ablaufstrukturen D-Diagramme (Dijkstra) Transformation in D-Diagramme Beispiele Übungsbesprechung Übung 2

3 Organisation Teilnehmerliste Grundsätzlich ist Jana zu verwenden
Java optional; Jana ist Klausur-relevant Vorsicht: Java unterstützt einige Features von Jana nicht: Ausgangsparameter Übergabeparameter ÜBUNGSABGABE: Ausarbeitungen bitte links oben klammern ! keine Klarsichthülle abgeben. Präsentation von 2 Übungen; bei der Präsentation kann der Quelltext von mir am Beamer dargestellt werden. Musterlösung oder eine Übung muß verfügbar sein, um Laborbetrieb zu gewährleisten

4 Rückblick Prosa Ablaufdiagramm Struktogramm
Algorithmenbeschreibungssprache Programmiersprache User: integer erwartet, String eingegeben Device: Hardware Fehler: Printer ausgeschaltet, Festplatte defekt, Web-page kurzfristig nicht erreichbar Physical: Disk full, Mem full Code errors: Eine Methode wird inkorrekt ausgeführt, ungültiger Array index

5 Ablaufdiagramm Liest durch komma separierte Integers aus einer Datei
Problem im Beispiel: Was ist geschehen, wenn –1 zurückgegeben wird File zu ende, Disk defekt, an der Lesestelle steht kein auswertbarer Integer "I23" (Buchstabe I) Vöest; interner Fehler der Java Maschine, Speicher voll

6 JANA Übersicht Algorithmen (Prozeduren) Kommentare Operatoren
Ablaufsteuerung (Sequenz, Selektion, Iteration) if / else if / else, switch; while, repeat, for 4 Elementare Datentypen boolean, int, float, char Felder (inkl. Zeichenketten) boolean[1:n], char[], float[-3:3], int[1:n; 1:m] und weitere Sprachkonstrukte Dies paßt auch zur Objektorientierung; Diskussion des Beispiels, Zeit lassen Welcher Code wird ausgeführt, Abarbeitung bis i =

7 Strukturierung im Kleinen
Algorithmen sollen einfach zu lesen sein Entwicklung (z.B. Testen) Wartung unbeschränkte Ablaufstrukturen Dies paßt auch zur Objektorientierung; Diskussion des Beispiels, Zeit lassen Welcher Code wird ausgeführt, Abarbeitung bis i = erschweren die Lesbarkeit (Verständlichkeit) einige Sprachen ermöglichen GOTO oder JUMP-Anweisungen Sprung von jeder Stelle an jede Stelle möglich dadurch sind beliebige Ablaufstrukturen möglich z.B: Basic, Assembler nicht möglich: Java, Modula 2

8 unbeschränkte Ablaufstrukturen
Beispiel (~BASIC) A:PRINT " IST N EINE PRIMZAHL ?" INPUT "Welche Zahl ?"; N PRINT IF N == 1 THEN GOTO C IF N == 2 THEN GOTO D T = 1 B:T = T + 1 IF T * T > N THEN GOTO D IF N <> T * INT (N / T) THEN GOTO B C:PRINT " N IST KEINE PRIMZAHL" GOTO A D:PRINT "N IST EINE PRIMZAHL" (da ein Teiler t mit t * t > n einen Gegenteiler n/t mit n/t < t hätte) Problem: schlechte Lesbarkeit, da beliebig gesprungen werden darf Dies paßt auch zur Objektorientierung; Diskussion des Beispiels, Zeit lassen Welcher Code wird ausgeführt, Abarbeitung bis i =

9 unbeschränkte Ablaufstrukturen (2)
Probleme Sprunganweisungen ermöglichen unbeschränkte Ablaufstrukturen hohe Komplexität möglich (statisch, dynamisch) schwierige Validation, hoher Aufwand für Verifikation Beispiel: mehrere Einsprünge in Schleifen, mehrere Aussprünge aus Schleifen, ... Dies paßt auch zur Objektorientierung; Diskussion des Beispiels, Zeit lassen Welcher Code wird ausgeführt, Abarbeitung bis i = Grundidee der strukturierten Programmierung nur Ablaufstrukturen mit einem Eingang und einem Ausgang zulassen Böhm und Jacopini haben gezeigt, daß jeder (!) Algorithmus durch Kombination von Sequenz, Verzweigung und Wiederholung mit einem Ein-und Ausgangdarstellbar ist (das allein bietet noch keine Garantie für Strukturiertheit (z.B. ist es möglich schlecht strukturierte Programme ohne Sprunganweisung zu schreiben))

10 D-Diagramme Idee rekursive Definition
Beschränkung auf wenige Ablaufstrukturen Folge: weniger Komplexität, bessere Strukturiertheit rekursive Definition einfache Anweisung S ist ein D-Diagramm wenn S1 und S2 D-Diagramme sind, so sind auch folgende Konstrukte D-Diagramme: S1; S2 // Sequenz if p then S1 // Verzweigung if p then S1 else S2 while p do S1 end // Abweisschleife nichts anderes ist ein D-Diagramm Dies paßt auch zur Objektorientierung; Diskussion des Beispiels, Zeit lassen Welcher Code wird ausgeführt, Abarbeitung bis i =

11 D-Diagramme (2) Grundlegende D-Diagramm Strukturen
jeweils genau ein Eingang, ein Ausgang rekursive Komposition dieser Strukturen erlaubt dadurch entstehen neue Strukturen, die wieder sog. reine D-Diagramme sind keine reinen D-Diagramm Strukturen: Repeat, For, Switch

12 D-Diagramme (3) erweiterte D-Diagramme
Die Erfahrung hat gezeigt, daß einige weitere Strukturen verwendet werden dürfen Repeat-Schleife (Durchlaufschleife) Case Statement (Fallunterscheidung, switch) (For-Schleife) Diese Strukturen können wir zusätzlich einsetzten.

13 D-Diagramme (4) Beispiel (D-Diagramm?) Für jede Anweisung ein Kasten
DIM N = 12 PRINT IF N = 1 THEN GOTO C IF N = 2 THEN GOTO D T = 1 B:T = T + 1 IF T * T > N THEN GOTO D IF N <> T * INT (N / T) THEN GOTO B C:PRINT " N IST KEINE PRIMZAHL" END D:PRINT "N IST EINE PRIMZAHL" Dies paßt auch zur Objektorientierung; Diskussion des Beispiels, Zeit lassen Welcher Code wird ausgeführt, Abarbeitung bis i = Für jede Anweisung ein Kasten Pfeile für Gotos Verzeigung ? Bedingung

14 D-Diagramme (5) D-Diagramm ? j ? p Ja n ? N==1 ? q Nein j ? N==2 n Ja
T = 1 B T = T + 1 j ? r Ja ? T*T > N n j Nein ? s Ja ? N <> T * INT (N/T) n Nein C PRINT "Prim" D PRINT "nicht Prim" E END

15 Nicht D-Diagramm Strukturen
Einige grundlegende Strukturen Verzweigung mit Einsprung Verzweigung mit Aussprung (Verzweigung in Verzweigung, die aus der umgebenden Verzweigung rausführt) Schleife mit Einsprung Schleife mit Aussprung (Verzweigung in Schleife, die aus der Schleife rausführt)

16 Transformation in D-Diagramme
Allgemeines Jede beliebige Ablaufstruktur läßt sich als D-Diagramm darstellen (lt. Böhm und Jacopini) Wie kann man ein Nicht-D-Diagramm in ein D-Diagramm transformieren? Mehrere Methoden Einige ändern die Struktur des ursprüngl. Algo. stark Wir -> heuristisch: Codeverdoppelung oder/und Einführung boolescher Hilfsvariablen

17 Transformation in D-Diagramme (2)
Beispiel

18 Transformation in D-Diagramme (3)
Beispiel D-Diagramm? Code Verdoppelung oder boolesche Hilfsparameter

19 Transformation in D-Diagramme (4)
Lösungen D-Diagramm?

20 Transformation in D-Diagramme (4)
Problem und Lösung D-Diagramm?;

21 Transformation in D-Diagramme (5)
Problem (Kreuzstruktur) Idee: zwei Spieler, die abwechselnd drankommen; r,q == gewonnen

22 Transformation in D-Diagramme (6)
Lösung (Kreuzstruktur) D-Diagramm?

23 Transformation Wie prüft und transformiert man Algorithmen?
Algorithmus von Jana als Ablaufdiagramm darstellen Prüfen, ob D-Diagramm konform Ablaufdiagramm durch: boolesche Hilfsvariable und Code-Verdoppelung in D-Diagramm überführen 4. D-Diagramm prüfen (z.B. von außen nach innen) 5. D-Diagramm in Algorithmenbeschreibungssprache darstellen

24 Übung 2 Jana wird um GOTO-Statement erweitert
Übung betrifft Darstellung, Transformation Nur Grundstrukturen + Repeat Schleife nötig Achten Sie auf saubere Darstellung Einsatz der Mittel: Codeverdoppelung, boolesche Hilfsvariablen Anmerkung: In der Praxis (z.B. Java): Programmierprache ohne Goto Statement -> gut dann prüfen, ob break oder continue Anweisungen verwendet wurden, da z.B. Java auch mehrere Schleifenaussprünge ermöglicht


Herunterladen ppt "Algorithmen und Datenstrukturen 1 SS 2002"

Ähnliche Präsentationen


Google-Anzeigen