Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.

Slides:



Advertisements
Ähnliche Präsentationen
Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten b bp.
Advertisements

Klassen - Verkettete Liste -
Ein- und Ausgabe von Dateien
Claudio Moraga; Gisbert Dittrich
Einführung in die Programmierung Ausführbare Klassen
7. Natürliche Binärbäume
Durchlaufen eines Binärbaumes
Sortieren mit Binären Bäumen
Dateien. Eine Datei wird in C++ als ein Stream, also als ein Objekt einer bestimmten Klasse dargestellt.
ARRAY oder FELD oder VEKTOR
WHILE - Anweisung.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
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
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 Kapitel 4 Claudio Moraga; Gisbert Dittrich 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.
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 10 Claudio Moraga; Gisbert Dittrich FBI Unido
IKG - Übung Diskrete Mathe I – Jörg Schmittwilken
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum II.
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Bäume-
Das erste Programm (Folie 16)
Der C-Präprozessor EDV1 - 04Präprozessor.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
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 Fakultät.
Einführung in die Programmierung
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 Programmierung
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 (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Lindenmayer-Systeme: Fraktale rekursiv zeichnen
Vorlesung Binärer Suchbaum II-
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
BMEVIEEA100 Grundlagen der Programmierung
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Programmieren in C Sortieren, Suchen
1 // 13_2_ADT_Unger_Graph // ungerichteter, knotenmarkierter Graph als ADT // #include struct Knoten { public: void Erzeuge_Kn (int, char*); char* Get_Marke.
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Algorithmen und Datenstrukturen 1 SS 2002
1 // Verkettete Liste 3 // demonstriert verkettete Listen und // Rekursion // (mit Entfernen eines Listenelementes) // #include struct Liste { int Element;
Binärer Suchbaum IV AVL-Baum I
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Binärer Suchbaum III- -AVL-Baum-
Binärer Baum, Binärer Suchbaum I
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Diskrete Mathematik I Vorlesung 7 Binärer Suchbaum III.
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Durchschnitt (verbal)
Cäsar-Verschlüsselung
Schleifen mit der Turtle
Cäsar-Verschlüsselung
 Präsentation transkript:

Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text zu zählen und sie mit ihrer Häufigkeit alphabetisch geordnet auszugeben. Zunächst: Dateien. Lese aus einer Eingabe-Datei, schreibe in eine Ausgabe-Datei. Programm: nächste Folie.

#include <fstream.h> #include <conio.h> #include <stdlib.h> const int Max_LG = 30; void main() { ifstream lesen; ofstream schreiben; char Gelesen[Max_LG]; lesen.open("prog-11.cpp"); if (!lesen) { cout << "Fehler\n"; exit(-1); } schreiben.open("aus.out"); if (!schreiben) { cout << " Fehler\n"; exit(-1); } while (!lesen.eof()) { lesen >> Gelesen; schreiben << Gelesen << endl; lesen.close(); schreiben.close();

Zu beachten: #include <fstream.h> bindet die Bibliothek ein. ifstream lesen: von der Datei-Variablen lesen soll gelesen werden, sie muß also einen Wert bekommen und zum Lesen geöffnet werden (mit lesen.open("prog-11.cpp"); Erfolg beim Öffnen: lesen != 0, Mißerfolg: lesen == 0 [z.B.: Datei existiert nicht]) Benutzung: wie cin Testen: lesen.eof() (!= 0 genau dann, wenn das Ende der Datei noch nicht erreicht ist) Nach Benutzung: schließen mit lesen.close() Analog: ofstream für die Ausgabe.

Punkte: Benutzung von Dateien: wie Standard Ein-/Ausgabe ifstream: Eingabe, ofstream: Ausgabe Bindung von Datei-Variablen an Dateien beim Öffnen. Schließen der Datei beim Verlassen des entsprechenden Blocks. Werden Dateien zum Schreiben geöffnet, so geht ihr vorheriger Inhalt verloren!

Wörter zählen Problem: zähle die Wörter in einem gegebenen Text gib sie mit ihrer Häufigkeit alphabetisch geordnet aus Datenstruktur: (erweiterter) binärer Suchbaum text struct BinBaum { char text[maxLen]; int zaehler; BinBaum * LSohn, *RSohn; }; zaehler LSohn RSohn

Strategie: Suchen nach einer Zeichenkette im binären Suchbaum Zeichenkette nicht gefunden: neuen Knoten einfügen, Zähler zu 1 initialisieren Zeichenkette gefunden: Zähler um 1 erhöhen

BinBaum * Einfuegen(BinBaum *B, char * k) { void strcpy(char *, char *); int strcmp(char *, char *); if (B == NULL) { BinBaum *Hilf = new BinBaum; strcpy(Hilf->text, k); Hilf->zaehler = 1; Hilf->LSohn = Hilf->RSohn = NULL; return Hilf; } else { int Vergl = strcmp(B->text,k); if (Vergl < 0) B->RSohn = Einfuegen(B->RSohn, k); else if (Vergl > 0) B->LSohn = Einfuegen(B->LSohn, k); else if (Vergl == 0) B->zaehler += 1; return B;

Alphabetisch geordnete Ausgabe? Durchlaufe den binären Suchbaum mit Wurzel w rekursiv wie folgt: Durchlauf durch den linken Unterbaum von w Ausdruck der Wurzel w Durchlauf durch den rechten Unterbaum von w Resultat: geordnete Ausgabe Beispiel: 17 4 7 6 17 18 23 26 6 23 4 7 18 26

Wie beweist man das? Durch vollständige Induktion nach der Anzahl der Knoten. Der Induktionsbeginn (kein Knoten) ist trivial. Der Induktionsschritt: der linke Unterbaum wird geordnet ausgegeben (IV), dann wird die Wurzel ausgegeben, dann wird der rechte Unterbaum geordnet ausgegeben (IV). Die Wurzel steht bzgl. der Ordnung in der Mitte.

void Ausdrucken(BinBaum *K, ofstream *aus) { void KnotenDruck(BinBaum *, ofstream *); if (K != NULL) { Ausdrucken(K->LSohn, aus); KnotenDruck(K, aus); Ausdrucken(K->RSohn, aus); }

void main() { BinBaum * Einlesen(ifstream *), *BST; void Ausdrucken(BinBaum *, ofstream *); ifstream *EingabeDatei; ofstream *Ausgabe = new ofstream("von.aus"); EingabeDatei = new ifstream("von.txt"); if (!EingabeDatei) { cout << "Problem: Eingabe\n"; exit(-1); } BST = Einlesen(EingabeDatei); Ausdrucken(BST, Ausgabe);

beachte die Initialisierung: Bemerkenswert: Ein- und Ausgabedateien werden als Zeiger auf ifstream und ofstream deklariert. beachte die Initialisierung: ifstream *EingabeDatei; EingabeDatei = new ifstream("von.txt"); mit der Variante ofstream *Ausgabe = new ofstream("von.aus");

Feinheiten: *inp und (*inp).eof() BinBaum * Einlesen(ifstream *inp) { BinBaum *bst = NULL, * Einfuegen(BinBaum *, char *); char gelesen[maxLen]; *inp >> gelesen; while (!(*inp).eof()) { bst = Einfuegen(bst, gelesen); } return bst; Feinheiten: *inp und (*inp).eof()

Analog: Ausgabe void KnotenDruck(BinBaum *T, ofstream *aus){ void Schreiben(char *, int, ofstream *); Schreiben(T->text, T->zaehler, aus); } void Schreiben(char * s, int k, ofstream *aus) { *aus << k << "\t\t\t" << s << endl; }

1 Trugen 1 Turme 12 Und 1 Wer 1 Wieder 1 Zuversicht«, 1 ab, 1 ab. Herr von Ribbeck auf Ribbeck im Havelland, Ein Birnbaum in seinem Garten stand, Und kam die goldene Herbsteszeit Und die Birnen leuchteten weit und breit, Da stopfte, wenn's Mittag vom Turme scholl, Der von Ribbeck sich beide Taschen voll, Und kam in Pantinen ein Junge daher, So rief er: »Junge, wiste 'ne Beer?« Und kam ein Mädel, so rief er: »Lütt Dirn, Kumm man röwer, ick hebb 'ne Birn.« So ging es viel Jahre, bis lobesam Der von Ribbeck auf Ribbeck zu sterben kam. Er fühlte sein Ende. 's war Herbsteszeit, Wieder lachten die Birnen weit und breit; Da sagte von Ribbeck: »Ich scheide nun ab. Legt mir eine Birne mit ins Grab.« Und drei Tage drauf, aus dem Doppeldachhaus, Trugen von Ribbeck sie hinaus, Alle Bauern und Büdner mit Feiergesicht Sangen »Jesus meine Zuversicht«, Und die Kinder klagten, das Herze schwer: »He is dod nu. Wer giwt uns nu 'ne Beer?« 1 Trugen 1 Turme 12 Und 1 Wer 1 Wieder 1 Zuversicht«, 1 ab, 1 ab. 1 alte, 1 alten 4 auf 2 aus 1 bat, 1 beide 1 bis 1 breit, 1 breit. 1 breit;

( ) = Durchlauf durch Bäume 17 Diese Art des Durchlaufs heißt Inorder-Durchlauf. 6 23 4 7 18 26 Inorder(Wurzel BLinks) Druck(w) Inorder(Wurzel BRechts) w BLinks BRechts Inorder ( ) =

( ) = Druck(w) w BLinks BRechts Präorder Präorder(Wurzel BLinks) Präorder(Wurzel BRechts) 17 6 23 17 # 6 # 4 # 7 # 23 # 18 # 26 4 7 18 26

( ) = Postorder(Wurzel BLinks) w BLinks BRechts Postorder Postorder(Wurzel BRechts) Druck(w) 17 6 23 4 # 7 # 6 # 18 # 26 # 23 # 17 4 7 18 26

Strategie bei allen drei Durchlaufarten heißt Tiefensuche (es wird zunächst in die Tiefe und nicht in die Breite gegangen). Alternative: Breitensuche - trage den Baum schichtenweise ab. Beispiel: 17 17 # 6 # 23 # 4 # 7 # 18 # 26 6 23 4 7 18 26 Implementation?