Algorithmen und Datenstrukturen (Informatik III)



Ähnliche Dokumente
5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren

Programmieren 2 C++ Überblick

Lösung der OOP-Prüfung WS12/13

Grundzüge der objektorientierten Programmierung

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Informatik - Übungsstunde

Polymorphismus 179. Function.h. #include <string>

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

Objektorientierte Programmierung mit C++ SS 2007

Angewandte Mathematik und Programmierung

Klausur: Programmieren II

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

C++ Teil 8. Sven Groß. 5. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 8 5. Dez / 16

Grundlagen der Informatik

1. Hello, I m Francis Docherty. a. No, sorry. I m not. 2. I m sorry. What was your b. I don t think he

Algorithmen und Datenstrukturen

Überladen von Operatoren

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Prüfung Algorithmen und Datenstrukturen I

Informatik - Übungsstunde

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

Programmier-Befehle - Woche 10

Einstieg in die Informatik mit Java

CNC ZUR STEUERUNG VON WERKZEUGMASCHINEN (GERMAN EDITION) BY TIM ROHR

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

Übung Notendarstellung

Einführung in die STL

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 23. Januar 2017

C++ Standardbibliothek

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Assoziative Container in C++ Christian Poulter

Übungsstunde: Informatik 1 D-MAVT

Prüfung Algorithmen und Datenstrukturen I

Programmieren in C++ Templates

C++ atomics, Boost.Lookfree, Hazard-Pointers und die Thread-Hölle

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Vertretungsstunde Englisch 5. Klasse: Grammatik

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Einführung in die STL anhand eines ausgewählten Beispiels

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

p^db=`oj===pìééçêíáåñçêã~íáçå=

Algorithmen & Datenstrukturen Midterm Test 2

Objektorientierung Grundlagen

Name: Klausur Informatik III WS 2003/04

3. Semester : 1. Prüfung

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Materialien zu unseren Lehrwerken

Algorithmen und Datenstrukturen Musterlösung 5

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

Transkript:

BERGISCHE UNIVERSITÄT GESAMTHOCHSCHULE WUPPERTAL GAUSS-STRASSE 20 42097 WUPPERTAL (Korrespondenzanschrift) 42119 WUPPERTAL (Lieferanschrift) TELEX 8 592 262 bughw TELEFAX (0202) 439-2901 TELEFON (0202) 439-1 Fachbereich 7 MATHEMATIK Prof. Dr. Hans-Jürgen Buhl Praktische Informatik / Numerik Algorithmen und Datenstrukturen (Informatik III) e-mail: Juergen.Buhl@math.uni-wuppertal.de WS1999/2000 Übungsblatt 10 Abgabetermin: 2. Februar 2000 Aufgabe 1. Einfach gekettete Listen Testen Sie die folgende Implementierung einer einfach geketteten Liste: // Datei: linkedlist.cc // Version: 1.0 // Autor: Hans-Juergen Buhl // Datum: 17.09.1998 #include <iostream> #include <string> #include <assert.h> #include <stdlib.h> using namespace std; template<class T> class linkedlist struct Knoten T Daten; Knoten *next; Knoten(const T& daten, Knoten *p): Daten(daten), next(p) } *Anfang; public: void clear_all(knoten* abstelle) if (abstelle!= 0) 1

clear_all(abstelle->next); delete abstelle; // danger: dangling pointer at end of restlist, if not used // at starting position of list public: linkedlist(): Anfang(0) ~linkedlist() clear_all(anfang); void push_front(const T& daten) Knoten* temp = new Knoten(daten, Anfang); assert(temp!= 0); Anfang = temp; void pop_front() if (Anfang!= 0) Knoten* temp(anfang); Anfang = Anfang->next; delete temp; } class iterator; friend class iterator; class iterator Knoten* aktuell; public: iterator(knoten* init = 0): aktuell(init) T& operator*() return aktuell->daten; const T& operator*() const return aktuell->daten; iterator& operator++() // praefix if (aktuell!= 0) aktuell = aktuell->next; return *this; iterator operator++(int) // postfix iterator temp = *this; ++*this; return temp; bool operator!=(const iterator& x) const return (aktuell!= x.aktuell); 2

iterator begin() const return iterator(anfang); iterator end() const return iterator(); int main() linkedlist<string> stringlist; stringlist.push_front("erster eingefuegter Listenknoten"); stringlist.push_front("zweiter eingefuegter Listenknoten"); //stringlist.pop_front(); stringlist.push_front("dritter eingefuegter Listernknoten"); //... stringlist.push_front("vierter eingefuegter Listernknoten"); stringlist.push_front("ende!"); linkedlist<string>::iterator pos(stringlist.begin()); for (; pos!= stringlist.end(); pos++) linkedlist<string>::iterator pos2(stringlist.begin()); pos2++; pos2++; pos2++; cout << endl; pos=pos2; for (; pos!= stringlist.end(); pos++) return 0; } Ergänzen Sie eine Methode void clear(), die die ganze Liste löschen soll; vergessen Sie weder delete noch eine sinnvolle Wertzuweisung an das private Attribut Anfang. Konzipieren Sie eine Methode void erase from(iterator p), die das Listenendstück, das an der Stelle p beginnt, löschen soll. Programmieren und testen Sie (auch die Extremfälle). Vergessen Sie nicht, die next-referenz der Vorgängerstelle auf den Wert 0 zu setzen; finden sie diese einmal durch Suchen ab Anfang, ein anderes Mal durch Benutzung eines modifizierten Iterators, der zwei private Attribute aktuell, vorgaenger, einen Observator für vorgaenger,... enthalten soll. Welche Vor- bzw. Nachteile haben die beiden Methoden? Aufgabe 2. Doppelt gekettete Listen Ändern sie die Liste aus Aufgabe 1 mit allen ihren Methoden in der Implementierung auf eine doppelt gekettete Knotenstruktur ab: next, before. 3

Implementieren und testen Sie. Welche Methoden können jetzt (in der Laufzeit) günstiger realisiert werden? Führen Sie diese Änderungen durch und testen Sie. Implementieren Sie den Dekrement-Operator --. Warum ist dieser bei einfach geketteten Listen nicht sinnvoll? Aufgabe 3. Rekursionen in einfach geketteten Listen Schreiben Sie (rekursive) Funktionen, die die Werte aller Listen-Datenfelder einmal in der Reihenfolge vom Beginn bis zum Ende der Liste und ein anderes Mal in der Reihenfolge vom Ende bis zum Beginn ausdruckt. Erzeugen Sie eine 15 Knoten lange Liste mit int-datenfeldern. Schreiben Sie eine (rekursive) Funktion, die die Summe des ersten bis i-ten Listendatenfeldes für i = 1...m ausdruckt (m Zeilen Ausdruck), wobei m die Länge der Liste sein soll. Schreiben Sie analog eine (rekursive) Funktion, die die Summe des m-ten bis i-ten Listendatenfeldes für i = m...1 ausdruckt (m Zeilen Ausdruck), wobei m ebenfalls die Länge der Liste sein soll. Aufgabe 4. STL Die STL stellt eine generische Klasse list zur Verfügung: // Datei: STLlist.cc // Version: 1.0 // Autor: Hans-Juergen Buhl // Datum: 17.09.1998 #include <iostream> #include <string> #include <list> using namespace std; int main() list<string> stringlist; stringlist.push_front("erster eingefuegter Listenknoten"); stringlist.push_front("zweiter eingefuegter Listenknoten"); //... stringlist.push_front("ende!"); list<string>::iterator pos(stringlist.begin()); for (; pos!= stringlist.end(); pos++) typedef list<double> rliste; 4

rliste rl; rl.push_front(1.1); rl.push_front(1.2); rl.push_front(1.3); rl.push_front(1.4); rl.push_front(1.5); rliste::iterator pos(rl.begin()); for(; pos!= rl.end(); pos++) } return 0; Testen Sie dies Beispielprogramm. Informieren Sie sich mittels file:/opt/share/sunwspro/doc5.0/lib/locale/c/html/index.html über die Standard C++ Library 2.0 und insbesondere über die Klasse list: file:/opt/share/sunwspro/doc5.0/lib/locale/c/html/stdlib/stdref/lis 3222.htm Stellen Sie für list eine Übersicht über die vorhandenen Attribute und Methoden mit je einem Kurzanwendungsbeispiel zusammen. 5

------------------------------ Date: Mon, 17 Jan 2000 15:11:39 +0000 From: Brian Randell <Brian.Randell@newcastle.ac.uk> Subject: Bug lists babies as aged 100 Thousands of newborn babies have been listed officially as 100 years old. Computers at English register offices are refusing to recognise the year as 2000 and are printing 1900 on birth certificates. [...] [Source: The (London) *Times*, 17 Jan 2000; The full story is online at: http://www.the-times.co.uk/news/pages/tim/2000/01/17/timnwsnws01034.html?1069542 ] Brian Randell, University of Newcastle, Newcastle upon Tyne, NE1 7RU, UK +44 191 222 7923 http://www.cs.ncl.ac.uk/~brian.randell/ ------------------------------ Date: Mon, 17 Jan 2000 10:58:36 +0000 From: David H Smith <david.h.smith@gecm.com> Subject: Y2K Problems with Flight Sim 2000 Professional Edition? I managed to get Microsoft Flight Sim 2000 Pro Edition for Xmas, great! After installing I went to the Microsoft web site and found an update - of course there was one - 9 megabytes in total. I downloaded it, installed it, everything was fine. A few days later I did my in-frequent disk cleanups, etc. I had not run scandisk for ages so set it off. I was surprised when it announced that it had found a bad file. The file was with one of the Flight Sim 2000 files, and the problem was that it had an invalid date. This problem occurred with all the Flight Sim 2000 files that had come as part of the update I had downloaded. Was it a Y2K problem? I m not sure. Everything worked okay and McAfee Virus Checker didn t complain about funny dates on the files. Of course, it could have been a problem with the disk scan program. Dave Smith ------------------------------ 6