Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012

Größe: px
Ab Seite anzeigen:

Download "Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012"

Transkript

1 Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012 Java 1

2 Inhalt 1. Vorwort Basis-Sprachelemente und -Datentypen Klassendiagramme... 5 Klassen... 5 Beziehungen zwischen Klassen Klassendokumentationen Lineare Strukturen... 8 Die Klasse Queue... 8 Die Klasse Stack... 9 Die Klasse List Baumstrukturen Die Klasse BinaryTree Die Klasse Item Die Klasse BinarySearchTree Graphen Die Klasse GraphNode Die Klasse Graph Netzstrukturen Die Klasse Connection Die Klasse Client Die Klasse Server Datenbanken Automaten, Grammatiken Beispiele Beispiel für die Anwendung der Klasse BinaryTree Beispiel für die Anwendung der Klasse BinarySearchTree Beispiel für die Anwendung der Klassen Graph und GraphNode Beispiel für die Anwendung der Klassen Client und Server Beispiel für eine Datenbankanwendung

3 1. Vorwort Grundlage für die zentral gestellten schriftlichen Aufgaben der Abiturprüfung sind neben dem gültigen Lehrplan die Vorgaben für das Zentralabitur Diese beschreiben die inhaltlichen Schwerpunkte, die in der Qualifikationsphase der gymnasialen Oberstufe und den entsprechenden Semestern der Weiterbildungskollegs im Unterricht behandelt werden müssen. Außerdem enthalten sie Hinweise für den Fachlehrer zu der von ihm vorzunehmenden Auswahl der Abituraufgaben seines Kurses. Diese Materialien sollen dazu dienen, die Vorgaben zu präzisieren und zu ergänzen, um Fehlinterpretationen zu vermeiden, Fragen zu klären und dem Fachlehrer weitere fachliche Hinweise, Beispiele und Materialien zur unterrichtlichen Vorbereitung der Schülerinnen und Schüler auf die zentrale Abiturprüfung an die Hand zu geben. Der Inhalt dieser Materialien wurde mit den Fachwissenschaftlern und den Fachdidaktikern der unabhängigen Kommission für das Zentralabitur im Fach Informatik abgestimmt. In Kapitel 2 werden die Basis-Sprachelemente der Programmiersprache Java angegeben, die den Abiturienten bekannt sein müssen. Darüber hinausgehende spezifische Java- Klassen werden in den Abituraufgaben nicht verwendet. Insbesondere werden keine Programmierkenntnisse zur Gestaltung einer grafischen Benutzeroberfläche benötigt. In Kapitel 3 werden die für die Abiturprüfung relevanten Klassendiagramme und ihre Beziehungen dargestellt. Die in der UML beschriebenen Klassendiagramme wurden für den Schulbereich didaktisch reduziert, indem lediglich die gerichtete Assoziation (bisher als "kennt-beziehung" bezeichnet) und die Vererbung (bisher "ist-beziehung" genannt) als Beziehungen zwischen Klassen verwendet werden. Auf die in den alten Materialien und Aufgaben benutzte "hat-beziehung" wird aus Vereinfachungsgründen und um aufgetretene Missverständnisse und Unklarheiten zu vermeiden in Zukunft verzichtet. Kapitel 4 enthält die Dokumentationen der in den Aufgaben des Zentralabiturs verwendeten Klassen zu linearen Strukturen, Baumstrukturen, Graphen sowie den Netzstrukturen. Diese Klassen müssen intensiv im Unterricht besprochen und im Anwendungskontext genutzt werden. In einigen Klassen wurden gegenüber der letzten Fassung dieser Materialien Methoden ergänzt oder ihre Namen oder Funktionalität geändert. Die Dokumentationen enthalten jetzt keine Vor - und Nachbedingungen für die Anwendung der Klassenmethoden mehr, sondern beschreiben deren Funktionalität inklusive aller Sonderfälle. Auf das Auslösen von Ausnahmen (Exceptions) wurde bei der Implementation der Klassen aus didaktischen Gründen verzichtet. Die Kapitel 5 und 6 enthalten zusätzliche fachliche Hinweise und Beispiele zu den Themenbereichen "Datenbanken und Automaten/Grammatiken. Die dort verwendete Terminologie ist auch für die Abiturklausur maßgeblich. In Kapitel 7 findet man einige Anwendungsbeispiele zu den Klassen aus Kapitel 4. Es handelt sich nicht um Abituraufgaben, sondern Übungen, die selbstverständlich auch im Unterricht verwendet werden dürfen. Die Implementationen zu den in diesen Materialien dokumentierten Java-Klassen sowie die Quelltexte der Beispielprogramme können vom Server heruntergeladen werden. Für Hinweise auf Fehler in dieser Schrift oder auch inhaltliche Verbesserungsvorschläge wären wir dankbar. (klaus.dingemann@brms.nrw.de) Klaus Dingemann, Fachkoordinator für Informatik 3

4 2. Basis-Sprachelemente und -Datentypen Kenntnisse über Java-spezifische Klassen auch zur Gestaltung einer grafischen Benutzungsoberfläche werden bei den Abituraufgaben nicht vorausgesetzt. Sprachelemente Klassendefinitionen Beziehungen zwischen Klassen o gerichtete Assoziation o Vererbung Attribute und Methoden (mit Parametern und Rückgabewerten) Wertzuweisungen Verzweigungen (if -, switch - ) Schleifen (while -, for -, do - while) Datentypen Datentyp Operationen Methoden int +, -, *, /, %, <, >, <=, >=,==,!= double +, -, *, /, <, >, <=, >=,==,!= Methoden der Klasse Math Integer.toString(int i) Wrapper-Klasse Methoden der Klasse Math Double.toString(double d) Double.NaN Double.isNaN Wrapper-Klasse boolean &&,,!, ==,!=, Wrapper-Klasse char <, >, <=, >=,==,!= Wrapper-Klasse Klasse String Umwandlung in String length() indexof(string str) substring(int beginindex) substring (int beginind, int endind) charat(int index) equals(object anobject) compareto(string anotherstring) Typumwandlungen in int und double (parse) Statische Strukturen Ein- und zweidimensionale Felder (arrays) von einfachen Datentypen und Objekten 4

