Eine Vokabelschlange. Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
DES-Simulator in JAVA, objektorientiert
Konzepte objektorientierter Systeme
Sortieren mit Binären Bäumen
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Objektorientierung
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.
Einführung in die OOP in Java
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum 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 Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Einfügen am Ende der Liste Vorher: Nachher:. Einfügen am Ende der Liste //Klasse Knoten public Knoten hintenEinfuegen(Datenelement dneu) { nachfolger.
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Thema: Fibonacci-Zahlen
Informatikunterricht mit Java
Struktogramme IF-ELSE FOR – Schleife
Template Pattern Richard Göbel.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundkonzepte Java - Klassendefinition
Rekursive Funktionen (Fakultät)
1.2 Trennung von Struktur und Inhalt
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Abstrakte Klassen und das Interface-Konzept
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Die allgemeine Liste.
Objektorientiertes Modellieren und Programmieren mit Java
Anforderungen an die neue Datenstruktur
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Venusspiegel und Marsschild
Zwei Denkansätze zur Klasse Schlange
Aufgaben zu Rückgabewerten
Musterlösung zur Klausur "Diskrete Mathematik" vom
Der Abschluss einer Schlange
Wahrheitswerte.
Felder in Java.
Allgemeine Befehle für die allgemeine Liste
Grundkurs Informatik 11-13
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Cäsar-Verschlüsselung
Cäsar-Verschlüsselung
Polymorphie Überladen
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
Datenstrukturen und Softwareentwicklung
Implementieren von Klassen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
Grundkurs Informatik 11-13
1. Die rekursive Datenstruktur Liste 1
Heapsort-Algorithmus
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
 Präsentation transkript:

Eine Vokabelschlange

Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt haben, ist ein eher untypisches Beispiel. In den meisten Anwendungen sieht man nach außen hin nicht, ob intern eine Schlange verwendet wird. Das erfährt man erst, wenn man den Code genauer ansieht. Inhalt der Knoten kann alles mögliche sein: Piktogramme wie in unserem Ausgangsbeispiel, Zahlen, Zeichenketten, Wahrheitswerte, Klassen aller Art oder eben ganz konkret Vokabeln mit fremdsprachlicher und deutscher Bedeutung und ein paar Bewertungen.

Die Klasse Vokabel Eine Vokabel besteht aus einer fremdsprachlichen Bedeutung, einer deutschen Bedeutung, einer Punktzahl, nach der sie aufsteigend in die Schlange eingeordnet wird, und einem Wissensstand, der festlegt, wie häufig die Vokabel beim Üben wiederholt wird. public class Vokabel { private String fremd; private String deutsch; private double punkte; private double wissen; […] }

Die Klasse Knoten Ein Knoten hat als Inhalt eine Vokabel und als Nachfolger ein Schlangenelement (d. h. wieder einen Knoten oder den Abschluss der Schlange) public class Knoten extends Schlangenelement { private Vokabel inhalt; private Schlangenelement nachfolger; […] }

Die Methode gibGeringstesWissen () Klasse Schlange: public double gibGeringstesWissen () { return erstesSchlangenelement.gibGeringstesWissen (); } Klasse Schlangenelement: public abstract double gibGeringstesWissen (); Klasse Abschluss: public double gibGeringstesWissen () { return Double.POSITIVE_INFINITY; } Klasse Knoten: public double gibGeringstesWissen () { double geringstesWissenHinterMir = nachfolger.gibGeringstesWissen (); if (inhalt.gibWissen () < geringstesWissenHinterMir) { return inhalt.gibWissen (); } else { return geringstesWissenHinterMir; }

Die Methode gibGesamtesWissen () Klasse Schlangenelement: public abstract double gibGesamtesWissen (); Klasse Abschluss: public double gibGesamtesWissen () { return 0; } Klasse Knoten: public double gibGesamtesWissen () { return inhalt.gibWissen () + nachfolger.gibGesamtesWissen (); } Rekursive Methoden werden in der Klasse Schlangenelement einfach nur abstrakt deklariert und nicht implementiert. Wenn die Methode wie hier einen Rückgabewert hat, dann erhält dieser im Abschluss den einfachstmöglichen Wert. Der gesamte Wissensstand ab einem Knoten ist sein eigener Wissensstand plus der Wissensstand ab seinem Nachfolger.

Die Methode gibDurchschnittlichesWissen () Klasse Schlange: public double gibDurchschnittlichesWissen () { int schlangenLaenge = gibLaenge (); if (schlangenLaenge > 0) { return erstesSchlangenelement.gibGesamtesWissen () / schlangenLaenge; } else { return Double.POSITIVE_INFINITY; } In einer nichtleeren Schlange erhalten wir den durchschnittlichen Wissensstand, indem wir den gesamten Wissensstand durch die Länge der Schlange teilen. In einer leeren Schlange ist die einzig sinnvolle Definition des durchschnittlichen Wissens „plus unendlich“.

Die Methode loescheWissenUeber10000 () Klasse Schlange: public void loescheWissenUeber10000 () { erstesSchlangenelement = erstesSchlangenelement.loescheWissenUeber10000 (); } Klasse Schlangenelement: public abstract Schlangenelement loescheWissenUeber10000 (); Klasse Abschluss: public Schlangenelement loescheWissenUeber10000 () { return this; } Das neue erste Schlangenelement erhält man, indem man den Anfang der Restschlange heranzieht, die entsteht, wenn man alle Knoten mit Wissen größer als löscht. Aus dem Abschluss wird nichts gelöscht. Darum macht sich der Abschluss selbst zum (alten und) neuen Nachfolger seines Vorgängers.

Klasse Knoten: public Schlangenelement loescheWissenUeber10000 () { if (inhalt.gibWissen () > 10000) { return nachfolger.loescheWissenUeber10000 (); } else { nachfolger = nachfolger.loescheWissenUeber10000 (); return this; } Wir ermitteln die Restschlange, die entsteht, wenn man ab dem Nachfolger alle Knoten mit Wissen größer als löscht. Wenn der aktuelle Knoten selbst einen Wissensstand größer hat, dann löscht er sich, indem er den Anfang der Restschlange zum Nachfolger seines Vorgängers macht. Wenn er jedoch einen kleineren Wissenstand hat, dann speichert er den Anfang der Restschlange als seinen Nachfolger und macht sich selbst zum (alten und) neuen Nachfolger seines Vorgängers.

Die Methode fremdAlsAIListe () Klasse Schlangenelement: public abstract String fremdAlsAIListe (); Klasse Abschluss: public String fremdAlsAIListe () { return ""; } Klasse Knoten: public String fremdAlsAIListe () { return "\"" + inhalt.gibFremd () + "\"," + nachfolger.fremdAlsAIListe (); } Um eine Liste der fremdsprachlichen Bedeutungen für den App Inventor zu erzeugen, müssen wir bei jedem Knoten zuerst ein Anführungszeichen, dann seine eigene fremdsprachliche Bedeutung, dann ein Anführungszeichen und ein Komma und dann alle fremdsprachlichen Bedeutungen ab seinem Nachfolger bestimmen.

Klasse Schlange: public String fremdAlsAIListe () { String listeMitKommata = erstesSchlangenelement.fremdAlsAIListe (); if (listeMitKommata.equals ("")) { return "[]"; } else { return "[" + listeMitKommata.substring (0, listeMitKommata.length () - 1) + "]"; } Insgesamt bauen wir damit rekursiv eine Liste mit Kommata. Wenn die Liste leer ist, müssen wir dem App Inventor [] melden. Wenn sie nicht leer ist, müssen wir sie in eckige Klammern einschließen und das letzte Zeichen (ein überflüssiges Komma) löschen.