EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido

Slides:



Advertisements
Ähnliche Präsentationen
Ziele von EINI I + II Einführen in „Informatik“
Advertisements

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Claudio Moraga; Gisbert Dittrich
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Java: Objektorientierte Programmierung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Claudio Moraga; Gisbert Dittrich
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Klausur „Diskrete Mathematik II“
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
DVG Klassen und Objekte
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Implementieren von Klassen
 Präsentation transkript:

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Gliederung Kapitel 10 Beispiel: Warteschlange –Ansatz zur Realisierung –struct Warteschlange, Impl. von Operationen –Benutzung von "Warteschlange" Warteschlange als ADT (abstrakter Datentyp) –private - public –Neuimplementierung mit Anmerkungen –Anmerkung zu ADTs Breitensuche in binären Bäumen –unter Verwendung von Warteschlangen

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Realisierung von Warteschlangen Arbeitsweise –Einfügen von Elementen am Ende –Entfernen von Elementen am Anfang –Initialisierung ausgezeichnete Elemente Kopf und Fuß Liste von Elementen –(möchte mich nicht am Anfang auf eine feste Anzahl von Elementen festlegen; sonst: Feld möglich)

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Realisierung von Warteschlangen Operationen: –Einfügen am Ende –Entfernen am Anfang –Initialisierung Wunsch nach Verkapselung: –Daten und Operationen zusammen behandeln Annahme: Nutzelemente sind ganze Zahlen. Also Listenelemente : struct IntListe { int Element; IntListe * weiter; };

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Zur Realisierung DieListe KopfFuss struct Warteschlange { IntListe * DieListe; IntListe * Kopf, * Fuss; Einfuegen(int)IntListe * Einfuegen(int); Entfernen()IntListe * Entfernen(); Init()IntListe * Init(); DerKopf()int DerKopf(); ListenDruck(...) Warteschlange void ListenDruck (ofstream *); };

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Konsequenz Kapselung: Gemeinsames Deklarieren von –Daten für die Operationen –Signatur der Operationen auf den Daten Vorteile: –alle Eigenschaften in einer einzigen Struktur (hier: des Datentyps Warteschlange) –-->: Lokalität der Änderungen Übersichtlichkeit Verständlichkeit

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Vereinbarung der Warteschlange Problem: –Es fehlt noch der Code für die Operationen. Lösung: –Der Code wird getrennt von der struct -Definition angegeben. In Analogie zu: –Angabe der Signatur der benutzten Funktionen als Funktionsprototypen, davon getrennte Angabe des Codes.

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Vereinbarung IntListe * Warteschlange :: Init() { Kopf = Fuss = NULL; return Kopf; }; Typ des Rückgabewerts Name des Typs Name der Funktion das zum Typ Warteschlange gehörende Init

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Anmerkungen struct bildet Namensraum: –Die in der struct -Definition definierten Namen (z. B. Kopf, Fuss ) sind hier sichtbar. Bei Definition einer Funktion muß der Name der struct mit angegeben werden, um die Zuordnung zu ermöglichen. –Z.B. kann Init ja auch bei anderen Typen vorkommen.

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Weitere Beispiele int Warteschlange::DerKopf() { return (DieListe == NULL ? -1 : DieListe->Element); }; void Warteschlange::ListenDruck(ofstream *aus) { IntListe * Laeufer = Kopf; *aus << endl; while (Laeufer != NULL) { *aus Element << " # "; Laeufer = Laeufer->weiter; } *aus << endl; };

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Weitere Beispiele IntListe * Warteschlange::Entfernen() { if (Kopf == NULL) DieListe = NULL; return NULL; else { if (Kopf == Fuss) { Kopf = Fuss = NULL; } else { Kopf = Kopf->weiter; } DieListe = Kopf; return DieListe; } }; Name einer struct Qualifizierungs- zeichen In der struct sichtbare Größen

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Benutzung der Warteschlange Definition der Warteschlange W Benutzung der Operationen durch qualifizierten Zugriff void main() { ofstream *out = new ofstream("aus.aus"); Warteschlange W; W.Init(); for (int i=1; i < 10; i++) W.Einfuegen(i); W.ListenDruck(out); }

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich IntListe * Warteschlange::Einfuegen(int i) { IntListe *K = new IntListe; K->Element = i; K->weiter = NULL; if (DieListe == NULL){ Kopf = K; Kopf->weiter = Fuss; } else if (Fuss == NULL){ Kopf->weiter = K; Fuss = K; } else { Fuss->weiter = K; Fuss = K; } DieListe = Kopf; return DieListe; }; Weitere Beispiele

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Zugriff über Qualifikation void main() { ofstream *out = new ofstream("aus.aus"); Warteschlange W; W.Init(); for (int i=1; i < 10; i++) W.Einfuegen(i); W.ListenDruck(out); W.Einfuegen(117); *out << "\nNach Einfuegen von 117: " << endl; W.ListenDruck(out); *out << "\nKopf: " << W.DerKopf() << endl; W.Entfernen(); *out << "\nNach Entfernen des ersten Elements: "; W.ListenDruck(out); *out << "\nKopf: " << W.DerKopf() << endl; } Definition der Warteschlange

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # Nach Einfuegen von 117: 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 117 # Kopf: 1 Nach Entfernen des ersten Elements: 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 117 # Kopf: 2 Programm Ausgabe

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Beobachtungen Die "Interna" (hier: Kopf, Fuss, DieListe ) werden "außen" überhaupt nicht benötigt. Diese Interna könnten/sollten privat, d.h. verborgen bleiben Zugriff von außen nur über die entsprechenden Operationen

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Abstrakter Datentyp Warteschlange als eine Art Datenkapsel mit – internem Zustand ( Kopf, Fuss, DieListe ) – Zugriffsoperationen ( Einfuegen etc.) – Zustand von außen nur über Zugriffsfunktionen änderbar, nicht direkt!

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich innerer Zustand (verborgen) Zugriff und Änderung nur durch wohldefinierte Operationen

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Operationen auf Warteschlangen DieListe KopfFuss Einfuegen(int) Entfernen() Init() DerKopf() ListenDruck(...) privat öffentlich

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Neudeklaration struct Warteschlange { private: IntListe * DieListe; IntListe * Kopf, * Fuss; public: void Einfuegen(int); void Entfernen(); void Init(); int DerKopf(); void ListenDruck(ofstream *); }; neu beachte: void Programm

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Anmerkungen public –bewirkt, daß auf die darauf folgenden Namen von außen zugegriffen werden darf; dies geschieht durch Qualifikation. private –bewirkt, daß die darauf folgenden Namen vor dem expliziten Zugriff von außen (durch Qualifikation) geschützt sind.

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Beispiel Warteschlange W sei definiert Legal sind z.B.: –W.Init() –W.Einfuegen(45) –W.DerKopf() Illegal sind z.B.: - W.Kopf - W.DieListe - W.Fuss

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Ein Rückgabewert impliziert die Weitergabe von interner Strukturinformation nach außen. Dies kann unerwünscht sein. --> Datenkapselung. Wieso void?

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich void Warteschlange::Einfuegen(int i) { IntListe *K = new IntListe; K->Element = i; K->weiter = NULL; if (DieListe == NULL){ Kopf = Fuss = K; } else { Fuss->weiter = K; Fuss = K; } DieListe = Kopf; }; Änderungen: Typ der Rückgabe ist void ; return eliminiert Änderungen: Typ der Rückgabe ist void ; return eliminiert IntListe * Warteschlange::Einfuegen(int i){ IntListe *K = new IntListe; K->Element = i; K->weiter = NULL; if (DieListe == NULL){ Kopf = K; Kopf->weiter = Fuss; } else if (Fuss == NULL){ Kopf->weiter = K; Fuss = K; } else { Fuss->weiter = K; Fuss = K; } DieListe = Kopf; return DieListe; }; Änderungen: Typ der Rückgabe wird void ; return eliminiert Änderungen: Typ der Rückgabe wird void ; return eliminiert IntListe * Warteschlange::Einfuegen(int i){ IntListe *K = new IntListe; K->Element = i; K->weiter = NULL; if (DieListe == NULL){ Kopf = Fuss = K; } else { Fuss->weiter = K; Fuss = K; } DieListe = Kopf; return DieListe; };

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Anmerkung: Trick Kopf ist als privat deklariert –auf Kopf kann also von außen nicht zugegriffen werden, –kann also Kopf weder lesen noch von außen verändern. Trick: definiere eine öffentliche Zugriffsfunktion DerKopf () –damit kann ich den Wert von Kopf lesen –analog: schreiben.

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Warteschlange als abstrakter Datentyp Warteschlange wurde hier als abstrakter Datentyp (ADT) definiert. ADTs sind charakterisiert durch – Offenlegen der Schnittstellen (Signaturen) – Verbergen der Implementation (d.h. Zugriff nur über wohldefinierte Operationen) Wichtige Konstruktion in der Softwaretechnik, insb. im objektorientierten Entwurf. Wichtig im nächsten Semester.

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Zurück zur Breitensuche Strategie –Verwendung einer Warteschlange Q, die aus Knoten des Baums besteht, –Füge zunächst den Wurzelknoten in Q ein, der Kopf K von Q wird gedruckt. nach dem Druck: –ist K.LSohn != NULL, so wird dieser Knoten in Q eingefügt, –ist K.RSohn != NULL, so wird dieser Knoten in Q eingefügt, das geschieht solange, bis Q leer ist

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Änderung im Typ des Listen- elements Anpassung der Datentypen struct BinBaum { char text[maxLen]; int zaehler; BinBaum * LSohn, *RSohn; }; struct BaumListe { BinBaum * Element; BaumListe * weiter; }; struct Warteschlange { private: BaumListe * DieListe; BaumListe * Kopf, * Fuss; public: void Einfuegen(BinBaum *); void Entfernen(); void Init(); int IstLeer(); BinBaum * DerKopf(); };

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Zentrale Prozedur void KnotenDruck(BinBaum *, ofstream *); void BreitenSuche(BinBaum *K, ofstream *aus) { Warteschlange W; W.Init(); W.Einfuegen(K); while (!W.IstLeer()) { BinBaum *L = W.DerKopf(); W.Entfernen(); W.Einfuegen(L->LSohn); W.Einfuegen(L->RSohn); KnotenDruck(L, aus); } } Programm:

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Suche in WWW-Seiten. K1 K1.1 K1.2 K1.3 K1.1.1 K1.1.2 K1.1.3 usw. Weitere Anwendung: WWW-Seite enthält eingebettete Links. Annahme: in Kapiteln organisiertes "Buch".

Kap 10: Warteschlange als ADTVorl EINI-I"Prof. Dr. G. Dittrich Hierarchische Struktur K1 K1.1K1.2 K1.1.1K1.1.2K1.1.3 ETC. Breitensuche: liest erst alle Kapitel, bevor die einzelnen Unterkapitel gelesen werden (z.B. Überblick) Tiefensuche: geht in die Tiefe, z. B. gezieltere Suche