5 3. Klassendiagramme Klassendiagramme beschreiben die vorhandenen Klassen mit ihren Attributen und Methoden sowie die Beziehungen der Klassen untereinander. Klassen Klassen werden durch Rechtecke dargestellt, die entweder nur den Namen der Klasse tragen oder zusätzlich auch Attribute und / oder Methoden enthalten. Attribute und Methoden können zusätzliche Angaben zu Parametern und Sichtbarkeit (public (+), private (-)) besitzen. Klausur - name: String - punkte: int - note: String + Klausur(pName: String) + setzepunkte(ppunkte: int) + setzenote(pnote: String) + gibname(): String + gibpunkte(): int + gibnote(): String Bei abstrakten Klassen, also Klassen, von denen kein Objekt erzeugt werden kann, wird unter den Klassennamen im Diagramm {abstract geschrieben. Abstrakte Methoden, also Methoden, für die keine Implementierungen angegeben werden und die nicht aufgerufen werden können, werden in Kursivschrift dargestellt. Bei einer handschriftlichen Darstellung werden sie mit einer Wellenlinie unterschlängelt. Item {abstract + isequal(pitem: Item): boolean + isless(pitem: Item): boolean + isgreater(pitem: Item): boolean Beziehungen zwischen Klassen Assoziation Eine gerichtete Assoziation von einer Klasse A zu einer Klasse B modelliert, dass Objekte der Klasse B in einer Beziehung zu Objekten der Klasse A stehen bzw. stehen können. Bei einer Assoziation kann man angeben, wie viele Objekte der Klasse B in einer solchen Beziehung zu einem Objekt der Klasse A stehen bzw. stehen können. Die Zahl nennt man Multiplizität. Mögliche Multiplizitäten: 1 genau ein assoziiertes Objekt 0..1 kein oder ein assoziiertes Objekt 0..* beliebig viele assoziierte Objekte 1..* mindestens ein, beliebig viele assoziierte Objekte 5

6 Schreibtisch 0..* Klausur Ein Objekt der Klasse Schreibtisch steht zu keinem oder beliebig vielen Objekten der Klasse Klausur in Beziehung. Vererbung Die Vererbung beschreibt die Beziehung zwischen einer allgemeineren Klasse (Oberklasse) und einer spezialisierten Klasse (Unterklasse). Die Unterklasse stellt alle öffentlichen Attribute und alle nicht überschriebenen öffentlichen Methoden der Oberklasse zur Verfügung. In der Unterklasse können Attribute und Methoden ergänzt oder auch überschrieben werden. Leistungsueberpruefung name: String note: String Klausur punkte: int Die Klasse Klausur spezialisiert hier die Klasse Leistungsueberpruefung, da eine Klausur das Ergebnis zusätzlich zur Note auch in Punkten ausweist. Entwurfsdiagramm Bei einem Entwurf werden die in der ssituation vorkommenden Objekte identifiziert und ihren Klassen zugeordnet. Das Entwurfsdiagramm enthält Klassen und ihre Beziehungen mit Multiplizitäten. Als Beziehungen können Vererbung und gerichtete Assoziationen gekennzeichnet werden. Gegebenenfalls werden wesentliche Attribute und / oder Methoden angegeben. Die Darstellung ist programmiersprachenunabhängig ohne Angabe eines konkreten Datentyps, es werden lediglich Zahl, Text, Datenansammlung und Wahrheitswert unterschieden. n werden durch den Datentyp des Rückgabewertes gekennzeichnet. Leistungsueberpruefung name: Text note: Text Schreibtisch notentabelle: Datenansammlung legevomstapellinksaufschreibtisch legevomschreibtischnachrechts legevomstapellinksnachrechts legevomstapelrechtsnachlinks istschreibtischleer: Wahrheitswert linkerheftstapel 0..* rechterheftstapel 0..* aktuellesheft 0..1 Klausur punkte: Zahl 6

7 Implementationsdiagramm Ein Implementationsdiagramm ergibt sich durch Präzisierung eines Entwurfsdiagramms und orientiert sich stärker an der verwendeten Programmiersprache. Für die im Entwurfsdiagramm angegebenen Datensammlungen werden konkrete Datenstrukturen gewählt, deren Inhaltstypen in Form von Kommentardiagrammen angegeben werden. Die Attribute werden mit den in der Programmiersprache (hier Java) verfügbaren Datentypen versehen und die Methoden mit Parametern incl. ihrer Datentypen. Bei den in dieser Schrift dokumentierten Klassen (List, BinaryTree,..) wird auf die Angabe der Attribute und der Methoden verzichtet. Beispiel für ein Implementationsdiagramm mit Assoziationen und Vererbung Inhaltsobjekt Klausur Schreibtisch - notentab: int[][] - anzahlklausuren: int + Schreibtisch(pNotentab: Notentabelle) + neueklausur(pname: String) + legevomstapellinksaufschreibtisch() + legevomschreibtischnachrechts() + iststapelrechtsleer(): boolean + iststapellinksleer(): boolean + legevomstapellinksnachrechts() + legevomstapelrechtsnachlinks() + bewerteaktuellesheft(ppunkte: int) + istschreibtischleer(): boolean - linkerheftstapel - rechterheftstapel - name: String - note: String Stack Leistungsueberpruefung + Leistungsueberpruefung(pName: String) + setzenote(pnote: String) + gibname(): String + gibnote(): String - aktuellesheft - punkte: int Klausur + Klausur(pName: String) + setzepunkte(ppunkte: int) + gibpunkte(): int Erläuterung: Bezeichner der Attribute, durch die die Assoziationen realisiert werden, stehen an den Pfeilen. Objekte der Klasse Stack verwalten Objekte der Klasse Object. Der Kommentar an der Klasse Stack verdeutlicht, welche Inhaltsobjekte im Stack hier verwendet werden sollen. Das Rechteck um das Klassendiagramm zeigt an, dass alle Klassen im gleichen Namensraum liegen. 7

8 4. Klassendokumentationen In Java werden Objekte über Referenzen verwaltet, d.h., eine Variable pobject von der Klasse Object enthält eine Referenz auf das entsprechende Objekt. Zur Vereinfachung der Sprechweise werden jedoch im Folgenden die Referenz und das referenzierte Objekt sprachlich nicht unterschieden Lineare Strukturen Die Klasse Queue Objekte der Klasse Queue (Warteschlange) verwalten beliebige Objekte nach dem First- In-First-Out-Prinzip, d.h., das zuerst abgelegte Objekt wird als erstes wieder entnommen. Dokumentation der Klasse Queue Konstruktor Queue() Eine leere Schlange wird erzeugt. boolean isempty() Die liefert den Wert true, wenn die Schlange keine Objekte enthält, sonst liefert sie den Wert false. void enqueue(object pobject) Das Objekt pobject wird an die Schlange angehängt. Falls pobject gleich null ist, bleibt die Schlange unverändert. void dequeue() Das erste Objekt wird aus der Schlange entfernt. Falls die Schlange leer ist, wird sie nicht verändert. Object front() Die liefert das erste Objekt der Schlange. Die Schlange bleibt unverändert. Falls die Schlange leer ist, wird null zurück gegeben. 8

9 Die Klasse Stack Objekte der Klasse Stack (Keller, Stapel) verwalten beliebige Objekte nach dem Last-In- First-Out-Prinzip, d.h., das zuletzt abgelegte Objekt wird als erstes wieder entnommen. Dokumentation der Klasse Stack Konstruktor Stack() Ein leerer Stapel wird erzeugt. boolean isempty() Die liefert den Wert true, wenn der Stapel keine Objekte enthält, sonst liefert sie den Wert false. void push(object pobject) Das Objekt pobject wird oben auf den Stapel gelegt. Falls pobject gleich null ist, bleibt der Stapel unverändert. void pop() Das zuletzt eingefügte Objekt wird von dem Stapel entfernt. Falls der Stapel leer ist, bleibt er unverändert. Object top() Die liefert das oberste Stapelobjekt. Der Stapel bleibt unverändert. Falls der Stapel leer ist, wird null zurück gegeben. 9

10 Die Klasse List Objekte der Klasse List verwalten beliebig viele, linear angeordnete Objekte. Auf höchstens ein Listenobjekt, aktuelles Objekt genannt, kann jeweils zugegriffen werden. Wenn eine Liste leer ist, vollständig durchlaufen wurde oder das aktuelle Objekt am Ende der Liste gelöscht wurde, gibt es kein aktuelles Objekt. Das erste oder das letzte Objekt einer Liste können durch einen zum aktuellen Objekt gemacht werden. Außerdem kann das dem aktuellen Objekt folgende Listenobjekt zum neuen aktuellen Objekt werden. Das aktuelle Objekt kann gelesen, verändert oder gelöscht werden. Außerdem kann vor dem aktuellen Objekt ein Listenobjekt eingefügt werden. Dokumentation der Klasse List Konstruktor List() Eine leere Liste wird erzeugt. boolean isempty() Die liefert den Wert true, wenn die Liste keine Objekte enthält, sonst liefert sie den Wert false. boolean hasaccess() Die liefert den Wert true, wenn es ein aktuelles Objekt gibt, sonst liefert sie den Wert false. void next() Falls die Liste nicht leer ist, es ein aktuelles Objekt gibt und dieses nicht das letzte Objekt der Liste ist, wird das dem aktuellen Objekt in der Liste folgende Objekt zum aktuellen Objekt, andernfalls gibt es nach Ausführung des s kein aktuelles Objekt, d.h. hasaccess() liefert den Wert false. void tofirst() Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts. void tolast() Falls die Liste nicht leer ist, wird das letzte Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts. Object getobject() Falls es ein aktuelles Objekt gibt (hasaccess() == true), wird das aktuelle Objekt zurückgegeben, andernfalls (hasaccess()== false) gibt die den Wert null zurück. void setobject(object pobject) Falls es ein aktuelles Objekt gibt (hasaccess() == true) und pobject ungleich null ist, wird das aktuelle Objekt durch pobject ersetzt. Sonst bleibt die Liste unverändert. 10

11 void append(object pobject) Ein neues Objekt pobject wird am Ende der Liste eingefügt. Das aktuelle Objekt bleibt unverändert. Wenn die Liste leer ist, wird das Objekt pobject in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt (hasaccess() == false). Falls pobject gleich null ist, bleibt die Liste unverändert. void insert(object pobject) Falls es ein aktuelles Objekt gibt (hasaccess() == true), wird ein neues Objekt vor dem aktuellen Objekt in die Liste eingefügt. Das aktuelle Objekt bleibt unverändert. Falls die Liste leer ist und es somit kein aktuelles Objekt gibt (hasaccess() == false), wird pobject in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt. Falls es kein aktuelles Objekt gibt (hasaccess() == false) und die Liste nicht leer ist oder pobject gleich null ist, bleibt die Liste unverändert. void concat(list plist) Die Liste plist wird an die Liste angehängt. Anschließend wird plist eine leere Liste. Das aktuelle Objekt bleibt unverändert. Falls plist null oder eine leere Liste ist, bleibt die Liste unverändert. void remove() Falls es ein aktuelles Objekt gibt (hasaccess() == true), wird das aktuelle Objekt gelöscht und das Objekt hinter dem gelöschten Objekt wird zum aktuellen Objekt. Wird das Objekt, das am Ende der Liste steht, gelöscht, gibt es kein aktuelles Objekt mehr (hasaccess() == false). Wenn die Liste leer ist oder es kein aktuelles Objekt gibt (hasaccess() == false), bleibt die Liste unverändert. 11

12 4.2 Baumstrukturen Die Klasse BinaryTree Mithilfe der Klasse BinaryTree können beliebig viele Inhaltsobjekte in einem Binärbaum verwaltet werden. Ein Objekt der Klasse stellt entweder einen leeren Baum dar oder verwaltet ein Inhaltsobjekt sowie einen linken und einen rechten Teilbaum, die ebenfalls Objekte der Klasse BinaryTree sind. Dokumentation der Klasse BinaryTree Konstruktor BinaryTree() Nach dem Aufruf des Konstruktors existiert ein leerer Binärbaum. Konstruktor BinaryTree(Object pobject) Wenn der Parameter pobject ungleich null ist, existiert nach dem Aufruf des Konstruktors der Binärbaum und hat pobject als Inhaltsobjekt und zwei leere Teilbäume. Falls der Parameter null ist, wird ein leerer Binärbaum erzeugt. Konstruktor BinaryTree(Object pobject, BinaryTree plefttree, BinaryTree prighttree) Wenn der Parameter pobject ungleich null ist, wird ein Binärbaum mit pobject als Inhaltsobjekt und den beiden Teilbäume plefttree und prighttree erzeugt. Sind plefttree oder prighttree gleich null, wird der entsprechende Teilbaum als leerer Binärbaum eingefügt. Wenn der Parameter pobject gleich null ist, wird ein leerer Binärbaum erzeugt. boolean isempty() Diese liefert den Wahrheitswert true, wenn der Binärbaum leer ist, sonst liefert sie den Wert false. void setobject(object pobject) Wenn der Binärbaum leer ist, wird der Parameter pobject als Inhaltsobjekt sowie ein leerer linker und rechter Teilbaum eingefügt. Ist der Binärbaum nicht leer, wird das Inhaltsobjekt durch pobject ersetzt. Die Teilbäume werden nicht geändert. Wenn pobject null ist, bleibt der Binärbaum unverändert. Object getobject() Diese liefert das Inhaltsobjekt des Binärbaums. Wenn der Binärbaum leer ist, wird null zurückgegeben. void setlefttree(binarytree ptree) Wenn der Binärbaum leer ist, wird ptree nicht angehängt. Andernfalls erhält der Binärbaum den übergebenen Baum als linken Teilbaum. Falls der Parameter null ist, ändert sich nichts. 12

13 void setrighttree(binarytree ptree) Wenn der Binärbaum leer ist, wird ptree nicht angehängt. Andernfalls erhält der Binärbaum den übergebenen Baum als rechten Teilbaum. Falls der Parameter null ist, ändert sich nichts. BinaryTree getlefttree() Diese liefert den linken Teilbaum des Binärbaumes. Der Binärbaum ändert sich nicht. Wenn der Binärbaum leer ist, wird null zurückgegeben. BinaryTree getrighttree() Diese liefert den rechten Teilbaum des Binärbaumes. Der Binärbaum ändert sich nicht. Wenn der Binärbaum leer ist, wird null zurückgegeben. 13

14 Die Klasse Item Die Klasse Item ist abstrakte Oberklasse aller Klassen, deren Objekte in einen Suchbaum (BinarySearchTree) eingefügt werden sollen. Die Ordnungsrelation wird in den Unterklassen von Item durch Überschreiben der drei abstrakten Methoden isequal, isgreater und isless festgelegt. Die Klasse Item gibt folgende abstrakte Methoden vor: abstract boolean isequal(item pitem) Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewünschten Ordnungsrelation gleich dem Objekt pitem ist, wird true geliefert. Sonst wird false geliefert. abstract boolean isless(item pitem) Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewünschten Ordnungsrelation kleiner als das Objekt pitem ist, wird true geliefert. Sonst wird false geliefert. abstract boolean isgreater(item pitem) Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewünschten Ordnungsrelation größer als das Objekt pitem ist, wird true geliefert. Sonst wird false geliefert. 14

15 Die Klasse BinarySearchTree In einem Objekt der Klasse BinarySearchTree werden beliebig viele Objekte in einem Binärbaum (binärer Suchbaum) entsprechend einer Ordnungsrelation verwaltet. Ein Objekt der Klasse stellt entweder einen leeren Baum dar oder verwaltet ein Inhaltsobjekt sowie einen linken und einen rechten Teilbaum, die ebenfalls Objekte der Klasse BinarySearchTree sind. Dabei gilt: Die Inhaltsobjekte sind Objekte einer Unterklasse von Item, in der durch Überschreiben der drei Vergleichsmethoden isless, isequal, isgreater (s. Item) eine eindeutige Ordnungsrelation festgelegt sein muss. Alle Objekte im linken Teilbaum sind kleiner als das Inhaltsobjekt des Binärbaumes. Alle Objekte im rechten Teilbaum sind größer als das Inhaltsobjekt des Binärbaumes. Diese Bedingung gilt auch in beiden Teilbäumen. Die Klasse BinarySearchTree ist keine Unterklasse der Klasse BinaryTree, sodass deren Methoden nicht zur Verfügung stehen. Dokumentation der Klasse BinarySearchTree Konstruktor BinarySearchTree() Der Konstruktor erzeugt einen leeren Suchbaum. boolean isempty() Diese liefert den Wahrheitswert true, wenn der Suchbaum leer ist, sonst liefert sie den Wert false. void insert(item pitem) Falls ein bezüglich der verwendeten Vergleichsmethode isequal mit pitem übereinstimmendes Objekt im geordneten Baum enthalten ist, passiert nichts. Andernfalls wird das Objekt pitem entsprechend der vorgegebenen Ordnungsrelation in den Baum eingeordnet. Falls der Parameter null ist, ändert sich nichts. Item search(item pitem) Falls ein bezüglich der verwendeten Vergleichsmethode isequal mit pitem übereinstimmendes Objekt im binären Suchbaum enthalten ist, liefert die dieses, ansonsten wird null zurückgegeben. Falls der Parameter null ist, wird null zurückgegeben. void remove(item pitem) Falls ein bezüglich der verwendeten Vergleichsmethode isequal mit pitem übereinstimmendes Objekt im binären Suchbaum enthalten ist, wird dieses entfernt. Falls der Parameter null ist, ändert sich nichts. Item getitem() Diese liefert das Inhaltsobjekt des Suchbaumes. Wenn der Suchbaum leer ist, wird null zurückgegeben. 15

16 BinarySearchTree getlefttree() Diese liefert den linken Teilbaum des binären Suchbaumes. Der binäre Suchbaum ändert sich nicht. Wenn er leer ist, wird null zurückgegeben. BinarySearchTree getrighttree() Diese liefert den rechten Teilbaum des Suchbaumes. Der Suchbaum ändert sich nicht. Wenn er leer ist, wird null zurückgegeben. 16

17 4.3 Graphen Graphen Ein ungerichteter Graph besteht aus einer Menge von Knoten und einer Menge von Kanten. Die Kanten verbinden jeweils zwei Knoten und können ein Gewicht haben. Die Klasse GraphNode Objekte der Klasse GraphNode sind Knoten eines Graphen. Ein Knoten hat einen Namen und kann markiert werden. Dokumentation der Klasse GraphNode Konstruktor GraphNode(String pname) Ein Knoten mit dem Namen pname wird erzeugt. Der Knoten ist nicht markiert. void mark() Der Knoten wird markiert, falls er nicht markiert ist, sonst bleibt er unverändert. void unmark() Die Markierung des Knotens wird entfernt, falls er markiert ist, sonst bleibt er unverändert. boolean ismarked() Die liefert den Wert true, wenn der Knoten markiert ist, sonst liefert sie den Wert false. String getname() Die liefert den Namen des Knotens. 17

18 Die Klasse Graph Objekte der Klasse Graph sind ungerichtete, gewichtete Graphen. Der Graph besteht aus Knoten, die Objekte der Klasse GraphNode sind, und Kanten, die Knoten miteinander verbinden. Die Knoten werden über ihren Namen eindeutig identifiziert. Dokumentation der Klasse Graph Konstruktor Graph() Ein neuer Graph wird erzeugt. Er enthält noch keine Knoten. boolean isempty() Die liefert true, wenn der Graph keine Knoten enthält, andernfalls liefert die false. void addnode(graphnode pnode) Der Knoten pnode wird dem Graphen hinzugefügt. Falls bereits ein Knoten mit gleichem Namen im Graphen existiert, wird dieser Knoten nicht eingefügt. Falls pnode null ist, verändert sich der Graph nicht. boolean hasnode(string pname) Die liefert true, wenn ein Knoten mit dem Namen pname im Graphen existiert. Sonst wird false zurück gegeben. GraphNode getnode(string pname) Die liefert den Knoten mit dem Namen pname zurück. Falls es keinen Knoten mit dem Namen im Graphen gibt, wird null zurück gegeben. void removenode(graphnode pnode) Falls pnode ein Knoten des Graphen ist, so werden er und alle mit ihm verbundenen Kanten aus dem Graphen entfernt. Sonst wird der Graph nicht verändert. void addedge(graphnode pnode1, GraphNode pnode2, double pweight) Falls eine Kante zwischen pnode1 und pnode2 noch nicht existiert, werden die Knoten pnode1 und pnode2 durch eine Kante verbunden, die das Gewicht pweight hat. pnode1 ist also Nachbarknoten von pnode2 und umgekehrt. Falls eine Kante zwischen pnode1 und pnode2 bereits existiert, erhält sie das Gewicht pweight. Falls einer der Knoten pnode1 oder pnode2 im Graphen nicht existiert oder null ist, verändert sich der Graph nicht. boolean hasedge(graphnode pnode1,graphnode pnode2) Die liefert true, falls eine Kante zwischen pnode1 und pnode2 existiert, sonst liefert die false. 18

19 void removeedge(graphnode pnode1,graphnode pnode2) Falls pnode1 und pnode2 nicht null sind und eine Kante zwischen pnode1 und pnode2 existiert, wird die Kante gelöscht. Sonst bleibt der Graph unverändert. double getedgeweight(graphnode pnode1, GraphNode pnode2) Die liefert das Gewicht der Kante zwischen pnode1 und pnode2. Falls die Kante nicht existiert, wird Double.NaN (not a number) zurück gegeben. void resetmarks() Alle Knoten des Graphen werden als unmarkiert gekennzeichnet. boolean allnodesmarked() Die liefert den Wert true, wenn alle Knoten des Graphen markiert sind, sonst liefert sie den Wert false. Wenn der Graph leer ist, wird true zurückgegeben. List getnodes() Die liefert eine Liste, die alle Knoten des Graphen enthält. List getneighbours(graphnode pnode) Die liefert eine Liste, die alle Nachbarknoten des Knotens pnode enthält. 19

20 4.4 Netzstrukturen Die Klasse Connection Objekte der Klasse Connection ermöglichen eine Netzwerkverbindung mit dem TCP/IP- Protokoll. Es können nach Verbindungsaufbau zu einem Server Zeichenketten (Strings) gesendet und empfangen werden. Zur Vereinfachung geschieht dies zeilenweise, d. h., beim Senden einer Zeichenkette wird ein Zeilentrenner ergänzt und beim Empfangen wird er entfernt. Eine Fehlerbehandlung, z.b. ein Zugriff auf eine bereits geschlossene Verbindung, ist in dieser Klasse aus Gründen der Vereinfachung nicht vorgesehen. Dokumentation der Klasse Connection Konstruktor Connection(String pserverip, int pserverport) Es wird eine Verbindung zum durch IP-Adresse und Portnummer angegebenen Server aufgebaut, so dass Daten gesendet und empfangen werden können. void send(string pmessage) Die angegebene Nachricht pmessage wird - um einen Zeilentrenner erweitert - an den Server versandt. String receive() Es wird auf eine eingehende Nachricht vom Server gewartet und diese Nachricht zurückgegeben, wobei der vom Server angehängte Zeilentrenner entfernt wird. Während des Wartens ist der ausführende Prozess blockiert. void close() Die Verbindung wird getrennt und kann nicht mehr verwendet werden. 20

21 Die Klasse Client Über die Klasse Client werden Netzwerkverbindungen mit dem TCP/IP-Protokoll ermöglicht. Es können - nach Verbindungsaufbau zu einem Server - Zeichenketten (Strings) gesendet und empfangen werden, wobei der Empfang nebenläufig geschieht. Zur Vereinfachung geschieht dies zeilenweise, d. h., beim Senden einer Zeichenkette wird ein Zeilentrenner ergänzt und beim Empfangen wird er entfernt. Die empfangene Nachricht wird durch eine Ereignisbehandlungsmethode verarbeitet, die in Unterklassen überschrieben werden muss. Eine Fehlerbehandlung ist in dieser Klasse aus Gründen der Vereinfachung nicht vorgesehen. Dokumentation der Klasse Client Konstruktor Client(String pserverip, int pserverport) Es wird eine Verbindung zum durch IP-Adresse und Portnummer angegebenen Server aufgebaut, so dass Zeichenketten gesendet und empfangen werden können. void send(string pmessage) Die angegebene Nachricht pmessage wird - um einen Zeilentrenner erweitert - an den Server versandt. void processmessage(string pmesssage) Nachdem der Server die angegebene Nachricht pmesssage gesendet hat wurde der Zeilentrenner entfernt. Der Client kann auf die Nachricht pmesssage in dieser Methode reagieren. Allerdings enthält diese Methode keine Anweisungen und muss in Unterklassen überschrieben werden, damit die Nachricht verarbeitet werden kann. void close() Die Verbindung zum Server wird getrennt und kann nicht mehr verwendet werden. 21

22 Die Klasse Server Über die Klasse Server ist es möglich, eigene Serverdienste anzubieten, so dass Clients Verbindungen gemäß dem TCP/IP-Protokoll hierzu aufbauen können. Nachrichten werden grundsätzlich zeilenweise verarbeitet, d. h., beim Senden einer Zeichenkette wird ein Zeilentrenner ergänzt und beim Empfangen wird er entfernt. Verbindungsaufbau, Nachrichtenempfang und Verbindungsende geschehen nebenläufig. Durch Überschreiben der entsprechenden Methoden kann der Server auf diese Ereignisse reagieren. Eine Fehlerbehandlung ist in dieser Klasse aus Gründen der Vereinfachung nicht vorgesehen. Dokumentation der Klasse Server Konstruktor Server(int pportnr) Nach dem Aufruf dieses Konstruktors bietet ein Server seinen Dienst über die angegebene Portnummer an. Clients können sich nun mit dem Server verbinden. void closeconnection(string pclientip, int pclientport) Unter der Voraussetzung, dass eine Verbindung mit dem angegebenen Client existiert, wird diese beendet. Der Server sendet sich die Nachricht processclosedconnection. void processclosedconnection(string pclientip, int pclientport) Diese Methode ohne Anweisungen wird aufgerufen, bevor der Server die Verbindung zu dem in der Parameterliste spezifizierten Client schließt. Durch das Überschreiben in Unterklassen kann auf die Schließung der Verbindung zum angegebenen Client reagiert werden. void processmessage(string pclientip, int pclientport, String pmessage) Der Client mit der angegebenen IP und der angegebenen Portnummer hat dem Server eine Nachricht gesendet. Dieser ruft daraufhin diese Methode ohne Anweisungen auf. Durch das Überschreiben in Unterklassen kann auf diese Nachricht des angegebenen Client reagiert werden. void processnewconnection(string pclientip, int pclientport) Der Client mit der angegebenen IP-Adresse und der angegebenen Portnummer hat eine Verbindung zum Server aufgebaut. Der Server hat daraufhin diese Methode aufgerufen, die in dieser Klasse keine Anweisungen enthält. Durch das Überschreiben in Unterklassen kann auf diesen Neuaufbau einer Verbindung von dem angegebenen Client zum Server reagiert werden. 22

23 void send(string pclientip, int pclientport, String pmessage) Wenn eine Verbindung zum angegebenen Client besteht, dann wird diesem Client die angegebene Nachricht - um einen Zeilentrenner erweitert - gesendet. void sendtoall(string pmessage) Die angegebene Nachricht wird - um einen Zeilentrenner erweitert - an alle verbundenen Clients gesendet. void close() Alle bestehenden Verbindungen werden getrennt. Der Server kann nicht mehr verwendet werden. 23

24 5. Datenbanken Entity-Relationship-Modell Eine Entität ist ein gedanklich abgegrenzter Gegenstand. Gleichartige Entitäten fasst man zu Entitätsmengen zusammen. Diese erhalten Rechtecke als Symbole. Zwischen Entitäten kann es Beziehungen geben, wobei man gleichartige Beziehungen zwischen Entitäten zweier Entitätsmengen zu Beziehungsmengen zusammen fasst. Diese erhalten Rauten als Symbole. Eine Raute wird durch Linien mit den Rechtecken der zugehörigen Entitätsmengen verbunden. Diese Linien werden mit der Kardinalität (1:1, 1:n, n:1, n:m) beschriftet. Attribute sind Eigenschaften aller Elemente einer Entitäts- bzw. Beziehungsmenge. Sie erhalten Ellipsen als Symbole und diese werden durch eine Linie mit dem Rechteck bzw. der Raute der entsprechenden Entitäts- bzw. Beziehungsmenge verbunden. Beispiel: In einer Datenbank sollen Informationen über Schüler sowie deren Gastschüler verwaltet werden. Vorname SchuelerID Nachname beherbergt 1 Schueler n wohnt in n 1 Gastschueler Ort GastschuelerID Vorname Name PLZ Nachname Ein Schüler hat nur einen Wohnort, in einem Ort können aber mehrere Schüler wohnen, also Kardinalität n : 1. Ein Schüler kann mehrere Gastschüler beherbergen, ein Gastschüler wohnt aber bei nur einem Schüler, also Kardinalität 1 : n. 24

25 Datenbankschema und Schlüssel In einem Datenbankschema werden zeilenweise die Namen der Tabellen einer Datenbank aufgelistet. Dem Tabellennamen folgen jeweils in Klammern die Namen der einzelnen Spalten der entsprechenden Tabelle. Durch einen Primärschlüssel ist eine Entität eindeutig festgelegt. Ein Fremdschlüssel verweist auf eine andere Entität. Beide Schlüssel können aus einem oder mehreren Attributen bestehen. Im Datenbankschema werden Primärschlüssel unterstrichen und Sekundärschlüssel mit einem Pfeil versehen. Beispiel: Für obiges Beispiel sieht dies dann folgendermaßen aus: Schueler (SchuelerID, Vorname, Nachname, PLZ) Gastschueler (GastschuelerID, SchuelerID, Vorname, Nachname) Ort (PLZ, Name) Normalisierung Ein Datenbankschema ist in der 1. Normalform, wenn alle Attribute einen atomaren Wertebereich haben. Ein Datenbankschema ist in der 2. Normalform, wenn es in der 1. Normalform ist und zusätzlich jedes Attribut, das nicht selbst zum Schlüssel gehört, nur von allen Schlüsselattributen funktional abhängig ist und nicht bereits von einem Teil der Schlüsselattribute. Ein Datenbankschema ist in der 3. Normalform, wenn es in der 2. Normalform ist und es zusätzlich kein Nichtschlüsselattribut gibt, das transitiv von einem Schlüsselattribut abhängig ist. Es darf also keine funktionalen Abhängigkeiten von Attributen geben, die selbst nicht zum Schlüssel gehören. Beispiel: Wir gehen von folgendem Datenbankschema aus: Schuelerkontakt (SchuelerID, VorNachname, PLZOrt, GastschuelerID, GastschuelerVorNachname) SchuelerID VorNachname PLZOrt GastschuelerID Gastschueler- VorNachname 1 Peter Meier Infostadt 8 Marc Pierre 1 Peter Meier Infostadt 13 Bob Thomson 2 Eva Müller Infodorf 10 Chantal Paris 3 Maria Dorf Infostadt NULL NULL Das Datenbankschema ist nicht in erster Normalform, da die Attribute VorNachname, PLZOrt und GastschuelerVorNachname nicht atomar sind. Eine Überführung in die erste Normalform führt zu folgendem Datenbankschema: Schuelerkontakt (SchuelerID, Vorname, Nachname, PLZ, Ort, GastschuelerID, GastschuelerVorname, GastschuelerNachname) 25

26 Schueler- ID Vorname Nachname PLZ Ort Gast- schueler- ID Gastschueler- Vorname 1 Peter Meier Infostadt 8 Marc Pierre Gastschueler- Nachname 1 Peter Meier Infostadt 13 Bob Thomson 2 Eva Müller Infodorf 10 Chantal Paris 3 Maria Dorf Infostadt NULL NULL NULL Der Primärschlüssel ist aus SchuelerID und GastschuelerID zusammengesetzt. Dieses Datenbankschema ist nicht in zweiter Normalform, da z.b. GastschuelerVorname und GastschuelerNachname nur von GastschuelerID und nicht vom gesamten Schlüssel abhängen. Eine Überführung in die zweite Normalform führt zu folgendem Datenbankschema: Schueler (SchuelerID, Vorname, Nachname, PLZ, Ort) Gastschueler (GastschuelerID, SchuelerID, Vorname, Nachname) SchuelerID Vorname Nachname PLZ Ort 1 Peter Meier Infostadt 2 Eva Müller Infodorf 3 Maria Dorf Infostadt GastschuelerID SchuelerID Vorname Nachname 8 1 Marc Pierre 13 1 Bob Thomson 10 2 Chantal Paris Dieses Datenbankschema ist nicht in dritter Normalform, da Ort abhängig ist von PLZ und somit transitiv abhängig ist von SchuelerID. Eine Überführung in die dritte Normalform führt zu folgendem Datenbankschema: Schueler (SchuelerID, Vorname, Nachname, PLZ) Gastschueler (GastschuelerID, SchuelerID, Vorname, Nachname) Ort (PLZ, Name) SchuelerID Vorname Nachname PLZ 1 Peter Meier Eva Müller Maria Dorf

27 GastschuelerID SchuelerID Vorname Nachname 8 1 Marc Pierre 13 1 Bob Thomson 10 2 Chantal Paris PLZ Name Infostadt Infodorf Sprachelemente Folgende SQL-Sprachelemente werden vorausgesetzt: SELECT (DISTINCT) FROM WHERE GROUP BY ORDER BY ASC, DESC (LEFT / RIGHT) JOIN ON UNION AS NULL Vergleichsoperatoren: =, <>, >, <, >=, <=, LIKE, BETWEEN, IN, IS NULL Arithmetische Operatoren: +, -, *, /, ( ) Logische Verknüpfungen: AND, OR, NOT Funktionen: COUNT, SUM, MAX, MIN Es werden SQL-Abfragen über eine und mehrere verknüpfte Tabellen vorausgesetzt. Es können auch verschachtelte SQL-Ausdrücke vorkommen. 27

28 Relationenalgebra Es werden Selektion, Projektion, Vereinigung, Differenz, kartesisches Produkt, Umbenennung und Join vorausgesetzt. Beispiel: Wir gehen von folgendem Datenbankschema aus: Lehrer (ID, Vorname, Nachname) Lehrerin (ID, Vorname, Nachname) Schulleitung (ID, Vorname, Nachname) Klassenleitungsteam ( LehrerID, LehrerinID) Lehrer: Lehrerin: Klassenleitungsteam: ID Vorname Nachname ID Vorname Nachname LehrerID LehrerinID Me Peter Meier Be Petra Blume Bm Be Sz Peter Schulz Sr Clara Sommer Me Kr Bm Hans Baum Kr Helga Kremer Me Sr Schulleitung: ID Vorname Nachname Bm Hans Baum Kr Helga Kremer Selektion: Es werden die Zeilen ausgewählt, die eine bestimmte Bedingung erfüllen. SELECT * FROM Lehrer WHERE Vorname = Peter ID Vorname Nachname Me Peter Meier Sz Peter Schulz Projektion: Es werden nur bestimmte Spalten ausgewählt. Doppelte Zeilen werden entfernt. SELECT DISTINCT Vorname FROM Lehrer Vorname Peter Hans Vereinigung: Zwei Tabellen mit gleichen Attributen werden zu einer vereinigt. Doppelte Zeilen werden entfernt. SELECT * FROM Lehrer UNION SELECT * FROM Lehrerin ID Vorname Nachname Me Peter Meier Sz Peter Schulz Bm Hans Baum Be Petra Blume Sr Clara Sommer Kr Helga Kremer 28

29 Differenz: Es werden die Zeilen einer Tabelle ausgewählt, die in einer zweiten Tabelle nicht enthalten sind. SELECT * FROM Lehrer WHERE Lehrer.ID NOT IN (SELECT ID FROM Schulleitung) ID Vorname Nachname Me Peter Meier Sz Peter Schulz Kartesisches Produkt: Es werden alle Zeilen einer Tabelle mit allen Zeilen einer zweiten Tabelle verknüpft. SELECT * FROM Lehrer, Lehrerin ID Vorname Nachname ID Vorname Nachname Me Peter Meier Be Petra Blume Sz Peter Schulz Be Petra Blume Bm Hans Baum Be Petra Blume Me Peter Meier Sr Clara Sommer Sz Peter Schulz Sr Clara Sommer Bm Hans Baum Sr Clara Sommer Me Peter Meier Kr Helga Kremer Sz Peter Schulz Kr Helga Kremer Bm Hans Baum Kr Helga Kremer Umbenennung: Ein Attribut wird umbenannt. SELECT ID AS Kuerzel, Vorname, Nachname FROM Lehrerin Kuerzel Vorname Nachname Be Petra Blume Sr Clara Sommer Kr Helga Kremer Join: Ein Join ist die Bildung eines karthesischen Produktes gefolgt von einer Selektion. SELECT * FROM Lehrer JOIN Klassenleitungsteam ON Lehrer.ID = Klassenleitungsteam.LehrerID ID Vorname Nachname LehrerID LehrerinID Bm Hans Baum Bm Be Me Peter Meier Me Kr Me Peter Meier Me Sr 29

30 Beim Left-Join werden auch die Zeilen aus der ersten Tabelle aufgeführt, die keinen Partner in der zweiten Tabelle haben. Es wird mit NULL aufgefüllt. SELECT * FROM Lehrer LEFT JOIN Klassenleitungsteam ON Lehrer.ID = Klassenleitungsteam.LehrerID ID Vorname Nachname LehrerID LehrerinID Me Peter Meier Me Kr Me Peter Meier Me Sr Sz Peter Schulz NULL NULL Bm Hans Baum Bm Be Beim Right-Join werden auch die Zeilen aus der zweiten Tabelle aufgeführt, die keinen Partner in der ersten Tabelle haben. Es wird mit NULL aufgefüllt. SELECT * FROM Klassenleitungsteam RIGHT JOIN Lehrer ON Lehrer.ID = Klassenleitungsteam.LehrerID LehrerID LehrerinID ID Vorname Nachname Me Kr Me Peter Meier Me Sr Me Peter Meier NULL NULL Sz Peter Schulz Bm Be Bm Hans Baum SQL-Abfrage über mehrere verknüpfte Tabellen: SELECT Lehrer.Nachname AS Klassenlehrer, Lehrerin.Nachname AS Klassenlehrerin FROM Lehrer, Lehrerin, Klassenleitungsteam WHERE Lehrer.ID = Klassenleitungsteam.LehrerID AND Klassenleitungsteam.LehrerinID = Lehrerin.ID Klassenlehrer Klassenlehrerin Baum Blume Meier Kremer Meier Sommer 30

31 6. Automaten, Grammatiken Ein (deterministischer, endlicher) Automat erhält ein Wort als Eingabe und erkennt (oder akzeptiert) dieses oder nicht. Häufig wird er daher auch als Akzeptor bezeichnet. Die Menge der akzeptierten Wörter bildet die durch den Automaten dargestellte oder definierte Sprache. Definition: Ein deterministischer, endlicher Automat wird durch ein 5-Tupel (A, Z, d, q 0, E) spezifiziert: Das Eingabealphabet A ist eine endliche, nicht leere Menge von Symbolen, Z ist eine endliche, nicht leere Menge von Zuständen Z und es gilt A Z =, d: Z x A Z ist die Zustandsübergangsfunktion, q 0 Z ist der Anfangszustand und E Z die Menge der Endzustände. Die Zustandsübergangsfunktion kann z.b. durch einen Übergangsgraphen oder eine Tabelle dargestellt werden. Die von deterministischen, endlichen Automaten erkannten Sprachen heißen regulär. Beispiel: Ein deterministischer, endlicher Automat soll erkennen, ob eine eingegebene Dualzahl (von links nach rechts gelesen) durch 8 teilbar ist. Grundidee: Nur wenn die letzten drei Ziffern 0 sind, hat eine Dualzahl diese Eigenschaft. Der Automat wird definiert durch das Eingabealphabet A = {0, 1 die endliche nicht leere Menge von Zuständen Z = {q0, q1, q2, q3 die Zustandsübergangsfunktion (s. Übergangsgraph) den Anfangszustand (ein Element aus Z) q0 die Menge der Endzustände E = {q3 Der Übergangsgraph des Automaten: q q 0 1 q q 3 31

32 Die Übergangstabelle des Automaten: Eingabe Zustand 0 1 q0 q1 q0 q1 q2 q0 q2 q3 q0 q3 q3 q0 Die Menge {0,1 * besteht aus allen Sequenzen der Elemente des Eingabealphabets. Dieser Automat akzeptiert eine Teilmenge dieser Sequenzen, nämlich nur die Eingabewörter (Dualzahlen) mit drei Nullen am Ende und definiert dadurch eine Sprache. Eine Grammatik erzeugt eine Sprache, die aus allen Wörtern besteht, die sich durch Anwendung der Regeln der Grammatik erzeugen (ableiten) lassen. Definition Eine Grammatik G wird durch ein 4-Tupel (N, T, S, P) spezifiziert: N ist die Menge der Nichtterminalsymbole, T ist die Menge der Terminalsymbole (N T = ), S N ist das Startsymbol, P ist die Menge der Regeln oder Produktionen. Grammatiken, bei denen alle Produktionen die Form A a (für A N und a T) oder A ab (für a T und A, B N) haben, heißen regulär. Zu jedem deterministischen, endlichen Automaten A gibt es eine reguläre Grammatik G, welche die von A akzeptierte Sprache erzeugt. Zu jeder regulären Grammatik G gibt es einen deterministischen, endlichen Automaten A, der die von G erzeugte Sprache akzeptiert. Beispiel: Die folgende reguläre Grammatik definiert genau die Sprache, deren Wörter von dem obigen Automaten akzeptiert werden. Grammatik G = (N, T, S, P) der gegebenen Sprache Menge der Nichtterminalsymbole: N = {S, A, B Menge der Terminalsymbole: T = {0, 1 Startsymbol: S Produktionen: P = { S 1S 0A, A 1S 0B, B 1S 0B 0 Die Ableitung des Wortes 1000 lautet z.b.: S 1S 10A 100B

33 Ein Parser zu einer Grammatik ist ein Algorithmus, mit dem sich überprüfen lässt, ob ein Wort zu der von der Grammatik erzeugten Sprache gehört, d.h. ob es syntaktisch korrekt ist. Man könnte auch sagen: Ein Parser simuliert den zu der Grammatik gehörenden Automaten. Beispiel: Das folgende Programm simuliert den o.a. deterministischen, endlichen Automaten und überprüft, ob das als Parameter übergebene Wort vom Automaten akzeptiert wird, d.h. zu der von der zugehörigen regulären Grammatik erzeugten Sprache gehört. public boolean parse(string pwort) { int lzustand = 0; // Startzustand = 0 char symbol; // das aktuell zu verarbeitende Symbol int lzaehler = 0; while (lzaehler < pwort.length()) { symbol = pwort.charat(lzaehler); switch (lzustand) { case 0: switch (symbol) { case '0': {lzustand = 1; break; case '1': {lzustand = 0; break; break; case 1: switch (symbol) { case '0': {lzustand = 2; break; case '1': {lzustand = 0; break; break; case 2: switch (symbol) { case '0': {lzustand = 3; break; case '1': {lzustand = 0; break; break; case 3: switch (symbol) { case '0': {lzustand = 3; break; case '1': {lzustand = 0; break; break; // switch lzaehler = lzaehler+1; // while return lzustand == 3; Hinweis: Ein Werkzeug zum Umgang mit Automaten findet man unter Das Java-Programm JFLAP ist dort kostenlos erhältlich. 33

34 7. Beispiele 7.1 Beispiel für die Anwendung der Klasse BinaryTree Aufgabe Es soll ein Programm entwickelt werden, das in der Lage ist, eine Zeichenfolge aus Großbuchstaben in das Morsealphabet zu codieren und eine Folge von Morsezeichen, die durch / getrennt sind, zu dekodieren. Das Morsealphabet : A - F - K - - P -- U - Z -- B - G -- L - Q -- - V - C - - H M -- R - W -- D - I N - S... X - - E J --- O --- T - Y - -- Benutzerschnittstelle 34

35 Lösungsskizze: Da der Morsecode nur aus zwei Zeichen besteht, lässt er sich in einem Binärbaum darstellen: Punkt Strich E T I A N M S U R W D K G O H V F L P J B X C Y Z Q Implementationsdiagramm MorseCodierer + MorseCodierer () + codiertertext (ptext: String): String + decodiertertext (pcode: String): String - morsebaum BinaryTree Inhaltsobjekt Character 35

36 Implementation einiger Methoden Der Konstruktur MorseCodierer() der Klasse MorseCodierer erzeugt den Morsebaum. Man beachte die Verwendung verschiedener Konstruktoren der Klasse BinaryTree. public MorseCodierer() { BinaryTree lbaum4links = new BinaryTree(new Character('H')); BinaryTree lbaum4rechts = new BinaryTree(new Character('V')); BinaryTree lbaum3links = new BinaryTree(new Character('S'), lbaum4links,lbaum4rechts); lbaum4links = new BinaryTree(new Character('F')); lbaum4rechts = new BinaryTree(); BinaryTree lbaum3rechts = new BinaryTree(new Character('U'), lbaum4links,lbaum4rechts); BinaryTree lbaum2links = new BinaryTree(new Character('I'), lbaum3links, lbaum3rechts); lbaum4links = new BinaryTree(new Character('L')); lbaum4rechts = new BinaryTree(); lbaum3links = new BinaryTree(new Character('R'), lbaum4links, lbaum4rechts); lbaum4links = new BinaryTree(new Character('P')); lbaum4rechts = new BinaryTree(new Character('J')); lbaum3rechts = new BinaryTree(new Character('W'), lbaum4links, lbaum4rechts); BinaryTree lbaum2rechts = new BinaryTree(new Character('A'), lbaum3links, lbaum3rechts); BinaryTree lbaum1links = new BinaryTree(new Character('E'), lbaum2links, lbaum2rechts); lbaum4links = new BinaryTree(new Character('B')); lbaum4rechts = new BinaryTree(new Character('X')); lbaum3links = new BinaryTree(new Character('D'), lbaum4links, lbaum4rechts); lbaum4links = new BinaryTree(new Character('C')); lbaum4rechts = new BinaryTree(new Character('Y')); lbaum3rechts = new BinaryTree(new Character('K'), lbaum4links, lbaum4rechts); lbaum2links = new BinaryTree(new Character('N'), lbaum3links, lbaum3rechts); lbaum4links = new BinaryTree(new Character('Z')); lbaum4rechts = new BinaryTree(new Character('Q')); lbaum3links = new BinaryTree(new Character('G'), lbaum4links, lbaum4rechts); lbaum4links = new BinaryTree(); lbaum4rechts = new BinaryTree(); lbaum3rechts = new BinaryTree(new Character('O'), lbaum4links, lbaum4rechts); lbaum2rechts = new BinaryTree(new Character('M'), lbaum3links, lbaum3rechts); BinaryTree lbaum1rechts = new BinaryTree(new Character('T'), lbaum2links, lbaum2rechts); morsebaum = new BinaryTree(new Character(' '), lbaum1links, lbaum1rechts); 36

37 Die Methode codiertertext liefert den Morsecode von ptext. Die von ihr aufgerufene private Methode erzeugemorsecode sucht den Morsecode eines einzelnen Zeichens im Morsebaum. public String codiertertext (String ptext) { int lzaehler = 0; String lcode = ""; while ((lzaehler < ptext.length()) && (ptext.charat (lzaehler) >= 'A') && (ptext.charat (lzaehler) <= 'Z')) { lcode = lcode + erzeugemorsecode (ptext.charat(lzaehler), morsebaum, "") + "/"; lzaehler++; return lcode; public String erzeugemorsecode (char pzeichen, BinaryTree pmorsebaum, String pcode) { if (!pmorsebaum.isempty()){ if (pzeichen == ((Character) pmorsebaum.getobject()).charvalue()) return pcode; else { //rekursiver Aufruf der Methode mit dem linken Teilbaum String lcodelinkerteilbaum = erzeugemorsecode(pzeichen, pmorsebaum.getlefttree(), pcode+"."); if (lcodelinkerteilbaum.equals("")) //Zeichen im linken Teilbaum nicht gefunden, rekursiver Aufruf mit dem rechten Teilbaum return erzeugemorsecode(pzeichen, pmorsebaum.getrighttree(), pcode+"-"); else return lcodelinkerteilbaum; else return ""; Hinweis für die Lehrkraft: Im Unterricht sollten auch alternative Realisierungen (z.b. mit einem Array) behandelt und mit der Binärbaum-Lösung hinsichtlich ihrer Effizienz verglichen werden. 37

38 Die Methode decodiertertext liefert die Decodierung des Morsecodes pcode. Die von ihr aufgerufene private Methode decodierteszeichen decodiert ein einzelnes Zeichen mit Hilfe des Morsebaums. public String decodiertertext (String pcode) { int lzaehler = 1; String ltext = ""; String lmorsezeichen; do { lmorsezeichen=pcode.substring(0, pcode.indexof('/')); pcode = pcode.substring(pcode.indexof('/')+1,pcode.length()); if (lmorsezeichen!= "") { ltext=ltext+decodierteszeichen(lmorsezeichen); while (!pcode.equals("")); return ltext; public Character decodierteszeichen( String pzeichencode){ String ltext = ""; int lzaehler = 0; BinaryTree lbaum = morsebaum; while (lzaehler < pzeichencode.length()) { if (pzeichencode.charat(lzaehler) == '.') lbaum = lbaum.getlefttree(); else lbaum = lbaum.getrighttree(); lzaehler++; return (Character)lBaum.getObject(); 38

39 7.2 Beispiel für die Anwendung der Klasse BinarySearchTree Aufgabenstellung Es soll ein Programm entwickelt werden, das in der Lage ist zu zählen, wie oft jedes verwendete Zeichen in einem beliebigen Text vorkommt. Die Zeichen mit ihrer Häufigkeit werden in einem binären Suchbaum gespeichert. So ergibt sich für das Wort MEISTERSCHAFT folgender Baum: M, 1 E, 2 S, 2 C, 1 I, 1 R, 1 T, 2 A, 1 H, 1 F, 1 Benutzerschnittstelle 39

40 Lösungsskizze: Implementationsdiagramm Zeichenzaehler + Zeichenzaehler() + zaehlezeichen(ptext: String) + getsortiertezeichenliste(): List - sortierteliste(psuchbaum: BinarySearchTree ) - sortiertezeichenliste - zeichenzaehlbaum Inhaltsobjekt Zeichenzahl List BinarySearchTree Inhaltsobjekt Zeichenzahl - zeichen: char; - anzahl: int Item Zeichenzahl + Zeichenzahl (pzeichen: char ) + getzeichen(): char + getanzahl(): int + erhoeheanzahl() + isgreater (Item pitem): boolean + isless (Item pitem): boolean + isequal (Item pitem: boolean Die Klasse Zeichenzahl Objekte, die in einem binären Suchaum gespeichert werden, müssen zu einer Unterklasse von Item gehören. Die Ordnungsrelation für den Suchbaum wird durch Überschreiben der abstrakten Methoden isequal, isless und isgreater festgelegt. class Zeichenzahl extends Item{ private char zeichen; private int anzahl = 0; public Zeichenzahl(char pzeichen){ zeichen = pzeichen; anzahl = 1; public char getzeichen(){ return zeichen; public int getanzahl(){ return anzahl; public void erhoeheanzahl(){ anzahl = anzahl+1; public boolean isgreater (Item pitem){ return (this.zeichen > ((Zeichenzahl)pItem).getZeichen()); public boolean isless (Item pitem){ return (this.zeichen < ((Zeichenzahl)pItem).getZeichen()); public boolean isequal (Item pitem){ return (this.zeichen == ((Zeichenzahl)pItem).getZeichen()); 40

41 Implementation einiger Methoden der Klasse Zeichenzaehler Die Methode zaehlezeichen durchläuft den Text ptext Zeichen für Zeichen. Jedes Zeichen, das zum ersten Mal vorkommt, wird mit der Häufigkeit eins im binären Suchbaum zeichenzaehlbaum gespeichert. Bei jedem weiteren Auftreten wird lediglich die Häufigkeit des bereits gespeicherten Zeichens um eins erhöht. Am Ende der Methode wird die private Methode sortierteliste(zeichenzaehlbaum) aufgerufen, die aus dem binären Suchbaum mit Hilfe eines inorder-durchlaufs eine entsprechend der Ordnungsrelation des binären Suchbaums sortierte Liste sortiertezeichenliste mit den Häufigkeiten generiert. public void zaehlezeichen(string ptext){ char lzeichen; Zeichenzahl lzeichenzahlalt; zeichenzaehlbaum = new BinarySearchTree(); for (int lzaehler=0; lzaehler<ptext.length()-1;lzaehler++ ) { lzeichen = ptext.charat(lzaehler); Zeichenzahl lzeichenzahlneu=new Zeichenzahl(lZeichen); //Es wird geprüft, ob lzeichen bereits im Suchabum ist lzeichenzahlalt=((zeichenzahl)zeichenzaehlbaum.search(lzeichenzahlneu)); if (lzeichenzahlalt==null) //lzeichen ist noch nicht im Suchbaum zeichenzaehlbaum.insert(lzeichenzahlneu); else { //lzeichen ist bereits im Suchbaum, die Zeichenzahl wird inkrementiert lzeichenzahlalt.erhoeheanzahl(); sortiertezeichenliste = new List(); sortierteliste(zeichenzaehlbaum); /** Durch Inorder-Traversierung des Suchbaums wird eine sortierte Liste der Zeichen mit ihren Häufigkeiten der Suchbaum */ private void sortierteliste(binarysearchtree psuchbaum){ if (!psuchbaum.isempty()) { sortierteliste(psuchbaum.getlefttree()); sortiertezeichenliste.append(psuchbaum.getitem()); sortierteliste(psuchbaum.getrighttree()); 41

42 7.3 Beispiel für die Anwendung der Klassen Graph und GraphNode Aufgabe Es soll ein Programm entwickelt werden, das mit Hilfe eines Backtrackingalgorithmus (Tiefensuche) einen Weg zwischen zwei Knoten in einem Graphen ermittelt und die Weglänge anzeigt. Der Graph wird durch Eingabe der Knoten (die Namen werden automatisch alphabetisch bei A beginnend vergeben) und der Kanten mit ihren Gewichten erzeugt und mithilfe der Adjazenzmatrix angezeigt. Benutzerschnittstelle Lösungsskizze: Implementationsdiagramm Wegsuche + Wegsuche() + knoteneinfuegen(): GraphNode + kanteeinfuegen (pname1: String, pname2: String, pgewicht: boolean): boolean + weg (pvon: String, pnach: String): List - findeweg (pvonknoten: GraphNode, pnachknoten: GraphNode) + gibweglaenge(): double - graph Graph Inhaltsobjekt GraphNode GraphNode 42

43 Implementation der Klasse Wegsuche Die Klasse Wegsuche verwaltet einen Graphen (Attribut graph), der sich mit Hilfe der Methoden knoteneinfuegen und kanteeinfuegen aufbauen lässt. Die Knotennamen werden, beginnend bei A, automatisch in alphabetischer Reihenfolge erzeugt. Die Methode gibweg liefert in Form einer Liste von Graphknoten einen Weg zwischen zwei Knoten, deren Namen als Parameter übergeben werden. Die Funktion gibweg ruft dazu die Hilfsmethode findeweg auf, die mit Hilfe des Backtracking-Algorithmus einen möglichen Weg zwischen den beiden Knoten berechnet und als List von Objekten der Klasse graphnode zurückgibt. Die Methode gibweglaenge berechnet mit Hilfe der als Parameter übergebenen Knotenliste des Weges und den Kantengewichten zwischen den Wegeknoten die Länge des Weges. public class Wegsuche { private Graph graph; private char naechsterknoten; private boolean zielerreicht = false; public Wegsuche(){ graph = new Graph(); naechsterknoten = 'A'; public GraphNode knoteneinfuegen() { GraphNode knoten = new GraphNode("" + naechsterknoten); graph.addnode(knoten); naechsterknoten = (char)(naechsterknoten+1); return knoten; public boolean kanteeinfuegen(string pname1, String pname2, double pgewicht) { GraphNode knoten1 = graph.getnode(pname1); GraphNode knoten2 = graph.getnode(pname2); boolean moeglich = (knoten1!= null) && (knoten2!= null); if (moeglich) graph.addedge(knoten1,knoten2,pgewicht); return moeglich; public List gibweg(string pvon, String pnach) { GraphNode vonknoten = graph.getnode(pvon); GraphNode nachknoten = graph.getnode(pnach); List weg = null; if ((vonknoten!= null) && (nachknoten!= null)) { List knotenliste = new List(); graph.resetmarks(); vonknoten.mark(); //Anfangsknoten des Weges wird in die Liste eingefügt knotenliste.append(vonknoten); zielerreicht = false; weg = findeweg(vonknoten, nachknoten, knotenliste); return weg; 43

44 private List findeweg( GraphNode pvonknoten, GraphNode pnachknoten, List pweg) { if (pvonknoten!= pnachknoten) { List nachbarknoten = graph.getneighbours(pvonknoten); nachbarknoten.tofirst(); while ((nachbarknoten.hasaccess())&& (!zielerreicht)) { GraphNode knoten = (GraphNode) nachbarknoten.getobject(); if (!knoten.ismarked()) { //Knoten ist noch nicht in der Wegeliste knoten.mark(); pweg.append(knoten); //rekursiver Aufruf der Methode, um den nächsten Knoten anzufügen findeweg (knoten, pnachknoten, pweg); if (!zielerreicht) { //Sackgasse: Der zuletzt eingefügte Knoten wird aus der Liste entfernt knoten.unmark(); pweg.tolast(); pweg.remove(); nachbarknoten.next(); else zielerreicht = true; if (zielerreicht) return pweg; else return new List(); double gibweglaenge(list wegliste) { double weglaenge = 0; if (!((wegliste == null) && (!wegliste.isempty()))){ wegliste.tofirst(); GraphNode wegknoten1 = (GraphNode) wegliste.getobject(); wegliste.next(); while (wegliste.hasaccess()) { GraphNode wegknoten2 = (GraphNode) wegliste.getobject(); double distanz = graph.getedgeweight(wegknoten1, wegknoten2); weglaenge = weglaenge + distanz; wegknoten1 = wegknoten2; wegliste.next(); return weglaenge; 44

45 7.4 Beispiel für die Anwendung der Klassen Client und Server Aufgabenstellung Auf den Computern einer Schule soll ein interner Chat-Dienst eingerichtet werden. Dazu müssen ein Chat-Client und ein Chat-Server-Programm entwickelt werden. Zunächst muss ein Protokoll Chat-Dienst erstellt werden, mit dem alle Teilnehmer Nachrichten austauschen, die dann auf jedem angeschlossenen Computer angezeigt werden. Dabei sollen in der ersten Version keine Spitznamen, sondern zur Identifikation der Chat-Teilnehmer nur die IP- und Port-Nummern verwendet werden. Eine weitere Vereinfachung ergibt sich dadurch, dass zunächst alle Chat-Nachrichten an alle Teilnehmer geschickt werden und Nachrichten an einzelne Teilnehmer noch nicht möglich sein sollen. Benutzerschnittstelle für zwei Benutzer, die miteinander chatten 45

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen Inhalte Informatik I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen II.0 Grundlegende Programmstrukturen und Algorithmen Sortier- und Suchalgorithmen auf Arrays

Mehr

Konstruktor BinaryTree() Nach dem Aufruf des Konstruktors existiert ein leerer Binärbaum.

Konstruktor BinaryTree() Nach dem Aufruf des Konstruktors existiert ein leerer Binärbaum. 4.2 Baumstrukturen Die Klasse BinaryTree Mithilfe der Klasse BinaryTree können beliebig viele Inhaltsobjekte in einem Binärbaum verwaltet werden. Ein Objekt der Klasse stellt entweder einen leeren Baum

Mehr

Abiturprüfung Informatik, Grundkurs

Abiturprüfung Informatik, Grundkurs Seite 1 von 12 Abiturprüfung 2014 Informatik, Grundkurs Aufgabenstellung: In dem neugegründeten Staat Infonien haben alle Autos ein Kennzeichen, das sich aus zwei Großbuchstaben gefolgt von einer positiven

Mehr

Materialien zu den zentralen Abiturprüfungen im Fach Informatik

Materialien zu den zentralen Abiturprüfungen im Fach Informatik Materialien zu den zentralen Abiturprüfungen im Fach Informatik Objektorientierter Ansatz Java 1. Allgemeine Hinweise Es gelten für das Zentralabitur im Fach Informatik unverändert die Vorgaben (Stand

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Schulinternes Curriculum im Fach Informatik

Schulinternes Curriculum im Fach Informatik Schulinternes Curriculum im Fach Informatik Unterricht in EF : 1. Geschichte der elektronischen Datenverarbeitung (3 Stunden) 2. Einführung in die Nutzung von Informatiksystemen und in grundlegende Begriffe

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012 Delphi

Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012 Delphi Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012 Delphi 1 Inhalt 1. Vorwort... 3 2. Basis-Sprachelemente und -Datentypen... 3 3. Klassendiagramme... 5 Klassen... 5 Beziehungen zwischen

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Zentralabitur 2017 Informatik

Zentralabitur 2017 Informatik Zentralabitur.nrw Ministerium für Schule und Weiterbildung des Landes Nordrhein-Westfalen Zentralabitur 2017 Informatik I. Unterrichtliche Voraussetzungen für die schriftlichen Abiturprüfungen an Gymnasien,

Mehr

Informatik 12 Datenbanken SQL-Einführung

Informatik 12 Datenbanken SQL-Einführung Informatik 12 Datenbanken SQL-Einführung Gierhardt Vorbemerkungen Bisher haben wir Datenbanken nur über einzelne Tabellen kennen gelernt. Stehen mehrere Tabellen in gewissen Beziehungen zur Beschreibung

Mehr

Schulinternes Curriculum für Informatik (Q2) Stand April 2015

Schulinternes Curriculum für Informatik (Q2) Stand April 2015 Schulinternes Curriculum für Informatik (Q2) Stand April 2015 Unterrichtsvorhaben Q2-I Thema: Modellierung und Implementierung von Anwendungen mit dynamischen, nichtlinearen Datenstrukturen Modellieren

Mehr

Zentralabitur 2018 Informatik

Zentralabitur 2018 Informatik Zentralabitur.nrw Ministerium für Schule und Weiterbildung des Landes Nordrhein-Westfalen Zentralabitur 2018 Informatik I. Unterrichtliche Voraussetzungen für die schriftlichen Abiturprüfungen an Gymnasien,

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

Punkte dieser Runde. Gegenstand. 1 Stein 2 2 Schere 0 0 2 Schere 2 2 Papier 2 1 Stein 2 2 3 Stein 1 1,666667 Stein 1 1 Papier 4 3

Punkte dieser Runde. Gegenstand. 1 Stein 2 2 Schere 0 0 2 Schere 2 2 Papier 2 1 Stein 2 2 3 Stein 1 1,666667 Stein 1 1 Papier 4 3 Info 12 IFL1 GK (GA) Bearbeitungszeit: 180 min Seite 1 Aufgabe 1: Netzwerke Nachdem wir so erfolgreich unser kleines Projekt "Donnerstagsmaler" umgesetzt haben können wir uns nun an ein Spiel wagen, welches

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77 Inhaltsverzeichnis I 1 Datenstruktur Schlange

Mehr

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken. In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt 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 - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

Konzepte der Informatik

Konzepte der Informatik Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

SEQUENZDIAGRAMM. Christoph Süsens

SEQUENZDIAGRAMM. Christoph Süsens SEQUENZDIAGRAMM Christoph Süsens DEFINITION Das Sequenzdiagramm gibt Auskunft darüber: Welche Methoden für die Kommunikation zwischen ausgewählten Objekten zuständig sind. Wie der zeitliche Ablauf von

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana Lange. Generative Gestaltung Operatoren Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Rundung und Casting von Zahlen

Rundung und Casting von Zahlen W E R K S T A T T Rundung und Casting von Zahlen Intrexx 7.0 1. Einleitung In diesem Werkstattbeitrag erfahren Sie, wie Zahlenwerte speziell in Velocity, aber auch in Groovy, gerundet werden können. Für

Mehr

4. AuD Tafelübung T-C3

4. AuD Tafelübung T-C3 4. AuD Tafelübung T-C3 Simon Ruderich 17. November 2010 Arrays Unregelmäßige Arrays i n t [ ] [ ] x = new i n t [ 3 ] [ 4 ] ; x [ 2 ] = new i n t [ 2 ] ; for ( i n t i = 0; i < x. l e n g t h ; i ++) {

Mehr

U08 Entwurfsmuster (II)

U08 Entwurfsmuster (II) U08 Entwurfsmuster (II) Inhalt der Übung Diskussion und Implementierung von Entwurfsmustern Übungsaufgaben Aufgabe 1 (Queue) Gegeben ist das folgende Analysemodell einer Warteschlange (Queue): Eine Warteschlange

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Datenbanken Kapitel 2

Datenbanken Kapitel 2 Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,

Mehr

Datenbanken Microsoft Access 2010

Datenbanken Microsoft Access 2010 Datenbanken Microsoft Access 2010 Abfragen Mithilfe von Abfragen kann ich bestimmte Informationen aus einer/mehrerer Tabellen auswählen und nur diese anzeigen lassen die Daten einer/mehrerer Tabellen sortieren

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY.

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY. SELECT - Der Grundbefehl zur Auswahl von Daten Die SELECT-Anweisung fragt Daten aus einer Datenbank ab und stellt diese in einer virtuellen Tabelle zur Verfügung. Diese virtuelle Tabelle, eine Menge von

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

SQL - Übungen Bearbeitung der Datenbank Personal (1)

SQL - Übungen Bearbeitung der Datenbank Personal (1) Bearbeitung der Datenbank Personal (1) 1. Abfragen einer einzigen Tabelle 1.1. Zeigen Sie alle Informationen an, die über die Kinder der Mitarbeiter gespeichert sind. 1.2. Zeigen Sie aus der Tabelle stelle

Mehr

EndTermTest PROGALGO WS1516 A

EndTermTest PROGALGO WS1516 A EndTermTest PROGALGO WS1516 A 14.1.2016 Name:................. UID:.................. PC-Nr:................ Beachten Sie: Lesen Sie erst die Angaben aufmerksam, genau und vollständig. Die Verwendung von

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007 Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

ecaros2 - Accountmanager

ecaros2 - Accountmanager ecaros2 - Accountmanager procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Aufruf des ecaros2-accountmanager...3 2 Bedienung Accountmanager...4 procar informatik AG 2 Stand: FS 09/2012 1 Aufruf

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Formale Sprachen und Grammatiken

Formale Sprachen und Grammatiken Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

Hinweise zum Übungsblatt Formatierung von Text:

Hinweise zum Übungsblatt Formatierung von Text: Hinweise zum Übungsblatt Formatierung von Text: Zu den Aufgaben 1 und 2: Als erstes markieren wir den Text den wir verändern wollen. Dazu benutzen wir die linke Maustaste. Wir positionieren den Mauszeiger

Mehr

Synchronisations- Assistent

Synchronisations- Assistent TimePunch Synchronisations- Assistent Benutzerhandbuch Gerhard Stephan Softwareentwicklung -und Vertrieb 25.08.2011 Dokumenten Information: Dokumenten-Name Benutzerhandbuch, Synchronisations-Assistent

Mehr

Binäre Bäume Darstellung und Traversierung

Binäre Bäume Darstellung und Traversierung Binäre Bäume Darstellung und Traversierung Name Frank Bollwig Matrikel-Nr. 2770085 E-Mail fb641378@inf.tu-dresden.de Datum 15. November 2001 0. Vorbemerkungen... 3 1. Terminologie binärer Bäume... 4 2.

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr

Bedienung des Web-Portales der Sportbergbetriebe

Bedienung des Web-Portales der Sportbergbetriebe Bedienung des Web-Portales der Sportbergbetriebe Allgemein Über dieses Web-Portal, können sich Tourismusbetriebe via Internet präsentieren, wobei jeder Betrieb seine Daten zu 100% selbst warten kann. Anfragen

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

BEISPIELKLAUSUR Softwareentwicklung:

BEISPIELKLAUSUR Softwareentwicklung: Prof. Dr. Andreas Fink Institut für Informatik Fakultät für Wirtschafts- und Sozialwissenschaften Helmut-Schmidt-Universität / Universität der Bundeswehr Hamburg BEISPIELKLAUSUR Softwareentwicklung: Objektorientierte

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass: OOP (Java), 3. Syntaxdiagramme und Grammatikregeln 1/32 Objektorientierte Programmierung Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass Martin-Luther-Universität Halle-Wittenberg

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Lehrpläne NRW Sek.stufe 2. Lernen im Kontext

Lehrpläne NRW Sek.stufe 2. Lernen im Kontext Lehrpläne NRW Sek.stufe 2 Lernen im Kontext Fachliche Inhalte Lernziele Informatik NRW Fähigkeit, komplexe Zusammenhänge mit gedanklicher Schärfe zu durchdringen (Problemanalyse) Überblick über unterschiedliche

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Informatik Grundlagen, WS04, Seminar 13

Informatik Grundlagen, WS04, Seminar 13 Informatik Grundlagen, WS04, Seminar 13 Informatik Informatik Grundlagen, Seminar 13 WS04 1 Was wir heute besprechen Nachbesprechen von Übungsblatt 11 Rekursion Grundprinzipien Übung Besprechung Übungsblatt

Mehr

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel 2016. für Mac. amac-buch Verlag

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel 2016. für Mac. amac-buch Verlag Anton Ochsenkühn amac BUCH VERLAG Ecxel 2016 für Mac amac-buch Verlag 2 Word-Dokumentenkatalog! Zudem können unterhalb von Neu noch Zuletzt verwendet eingeblendet werden. Damit hat der Anwender einen sehr

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Vgl. Oestereich Kap 2.7 Seiten 134-147

Vgl. Oestereich Kap 2.7 Seiten 134-147 Vgl. Oestereich Kap 2.7 Seiten 134-147 1 Sequenzdiagramme beschreiben die Kommunikation/Interaktion zwischen den Objekten (bzw. verschiedenen Rollen) eines Szenarios. Es wird beschrieben, welche Objekte

Mehr

Anmerkungen zur Übergangsprüfung

Anmerkungen zur Übergangsprüfung DM11 Slide 1 Anmerkungen zur Übergangsprüfung Aufgabeneingrenzung Aufgaben des folgenden Typs werden wegen ihres Schwierigkeitsgrads oder wegen eines ungeeigneten fachlichen Schwerpunkts in der Übergangsprüfung

Mehr

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie Gliederung 1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. äume / Graphen 5. Hashing 6. Algorithmische Geometrie 4/5, olie 1 2014 Prof. Steffen Lange - HDa/bI

Mehr

Einführung in. Logische Schaltungen

Einführung in. Logische Schaltungen Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

WPF Steuerelemente Listbox, ComboBox, ListView,

WPF Steuerelemente Listbox, ComboBox, ListView, WPF Steuerelemente Listbox, ComboBox, ListView, Dr. Beatrice Amrhein Überblick Einführung Listen ComboBox Tabellen 2 Einführung 3 Listen- und Tabellen-Elemente Listen und Tabellen-Elemente sind Steuerelemente,

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

MS Access 2010 Kompakt

MS Access 2010 Kompakt 2 ABFRAGEN Eine Abfrage ist im Wesentlichen der Filterung eines Datenbestandes sehr ähnlich. Auch hier werden aus einer Menge von Informationen nur jene Datensätze ausgewählt, die einem vorher definierten

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr