Vorkurs Informatik WS 2003/2004

Ähnliche Dokumente
Vorkurs Informatik Wintersemester 2015/2016. Programmtexte

Vorlesung: von Montag, , bis Mittwoch, , Uhr. Emil-Figge-Straße 50, HS 1, Campus Nord Hörsaalgbäude I, Hörsaal 6, Campus Süd

Prof. Dr. Heinrich Müller. Informatik VII Universität Dortmund. Organisatorisches zum Vorkurs Informatik

Vom Problem über den Algorithmus zum Programm

FD Informatik Mauch SSDL (WHRS) Reutlingen. Algorithmen

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik Was ist Informatik? Teilgebiete der Informatik 8

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Kapitel 1: Informationsverarbeitung durch Programme

Repetitorium Informatik (Java)

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Einstieg in die Informatik mit Java

1 Klassen und Objekte

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Java I Vorlesung Imperatives Programmieren

Algorithmen und ihre Programmierung

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

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

Klassenvariablen, Klassenmethoden

Informatik I - Einstiegskurs

Einstieg in die Informatik mit Java

Umsetzung einer Klassenkarte in einer Programmiersprache

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Klassen als Datenstrukturen

Java Einführung Methoden. Kapitel 6

3.2 Datentypen und Methoden

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Intensivübung zu Algorithmen und Datenstrukturen

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Java: Eine kurze Einführung an Beispielen

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Algorithmen und Datenstrukturen

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Vorlesung Programmieren

2. Unterprogramme und Methoden

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

4.4 Imperative Algorithmen Prozeduren

Methoden und Wrapperklassen

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Abschnitt 2: Daten und Algorithmen

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

7. Übung Informatik II - Objektorientierte Programmierung

Praktische Informatik I

Algorithmen implementieren. Implementieren von Algorithmen

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Probeklausur: Programmierung WS04/05

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Einführung in die Programmierung mit VBA

Einstieg in die Informatik mit Java

Javakurs für Anfänger

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Objektorientierte Programmierung Studiengang Medieninformatik

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Einstieg in die Informatik mit Java

Einführung in die Programmierung 1

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Vorkurs Informatik WiSe 17/18

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Einstieg in die Informatik mit Java

JAVA-Datentypen und deren Wertebereich

Vorkurs Informatik WiSe 16/17

Elementare Konzepte von

Java Einführung Klassendefinitionen

Grundlagen der Informatik I (Studiengang Medieninformatik)

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

EINFÜHRUNG IN DIE PROGRAMMIERUNG

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

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

Programmieren I + II Regeln der Code-Formatierung

2 Eine einfache Programmiersprache

JAVA - Methoden

Javakurs für Anfänger

Einstieg in die Informatik mit Java

Programmieren I + II Regeln der Code-Formatierung

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Einführung in die Informatik I (autip)

Programmieren in C/C++ und MATLAB

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Einführung in C. EDV1-04C-Einführung 1

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Fragenkatalog ESOP WS 16/17

JAVA - Methoden - Rekursion

Transkript:

Vorkurs Informatik WS 2003/2004 Prof. Dr. Heinrich Müller Informatik VII Universität Dortmund http://ls7-www.cs.uni-dortmund.de Informatik VII, Universität Dortmund Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 1

Organisatorisches zum Vorkurs Informatik Vorlesung: von Montag, 08.09.2003, bis Dienstag, 23.09.2003, 14-16 Uhr Hörsaalgebäude I, Hörsaal 6, Campus Süd Dozent: Prof. Dr. Heinrich Müller Übungen: von Dienstag, 09.09.2003, bis Dienstag, 23.09.2003, von 12-14 Uhr beziehungsweise 16-18 Uhr Rechnerpool 006 im Kellergeschoss von GB IV, Campus Süd Betreuer: Dipl.-Inform. Frank Weichert Tutor: Jörg Knoche Einteilung der Übungsgruppen nach dieser Vorlesung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 2

Inhaltsverzeichnis Organisatorisches... 5 Teil I. Einführung... 9 Teil II. Programmierung... 22 1. Vom Problem über den Algorithmus zum Programm... 24 2. Grundkonzepte von Algorithmen... 40 3. Grundkonzepte der Programmierung... 52 4. Beispiel: Mittelwert einer Menge von Zahlen... 66 5. Grundkonzepte der Programmierung: Gleitkommazahlen... 70 6. Beispiel: Sortieren einer Menge von Zahlen durch Minimumsuche... 72 7. Grundkonzepte der Programmierung: Funktionen... 81 8. Beispiel: Sortieren einer Menge von Zahlen durch Mischen ( Merge-Sort )... 86 9. Prinzip der Rekursion... 99 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 3

Inhaltsverzeichnis 10. Beispiel: Suchen in einem Datenbestand... 101 11. Grundkonzepte der Programmierung: Klassen und Objekte... 105 12. Beispiel: Suchen in einer verzeigerten linearen Liste... 117 13. Mehr zur objektorientierten Programmierung... 144 14. Andere Programmierstile... 149 Teil III. Algorithmen und Datenstrukturen... 152 1. Asymptotische Aufwandsanalyse... 154 2. Sortieren... 160 3. Suchen... 178 Teil IV. Vom Programm zum Rechner... 212 1. Von-Neumann-Rechner... 215 2. Schaltungen... 223 3. Compiler und formale Sprachen... 241 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 4

Organisatorisches zum Vorkurs Informatik Informationsmaterial: Skript zur Vorlesung - ist eine Kopie dieser Präsentation - wird hier verkauft Erstsemester-CD - enthält eine Programmierumgebung (Java) zur Installation zuhause - enthält noch andere nützliche Information - gibt es hier umsonst Übungsblätter - enthalten Aufgaben zum Stoff der Vorlesung - sollten zuhause gelöst werden und, soweit es Programmieraufgaben sind, bei den Übungen im Rechner-Pool zum Laufen gebracht werden - gibt es hier umsonst Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 5

Zum Vorkurs Zielgruppe: - Studienanfängerinnen und -anfänger der Informatikstudiengänge und andere Interessierte, die nicht oder nur wenig Informatik in der Schule hatten und mit der Programmierung noch nicht vertraut sind Ziel: - Vermittlung von Informatik-Grundwissen, das aus der Schule verfügbar sein sollte und das die erfolgreiche Teilnahme an den einführenden Informatik-Vorlesungen erleichtern soll. Nicht Ziel: - Vorwegnahme von konkreten Vorlesungen -> in die Vorlesungen gehen - Einführung ins Universitätsleben -> O-Phase der Fachschaft Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 6

Organisatorisches zum Vorkurs Informatik Informationsmaterial: Internet-Seite zur Vorlesung: http://ls7-www.cs.uni-dortmund.de/vorkurs-informatik - enthält das Skript zum Herunterladen - enthält die Übungsaufgaben zum Herunterladen - wird Korrekturen zum Skript enthalten - wird möglicherweise weitere nützliche Information anbieten Bitte beachten: Dieses Skript unterscheidet sich teilweise von den Skripten der Vorkurse der vergangenen Jahre Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 7

Zum Vorkurs Inhalt: Teil I: Einführung 08.09. Teil II: Programmierung 09.09.-15.09. Teil III: Datenstrukturen und Algorithmen 16.09.-19.09. Teil IV: Vom Programm zum Rechner 22.09.-23.09. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 8

Teil I. Einführung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 9

Was ist Informatik? Typische Begriffe der Informatik: Information, Informationssysteme, Computer, EDV, Rechner, Programmierung, Programmiersprache, Software, Hardware, Internet, Textverarbeitung, Computerspiele Definition 1: Informatik ist die Wissenschaft von der systematischen Verarbeitung von Information, besonders der automatischen, mit Hilfe von Computern. Definition 2: Informatik ist die Wissenschaft, Technik und Anwendung der maschinellen Verarbeitung und Übermittlung von Information. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 10

Was ist Informatik? Information: abstraktes Abbild (Modell) von Objekten der realen Welt Informationsverarbeitung: Abstraktion (Modellbildung) - das Wesentliche vom Unwesentlichen trennen Informationsverarbeitung: Algorithmen und Systeme Informatiker(innen) müssen - von den Objekten und Vorgängen der realen Welt abstrahieren - mit abstrakten Objekten umgehen. Dazu gibt es Methoden - ganz praktische, die manchmal aber auch ziemlich mathematisch aussehen können. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 11

Einige Teilgebiete der Informatik technische Informatik Rechnerarchitektur Betriebssysteme Rechnernetze Software-Technologie Compilerbau Informationssysteme Mensch-Rechner-Interaktion Theoretische Informatik Algorithmenentwurf Computational Intelligence Systemanalyse Simulation Künstliche Intelligenz Anwendungen der Informatik Informatik und Gesellschaft Didaktik der Informatik Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 12

Eine grobe Einteilung der Informatik Technische Informatik: setzt sich mit der inneren Struktur und dem Bau von Computern und allen damit zusammenhängenden technischen Fragen auseinander Praktische Informatik: umfaßt die Prinzipien und Techniken der Programmierung Angewandte Informatik: bildet die Brücke zwischen den Methoden der Informatik und Anwendungsproblemen Theoretische Informatik: entwickelt mathematische Modelle von Computern und Hilfsmittel zu ihrer präzisen Beschreibung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 13

Literatur P. Rechenberg, G. Pomberger (Hrsg.): Informatik-Handbuch, Carl Hanser Verlag, München, Wien, 2. Auflage, 1999 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 14

Rechnereinführung - Übungsrechner am FBI - PCs Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 15

Übungsrechner am Fachbereich Informatik Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 16

Übungsrechner am Fachbereich Informatik SunRays mit Server SunRay-Hardware: Bildschirm, Tastatur, Maus SunRay SunRay SunRay SunRay SunRay SunRay Ausgaberechner Server 1 Server 2 Server 3 Server 4 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 17

Übungsrechner am Fachbereich Informatik Software: Betriebssystem: Unix (Sun Solaris) Softwaresystem, das den Rechner verwaltet, z.b. die Ausführung von Programmen oder die Verwaltung von Datenbeständen (Dateien) Editor: Emacs Software-System, das die Eingabe und Bearbeitung von Textdateien erlaubt. Java-Programmiersystem: JDK 1.4.2 Software-System, das es erlaubt, eigene Programme auf einem Rechner ablaufen zu lassen. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 18

Privat: Personal Computer (PC) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 19

Personal Computer (PC) Hardware: Rechner: Gehäuse: Tower Prozessor: ab 2.0 GHz, Intel oder AMD Hauptspeicher(RAM): Minimum 256 MB, 512 MB gut Festplatte: etwa 80 GB CD-/DVD-Laufwerk: Kombi (DVD&CD), z.b 16x/48x Diskettenlaufwerk: 3 1/2 Zoll-Laufwerk und evtl. ein ZIP-Laufwerk Graphikkarte: ein Produkt mit nvidea-geforce4, min. 64 MB Soundkarte: Soundblaster Tastatur Maus: 3 Tasten mit Rad (Wheel) Monitor: 19 Zoll Röhrenmonitor oder 17 Zoll TFT-Monitor Modem: 56 kb/s oder ISDN- bzw. ADSL-Karte Drucker: Tintenstrahldrucker Alternative: Laptop/Notebook Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 20

Personal Computer (PC) Software (Standard): Betriebssystem: Microsoft Windows XP oder Windows 2000 Editor: NetBeans IDE V3.5 (früher: Sun ONE Studio) Java-Programmiersystem: JDK 1.4.2 Software (Alternative): Betriebssystem: Linux, z.b. von Debian oder SuSE Editor: NetBeans IDE V3.5 Java-Programmiersystem: JDK 1.4.2 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 21

Teil II. Programmierung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 22

Inhalt: 1. Vom Problem über den Algorithmus zum Programm 2. Grundkonzepte von Algorithmen 3. Grundkonzepte der Programmierung 4. Beispiel: Mittelwert einer Menge von Zahlen 5. Grundkonzepte der Programmierung: Gleitkommazahlen 6. Beispiel: Sortieren einer Menge von Zahlen durch Minimumsuche 7. Grundkonzepte der Programmierung: Funktionen 8. Beispiel: Sortieren einer Menge von Zahlen durch Mischen 9. Prinzip der Rekursion 10. Beispiel: Suchen in einem Datenbestand 11. Grundkonzepte der Programmierung: Klassen und Objekte 12. Beispiel: Suchen in verzeigerten linearen Listen 13. Mehr zur objektorientierten Programmierung 14. Andere Programmierstile Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 23

1. Vom Problem über den Algorithmus zum Programm Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 24

Vom Problem über den Algorithmus zum Programm reale Welt Problem abstrakte Objekte informationsverarbeitendes System Abstraktion Darstellung Algorithmus Programm Problemanalyse funktionale Spezifikation Algorithmenentwurf Darstellung in formalisierter Sprache für Ausführung durch Rechner Rechner Realisierung Maschine Umsetzung in Elementarschritte einer Maschine Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 25

Vom Problem über den Algorithmus zum Programm Algorithmus Endliche Vorschrift zur eindeutigen Zuordnung von Ausgabegrößen zu Eingabegrößen in einer endlichen Zahl von Schritten. Bsp.: Backrezept, Kochrezept, Montageanleitung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 26

Vom Problem über den Algorithmus zum Programm Bsp.: Backrezept Krustelkuchen Zutaten: 1 kg Kartoffeln, 1 mittelgroße Zwiebel, 2 EL Mehl, 2 Eier, Salz, Pfeffer, Majoran, 300 g geräucherte Mettwürstchen, 60 g Butter, 2-3 EL Semmelbrösel, 125 ml saure Sahne Zubereitung: Backofen auf 200 Grad vorheizen. Kartoffeln schälen, waschen, trockentupfen, fein reiben, in einem Passiertuch Flüssigkeit sorgfältig herausdrücken. Zwiebel schälen, fein würfeln. Zwiebel, Mehl und Eier zu den Kartoffeln geben, mit Salz, Pfeffer und Majoran würzen und aller gut mischen. Mettwürstchen in Scheiben schneiden. Eine Kastenform (1 l Füllmenge) mit etwas flüssiger Butter ausfetten. Kartoffelmasse und Mettwürstchen hineinschichten und Oberfläche mit der restlichen Butter begießen 1 Stunde backen, nach 30 Min. Oberfläche mit Semmelbröseln bestreuen und saure Sahne daraufgießen. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 27

Vom Problem über den Algorithmus zum Programm Algorithmus (ausführlicher) Eine Folge einfacher Anweisungen, die folgende Eigenschaften hat: - Endlichkeit: die Beschreibung ist endlich lang - Terminierung: nach Durchführung endlich vieler Operationen kommt das Verfahren zum Stillstand - Reihenfolge: die Reihenfolge, in der die Operationen anzuwenden sind, ist festgelegt - eindeutige Wirkung: die Wirkung jeder Anweisung der Anweisungsfolge und damit der gesamten Folge ist eindeutig festgelegt. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 28

Vom Problem über den Algorithmus zum Programm Vorgehensweise bei der Lösung von Problemen 1. Problem formulieren 2. Problemanalyse, Problemabstraktion, Problemspezifikation 3. Algorithmenentwurf 4. Nachweis der Korrektheit, Verifikation 5. Aufwandsanalyse 6. Programmierung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 29

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 1. Problem formulieren Möglichkeiten: 1. Finde den jüngsten Studierenden. 2. Finde das Alter des jüngsten Studierenden. Was ist gemeint? Eins von beiden? Beides? Entscheidung: Möglichkeit 1 erscheint passend. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 30

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 2. Problemanalyse, Problemabstraktion, Problemspezifikation Problemanalyse: Fragen: Gibt es eine Lösung? Gibt es genau eine Lösung? Antwort: Für die Möglichkeit 2: beide ja Für die Möglichkeit 1: Es kann mehr als einen Studierenden geben, der die Anforderung erfüllt. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 31

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 2. Problemanalyse, Problemabstraktion, Problemspezifikation Problemabstraktion: Was ist Alter? Ganze positive Zahl Was ist jüngster? Definiert auf der Ordnungsrelation von Zahlen Was heißt finde? Die Altersangaben müssen verfügbar sein. (Bei der Möglichkeit 1 müßten Personenkennung und Alter verfügbar sein) Entscheidungskorrektur: Möglichkeit 2, weil einfacher. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 32

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 2. Problemanalyse, Problemabstraktion, Problemspezifikation Problemspezifikation: Problem: Minimum einer Menge von Zahlen Gegeben: eine Folge a 0,..., a n von positiven ganzen Zahlen, n 0. Gesucht: der kleinste Wert a der gegebenen Zahlen, d.h. a = min{ a 0,..., a n }. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 33

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 3. Algorithmenentwurf Vorgehensweisen bei der Entwicklung eines Lösungsalgorithmus für ein Problem Top-Down-Strategie: Zerlegen des Problems in ganz einfache Teilprobleme, die dann gelöst werden ( Divide & Conquer ). Bottom-Up-Strategie: Aus Lösungen von Teilproblemen wird eine Lösung des Gesamtproblems zusammengefügt. Der Algorithmusentwurf wird in diesem Kapitel behandelt. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 34

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 4. Nachweis der Korrektheit (Semantik, Verifikation) Fragen: Terminiert der Algorithmus? Liefert er immer das richtige Ergebnis? wird im Teil Vom Programm zum Rechner behandelt. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 35

Vom Problem über den Algorithmus zum Programm Beispiel: Jüngster Studierender 5. Aufwandsanalyse wird im Teil Datenstrukturen und Algorithmen behandelt. 6. Programmierung wird in diesem Kapitel behandelt. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 36

Algorithmenentwurf Beispiel: Minimum einer Menge von Zahlen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 37

Minimum einer Menge von Zahlen Gegeben: a 0,a 1,...,a n Gesucht: Kleinster Wert der Eingabemenge Algorithmus Minimum(a 0,a 1,...,a n ) Durchlaufe die Elemente der Menge und merke den bisher kleinsten Wert. Pseudocode: Setze merker auf a 0 ; Setze i auf 0; Solange i < n ist, führe aus: Erhöhe i um 1; Wenn a i < merker, dann Setze merker auf a i ; Gib merker zurück; Kurzschreibweise: merker := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; Wenn a i < merker, dann merker := a i ;} Gib merker zurück; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 38

Minimum einer Menge von Zahlen 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 i a i merker merker := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; Wenn a i <merker, dann merker := a i ;} Gib merker zurück; n=10 0 1 2 3 4 5 6 7 8 11 7 8 3 15 13 9 19 18 11 7 7 3 3 3 3 3 3 9 10 10 4 3 3 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 39

2. Grundkonzepte von Algorithmen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 40

Grundkonzepte von Algorithmen Kurzschreibweise: Block merker := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; Wenn a i < merker, dann merker := a i ;} Gib merker zurück; Wertzuweisung an Variable Schleife Bedingte Anweisung Rückgabeanweisung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 41

Grundkonzepte von Algorithmen Algorithmus: Folge von Anweisungen: Anweisung 1; Anweisung 2;... Ablaufdiagramm: Anw. 1 Anw. 1 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 42

Grundkonzepte von Algorithmen Variable: - hat einen Namen, über den sie angesprochen wird - speichert Information Bsp: merker, a 0, i, n - Verwendung der gespeicherten Information durch Verwendung des Variablennamens: Anstelle des Variablennamens wird die gespeicherte Information eingesetzt Bsp: i < n a i < merker merker := a 0 ; i := 0; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 43

Grundkonzepte von Algorithmen Wertzuweisung: - Anweisung, mit der einer Variablen ein Wert gegeben wird - Schreibweise: Variablenname := Ausdruck Bsp.: merker := a 0 ; i := 0; i := i+1; merker := a i ; - Ausführung einer Wertzuweisung: 1. Werte den Ausdruck auf der rechten Seite aus. 2. Speichere den Wert in der Variablen der linken Seite. Bsp.: i:=0; i 0 i:=i+1; i 1 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 44

Grundkonzepte von Algorithmen Bedingte Anweisung: Anweisung, mit der man Alternativen in einem Algorithmus formulieren kann - Schreibweise: Wenn Bedingung, dann Anweisung 1; Sonst Anweisung 2; Bsp.: Wenn a i < merker, dann merker := a i ; Ausfühung einer bedingten Anweisung: 1. Werte die Bedingung aus. 2. Wenn die Bedingung erfüllt ist, dann führe Anweisung 1 aus. 3. Wenn die Bedingung nicht erfüllt ist, dann führe Anweisung 2 aus. Wenn der Sonst-Teil fehlt, wird so verfahren, wie wenn er da wäre, aber Anweisung 2 nichts tut ( leere Anweisung ). Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 45

Grundkonzepte von Algorithmen Bedingte Anweisung: Wenn Bedingung, dann Anweisung 1; Sonst Anweisung 2; Ablaufdiagramm: wahr Bed. falsch Anw. 1 Anw. 2 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 46

Grundkonzepte von Algorithmen Schleife: - Anweisung, mit der man eine andere Anweisung mehrmals wiederholen kann. - Schreibweise: Solange Bedingung, führe aus: Anweisung Bsp.: Solange i < n ist, führe aus: {i := i+1; Wenn a i < merker, dann merker := a i ;} Ausfühung einer Schleife: 1. Werte die Bedingung aus. 2. Wenn die Bedingung erfüllt ist, dann führe Anweisung aus und fahre mit 1. fort. 3. Wenn die Bedingung nicht erfüllt ist, dann beende die Schleife. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 47

Grundkonzepte von Algorithmen Schleife: Solange Bedingung, führe aus: Anweisung Bed. falsch wahr Anw. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 48

Grundkonzepte von Algorithmen Block: - Zusammenfassung einer Folge von Anweisungen zu einer einzigen Anweisung - Schreibweise: {Anweisung 1;... Anweisung n;} Bsp.: {i := i+1; Wenn a i < merker, dann merker := a i ;} Ausführung eines Blocks: Führe die Anweisungen des Blocks nacheinander in der angegebenen Reihenfolge aus. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 49

Grundkonzepte von Algorithmen Rückgabeanweisung: - gibt einen Wert an die aufrufende Instanz zurück (mehr dazu später) - Schreibweise: Gib Ausdruck zurück; Bsp.: Gib merker zurück; Druckanweisung: Analog zur Rückgabeanweisung, nur daß das Ausgabeziel ein Ausgabegerät wie Bildschirm oder Drucker ist. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 50

Grundkonzepte von Algorithmen Darstellung des Algorithmus als Ablaufdiagramm: Start merker := a 0 i:=0 merker := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; Wenn a i <merker, dann merker := a i ;} Gib merker zurück; falsch i < n falsch wahr i:= i + 1 wahr a i < merker Gib merker zurück Ende merker:=a j Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 51

3. Grundkonzepte der Programmierung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 52

Grundkonzepte der Programmierung Programmierung: Überführung eines Algorithmus- oder Systementwurfs in maschinenverständliche Form durch Formulieren in einer Programmiersprache. Programmiersprachen: hier: Java als Beispiel Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 53

Grundkonzepte der Programmierung Programmiersprache Java: - entwickelt von der Firma Sun Ende der Neunzigerjahre - objektorientiert - ermöglicht rechnerplattformunabhängige Programme - hat außerordentlich umfangreiche Klassenbibliotheken für zahlreiche Anwendungen - ist zur Entwicklung von Internet-Anwendungen besonders geeignet Literatur: Es gibt sehr viele Bücher. Bsp.: Guido Krüger: Go To Java 2, Addison-Wesley. (im Internet verfügbar, siehe auch Erstsemester-CD) Bruce Eckel: Thinking in Java. (im Internet verfügbar, siehe auch Erstsemester-CD) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 54

Grundkonzepte der Programmierung Struktur eines einfachen Java-Programm vom Typ Applikation : public class Programm{ // hier können noch Variablen und Funktionen deklariert werden public static void main(string[] args){ } // hier steht der Text des Hauptprogramms, der aus // Anweisungen besteht, die mit ; enden. } Alles, was auf einer Zeile hinter // kommt, wird vom Rechner ignoriert. Dies dient zur Kommentierung durch den Programmierer. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 55

Grundkonzepte der Programmierung Java-Programm zur Suche des Minimums: public class ProgrammMinSuche{ public static void main(string[] args){ int[] a = {11,7,8,3,15,13,9,19,18,10,4}; int merker = a[0]; // damit hat merker den Wert 11 int i = 0; int n = a.length-1; // gibt den letzten Index der // Folge a while (i<n){ i = i+1; if (a[i]<merker) merker = a[i]; } System.out.println(merker); // druckt das Ergebnis } } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 56

Grundkonzepte der Programmierung Variablendeklaration: - Variablen müssen vor ihrer Verwendung deklariert werden. - Eine Variablendeklaration besteht aus der Angabe ihres Namens und ihres Datentyps. Bsp.: int merker; int i; Datentyp: Menge von Daten gleicher Art Bsp.: ganze Zahlen, reelle Zahlen, Wahrheitswerte - Bei der Deklaration kann einer Variablen auch ein Wert zugewiesen werden, dies muß jedoch nicht sein. Dann muß dies vor der ersten Verwendung des Werts der Variablen durch eine Wertzuweisung geschehen. Bsp.: int[] a = {11,7,8,3,15,13,9,19,18,10,4}; int merker = a[0]; int i = 0; int n = a.length; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 57

Grundkonzepte der Programmierung Variablendeklaration: Bsp.: int[] a = {11,7,8,3,15,13,9,19,18,10,4}; int merker = a[0] // damit hat merker den Wert 11 int i = 0; int n = a.length-1; // gibt den letzten Index der // Folge a int steht für integer und bezeichnet den Datentyp der ganzen Zahlen. int[] steht für den Datentyp einer Folge von ganzen Zahlen ( Array ). Mit a[i] kann auf die i-te Komponente zugegriffen werden. Mit a.length wird die Länge der Folge erhalten. = bezeichnet die Wertzuweisung (entspricht := bei den Algorithmen). Wenn in Java das Gleichheitszeichen zum Vergleichen zweier Werte gebraucht wird, muß == geschrieben werden. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 58

Grundkonzepte der Programmierung While-Schleife: - hat die Form while (Bedingung) Anweisung - entspricht der Schleife Solange... führe aus... bei den Algorithmen. Bsp.: while (i<n){ i = i+1; if (a[i]<merker) merker = a[i]; } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 59

Grundkonzepte der Programmierung Bedingte Anweisung: - hat die Form if (Bedingung) Anweisung 1 else Anweisung 2, wobei der else-teil fehlen darf. - entspricht der bedingten Anweisung Wenn... dann... sonst bei den Algorithmen. Bsp.: if (a[i]<merker) merker = a[i]; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 60

Grundkonzepte der Programmierung Ausdrücke: - sind Formeln zur Berechnung von Werten arithmetische Ausdrücke: - Formeln mit Zahlenwerten, die unter anderem die üblichen Operationen (+,-,*,/) verwenden und geklammert sein können. Bsp.: i+1 3*(2+i) 3/(2*i+5) (5+2)/(-3) - Bei den Operatoren gelten die üblichen Regeln der Bindungsstärke Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 61

Grundkonzepte der Programmierung Boolesche Ausdrücke: - Formeln, die Vergleiche zwischen arithmetischen Ausdrücken oder logische Verknüpfungen enthalten und die als Wert richtig (true) oder falsch (false) liefern Bsp.: 3 < 7 hat den Wert true - werden als Bedingungen bei bedingten Anweisungen und Schleifen verwendet - Vergleichsoperatoren: kleiner als <, größer als >, gleich ==, ungleich!=, kleiner oder gleich <=, größer oder gleich >= Bsp.: 3 == 7 hat den Wert false 3!= 7 hat den Wert true a[i]<merker i < n Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 62

Grundkonzepte der Programmierung - Boolesche Operatoren: nicht!, und &&, oder, mit folgenden Regeln: x!x true false false true x y x&&y false false false false true false true false false true true true x y x y false false false false true true true false true true true true - Boolesche Werte: true (wahr, richtig), false (false) Bsp.: (3 < 7) && (3==7) hat den Wert false ((3 == 7) (3!= 7)) && (2<=2)) hat den Wert true - Deklaration Boolescher Variablen: boolean Variablenname Bsp.: boolean w; - Wertzuweisung: w = (3<7) w bekommt den Wert true - mathematische Symbole: und, oder, nicht Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 63

Grundkonzepte der Programmierung Block: - faßt eine Folge von Anweisungen zu einer neuen Anweisung zusammen - hat die Form { Anweisung 1... Anweisung n } Bsp.: { } i = i+1; if (a[i]<merker) merker = a[i]; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 64

Grundkonzepte der Programmierung Ausgabe: - geschieht mit Methoden, die die Java-Programmierumgebung zur Verfügung stellt. - Ausgabe auf dem Standardausgabegerät (üblicherweise Bildschirm): System.out.println(aktuelle Parameterliste); Bsp.: System.out.println(merker); Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 65

4. Beispiel: Mittelwert einer Menge von Zahlen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 66

Mittelwert einer Menge von Zahlen Gegeben: a 0, a 1,..., a n Gesucht: (a 0 +...+ a n )/(n+1) Algorithmus Mittelwert(a 0, a 1,..., a n ) Durchlaufe die Elemente der Menge und addiere sie dabei auf. Teile das Ergebnis durch die Anzahl der Elemente. Pseudocode: Kurzschreibweise: Setze ak auf a 0 ; Setze i auf 0; Solange i < n ist, führe aus: Erhöhe i um 1; addiere a i zu ak; Setze m auf ak/(n+1); Gib m zurück; ak := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; ak := ak + a i ;} m := ak/(n+1); Gib m zurück; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 67

Mittelwert einer Menge von Zahlen 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 i ak m ak := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; ak := ak + a i ;} m := ak/(n+1); Gib m zurück; n=10 0 11 1 18 2 26 3 29 4 44 5 57 6 66 7 85 8 103 9 113 10 117 10.64 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 68

Mittelwert einer Menge von Zahlen Java-Programm zur Berechnung des Mittelwerts: public class ProgrammMittelwert{ public static void main(string[] args){ int[] a = {11,7,8,3,15,13,9,19,18,10,4}; float ak = a[0]; // damit hat ak den Wert 11.0 int i = 0; int n = a.length-1; // gibt (Größe der Menge a)-1 while (i<n){ i = i+1; ak = ak+a[i]; } float m = ak/(n+1); System.out.println( Mittelwert +m); // druckt das Ergebnis } } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 69

5. Grundkonzepte der Programmierung: Gleitkommazahlen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 70

Grundkonzepte der Programmierung Gleitkommazahlen: - sind Zahlen der Form 1.73 oder 1.71 * 10 15 - lassen sich in Java von ganzen Zahlen dadurch unterscheiden, daß - ein Exponent existiert (1E13 oder 1.71E15) - die Grundzahl einen Dezimalpunkt enthält (1.73) - ein f (für float ) angefügt ist (2f) (es gibt auch noch d für double ). Bsp.: float ak = a[0]; float m = ak/(n+1); Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 71

6. Beispiel: Sortieren einer Menge von Zahlen durch Minimumsuche Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 72

Sortieren einer Menge von Zahlen durch Minimumsuche Gegeben: a 0, a 1,..., a n Gesucht: Anordnung der Eingabewerte nach steigendem Wert Algorithmus MinSort(a 0, a 1,..., a n ) Suche ein Element a k der Menge mit dem kleinsten Wert. Füge a k an das Ende einer neuen Folge an, die am Anfang leer ist. Entferne a k aus der Eingabemenge und verfahre mit der Restmenge genauso. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 73

Sortieren einer Menge von Zahlen durch Minimumsuche Suche ein Element a k der Menge mit dem kleinsten Wert. Füge a k an das Ende einer neuen Folge an, die am Anfang leer ist. Entferne a k aus der Eingabemenge und verfahre mit der Restmenge genauso. Pseudocode: Weise restfolge die gegebene Folge zu; Solange restfolge nicht leer, führe aus: - suche ein Element a k mit dem kleinsten Wert in restfolge; - füge a k an ergebnisfolge an; - entferne a k aus restfolge; gib ergebnisfolge zurück; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 74

Sortieren einer Menge von Zahlen durch Minimumsuche gegebenefolge 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 restfolge a k ergebnisfolge 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 3 3 11, 7, 8, 15, 13, 9, 19, 18, 10, 4 4 3,4 11, 7, 8, 15, 13, 9, 19, 18, 10 7 3, 4, 7 11, 8, 15, 13, 9, 19, 18, 10 8 3, 4, 7, 8 11, 15, 13, 9, 19, 18, 10 9 3, 4, 7, 8, 9 11, 15, 13, 19, 18, 10 10 3, 4, 7, 8, 9, 10 11, 15, 13, 19, 18 11 3, 4, 7, 8, 9, 10, 11 15, 13, 19, 18 13 3, 4, 7, 8, 9, 10, 11, 13 15, 19, 18 15 3, 4, 7, 8, 9, 10, 11, 13, 15 19, 18 18 3, 4, 7, 8, 9, 10, 11, 13, 15, 18 19 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 75

Sortieren einer Menge von Zahlen durch Minimumsuche Suche ein Element a k der Menge mit dem kleinsten Wert. Füge a k an das Ende einer neuen Folge an, die am Anfang leer ist. Entferne a k aus der Eingabemenge und verfahre mit der Restmenge genauso. Pseudocode: Weise restfolge die gegebene Folge zu; Solange restfolge nicht leer, führe aus: - suche ein Element a k mit dem kleinsten Wert in restfolge; - füge a k an ergebnisfolge an; - entferne a k aus restfolge; gib ergebnisfolge zurück; Kurzschreibweise: restfolge := gegebenefolge; Solange restfolge nicht leer, führe aus: {a k := MinSuche(restfolge); FügeAn(a k, ergebnisfolge); Enferne(a k, restfolge);} gib ergebnisfolge zurück; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 76

Sortieren durch Minimumsuche ohne Hilfsmenge Gegeben: a 0, a 1,..., a n Gesucht: Anordnung der Eingabewerte nach steigendem Wert Algorithmus MinSort2(a 0, a 1,..., a n ) - Ordne die Menge zu einer Folge an. - Suche ein Element der Folge mit dem kleinsten Wert. Vertausche das erste Element der Folge mit diesem Element. - Suche in der Restfolge ab dem zweiten Element ein Element mit kleinstem Wert. Vertausche das zweite Element der Folge mit diesem Element. - Führe dieses Verfahren mit der Restfolge ab dem dritten Element, dem vierten Element und so weiter bis zum vorletzten Element aus. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 77

Sortieren einer Menge von Zahlen durch Minimumsuche gegebenefolge 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 a k 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 3, 7, 8, 11, 15, 13, 9, 19, 18, 10, 4 3, 4, 8, 11, 15, 13, 9, 19, 18, 10, 7 3, 4, 7, 11, 15, 13, 9, 19, 18, 10, 8 3, 4, 7, 8, 15, 13, 9, 19, 18, 10, 11 3, 4, 7, 8, 9, 13, 15, 19, 18, 10, 11 3, 4, 7, 8, 9, 10, 15, 19, 18, 13, 11 3, 4, 7, 8, 9, 10, 11, 19, 18, 13, 15 3, 4, 7, 8, 9, 10, 11, 13, 18, 19, 15 3, 4, 7, 8, 9, 10, 11, 13, 15, 19, 18 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 3 4 7 8 9 10 11 13 15 18 19 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 78

Sortieren einer Menge von Zahlen durch Minimumsuche Java-Programm zur Sortierung durch Minimumsuche: public class ProgrammMinSort{ static int MinSuche(int[] r, int s) { // gibt den Index eines Elements von r mit kleinstem // Wert im Bereich ab Index s zurück int wmerker = r[s]; // merkt den kleinsten Wert int imerker = s; // merkt einen Index zum kleinsten Wert int i = s; int n = r.length-1; while (i<n){ i = i+1; if (r[i] < wmerker){ wmerker = r[i]; imerker= i;} } return imerker; } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 79

Sortieren einer Menge von Zahlen durch Minimumsuche } public static void main(string[] args){ int[]a = {11,7,8,3,15,13,9,19,18,10,4}; int n = a.length-1; int i = 0; int k; // speichert den Minimumsindex while (i < n){ k = MinSuche(a,i); int merker = a[i]; // vertausche a[k] und a[i] a[i] = a[k]; //... a[k] = merker; //... i=i+1;} i=0; while (i <= n){ System.out.println(a[i]); i=i+1;} } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 80

7. Grundkonzepte der Programmierung: Funktionen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 81

Grundkonzepte der Programmierung Funktionen ( statische Methoden ): - bestimmen aufgrund von Eingabeparametern einen Rückgabewert - werden deklariert durch static Rückgabetyp Funktionsname(formale Parameterdeklaration) { Anweisungsfolge } Bsp.: static int MinSuche(int[] r, int s){ } - werden aufgerufen durch Funktionsname(aktuelle Parameter) Bsp.: k = MinSuche(a,i); - geben den Rückgabewert über eine return-anweisung zurück: return Rückgabewert; Nach Ausführung einer return-anweisung wird die Bearbeitung der Funktion abgebrochen und an der Aufrufstelle fortgefahren. Bsp.: return imerker; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 82

Grundkonzepte der Programmierung Funktionen ( statische Methoden ): - spezieller Rückgabetyp: leerer Rückgabetyp void Es wird kein Wert zurückgegeben. Bei Rückgabetyp void wird return an der Rücksprungstelle ohne Angabe eines Rückgabewerts aufgerufen. Sichtbarkeitsbereich von Namen: grobe Regel: Ein Name ist in dem Block, in dem er deklariert ist, und in allen Unterblöcken dieses Blocks sichtbar. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 83

Sortieren einer Menge von Zahlen durch Minimumsuche Java-Programm zur Sortierung durch Minimumsuche: public class ProgrammMinSort{ static int MinSuche(int[] r, int s) { // gibt den Index eines Elements von r mit kleinstem // Wert im Bereich ab Index s zurück int wmerker = r[s]; // merkt den kleinsten Wert int imerker = s; // merkt einen Index zum kleinsten Wert int i = s; int n = r.length-1; while (i<n){ i = i+1; if (r[i] < wmerker){ wmerker = r[i]; imerker= i;} } return imerker; } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 84

Sortieren einer Menge von Zahlen durch Minimumsuche } public static void main(string[] args){ int[]a = {11,7,8,3,15,13,9,19,18,10,4}; int n = a.length-1; int i = 0; int k; // speichert den Minimumsindex while (i < n){ k = MinSuche(a,i); int merker = a[i]; // vertausche a[k] und a[i] a[i] = a[k]; //... a[k] = merker; //... i=i+1;} i=0; while (i <= n){ System.out.println(a[i]); i=i+1;} } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 85

8. Beispiel: Sortieren einer Menge von Zahlen durch Mischen ( Merge-Sort ) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 86

Sortieren einer Menge von Zahlen durch Mischen Gegeben: a 0, a 1,..., a n Gesucht: Anordnung der Eingabewerte nach steigendem Wert Algorithmus MischSort(a 0, a 1,..., a n ) - Wenn die Menge nur ein Element hat (n=0), dann gib die Menge unverändert zurück. - Sonst zerlege die Menge in zwei Teilmengen, die beide etwa gleich groß sind, und sortiere beide Teilmengen nach diesem Verfahren; - Mische die sortierten Teilmengen und gib das Ergebnis zurück. Beispiel für das Mischen (Verschmelzen) von zwei sortierten Folgen: Rekursion 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 87

Sortieren einer Menge von Zahlen durch Mischen 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4 11, 7, 8, 3, 15 13, 9, 19, 18, 10, 4 Auflösung der Rekursion 11, 7, 8 3, 15 13, 9, 19 18, 10, 4 11 7, 8 3 15 13,9 19 18, 10 4 7 8 13 9 18 10 7,8 9, 13 10, 18 7, 8, 11 3, 15 9, 13, 19 4, 10, 18 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 88

Sortieren einer Menge von Zahlen durch Mischen Gegeben: a 0, a 1,..., a n Gesucht: Anordnung der Eingabewerte nach steigendem Wert Algorithmus MischSort(a 0, a 1,..., a n ) - Wenn die Menge nur ein Element hat (n=0), dann gib die Menge unverändert zurück. - Sonst zerlege die Menge in zwei Teilmengen, die beide etwa gleich groß sind, und sortiere beide Teilmengen nach diesem Verfahren; - Mische die sortierten Teilmengen und gib das Ergebnis zurück. Rekursion Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 89

Rekursives Mischen zweier sortierter Folgen Algorithmus Mischen(folge1,folge2) Wenn eine der beiden Folgen leer ist, gib die andere als ergebnisfolge zurück. Sonst führe folgendes aus: Wenn das erste Element f von folge1 kleiner oder gleich dem ersten Element von folge2 ist, dann entferne es aus folge1. Sonst entferne das erste Element f von folge2 aus folge2. Setze ergebnisfolge als einelementige Folge mit dem entfernten Element f. Wende den Algorithmus auf die entstandenen folge1 und folge2 an, wodurch sich eine sortierte Folge ergebnisrestfolge ergibt. Füge ergebnisrestfolge an ergebnisfolge an. Gib ergebnisfolge zurück. Rekursion Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 90

Rekursives Mischen zweier sortierter Folgen Algorithmus Mischen(folge1,folge2) 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 7, 8, 11, 15 4, 9, 10, 13, 18, 19 7, 8, 11, 15 9, 10, 13, 18, 19 4 7 7, 8, 9, 10, 11, 13, 15, 18, 19 8, 9, 10, 11, 13, 15, 18, 19 8, 11, 15 9, 10, 13, 18, 19 11, 15 9, 10, 13, 18, 19 8 9 9, 10, 11, 13, 15, 18, 19 10, 11, 13, 15, 18, 19 11, 15 10, 13, 18, 19 11, 15 13, 18, 19 15 13, 18, 19 15 18, 19 18, 19 10 11, 13, 15, 18, 19 11 13, 15, 18, 19 13 15, 18, 19 15 18, 19 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 91

Iteratives Mischen zweier sortierter Folgen Algorithmus Mischen(folge1,folge2) n := Länge von folge1 plus Länge von folge2; folge := eine leere Folge; Solange die Länge von folge kleiner als n ist, führe aus: Wenn folge1 und folge2 nicht leer ist, dann: Wenn das erste Element f1 von folge1 nicht größer als das erste Element f2 von folge2 ist, dann füge f1 an folge an und entferne f1 aus folge1; sonst füge f2 an folge an und entferne f2 aus folge2; Wenn folge1 leer ist, dann füge folge2 an folge an; Wenn folge2 leer ist, dann füge folge1 an folge an; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 92

Iteratives Mischen zweier sortierter Folgen Algorithmus Mischen(folge1,folge2) 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 7, 8, 11, 15 4, 9, 10, 13, 18, 19 7, 8, 11, 15 9, 10, 13, 18, 19 8, 11, 15 9, 10, 13, 18, 19 11, 15 9, 10, 13, 18, 19 11, 15 10, 13, 18, 19 11, 15 13, 18, 19 15 13, 18, 19 15 18, 19 18, 19 3 3, 4 3, 4, 7 3, 4, 7, 8 3, 4, 7, 8, 9 3, 4, 7, 8, 9, 10 3, 4, 7, 8, 9, 10, 11 3, 4, 7, 8, 9, 10, 11, 13 3, 4, 7, 8, 9, 10, 11, 13, 15 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 93

Iteratives Mischen zweier sortierter Folgen Algorithmus Mischen(folge1,folge2) 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11, 13 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18 3, 7, 8, 11, 15 4, 9, 10, 13, 18, 19 3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19 i1 i2 i Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 94

Iteratives Mischen zweier sortierter Folgen public class ProgrammMischSort{ static int[] mische(int f1[],int f2[]){ int n1=f1.length; int n2=f2.length; int n=n1+n2; int[] f=new int[n]; int i1,i2,i; i=0; i1=0; i2=0; while (i<n){ if (i1<n1 & i2<n2){ // f1 und f2 nicht leer: if (f1[i1]<=f2[i2]){ // erstes Element aus f1 f[i]=f1[i1]; i1=i1+1;i=i+1; // übernehmen } else { // erstes Element aus f2 f[i]=f2[i2]; i2=i2+1;i=i+1; // übernehmen } } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 95

Iteratives Mischen zweier sortierter Folgen if (i1==n1){ // f1 leer: while (i2<n2){ // f2 anfügen f[i]=f2[i2]; i2=i2+1; i=i+1; } } if (i2==n2){ // f2 leer: while (i1<n1){ // f1 anfügen f[i]=f1[i1]; i1=i1+1; i=i+1; } } } // while (i<n) return f; } // mische Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 96

Sortieren durch Mischen static int[] MischSort(int f[]){ int n = f.length; if (n>1) {int nl=n/2; int nr=n-nl; int hlinks[] = new int[nl]; int i=0; while (i<nl) {hlinks[i]=f[i]; i=i+1;} int flinks[]=mischsort(hlinks); // Rekursion int hrechts[] = new int[nr]; i=0; while (i<nr) {hrechts[i]=f[nl+i]; i=i+1;} int frechts[]=mischsort(hrechts); // Rekursion return mische(flinks,frechts); } else return f; } // MischSort Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 97

Sortieren durch Mischen public static void main(string[] args){ int[]a = {11,7,8,3,15,13,9,19,18,10,4}; int n = a.length; int[]b = MischSort(a); int i = 0; while (i<n) { System.out.println(b[i]); i=i+1; } } // main } // ProgrammMischSort Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 98

9. Prinzip der Rekursion Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 99

Prinzip der Rekursion 1. Zerlege ein großes Problem in kleinere Versionen des Problems und löse diese auf die gleiche Weise. 2. Füge die Lösungen kleinerer Versionen des Problems zu einer Lösung des großen Problems zusammen. 3. Löse kleine Versionen des Problems direkt. Bsp.: Sortieren durch Mischen 1. Zerlege die gegebene Menge von Zahlen in zwei Teilmengen etwa gleicher Größe und sortiere die beiden Teilmengen auf die gleiche Weise. 2. Mische die beiden sortierten Teilfolgen. 3. Falls die gegebene Menge nur ein Element umfaßt, gib die einelementige Folge, bestehend aus diesem Element, zurück. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 100

10. Beispiel: Suchen in einem Datenbestand Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 101

Suchen in einem Datenbestand Verweise, Referenzen, Zeiger: Stuhl Regal Tisch Bett Stuhl Tisch Regal Bett Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 102

Suchen in einem Datenbestand Gegeben: d 0, d 1,..., d n, wobei die d i auf Studierendendatensätze mit folgender Information verweisen: Name, Matrikelnummer, Geburtsjahr Gesucht: Für eine gegebene Matrikelnummer m ein Verweis auf denjenigen Datensatz, der diese Matrikelnummer enthält. Falls es keinen solchen Datensatz gibt, wird ein leerer Verweis zurückgegeben. Ergebnis für m=88633: d 0 d 1 d 2 Thorsten Meier 88188 1980 Monika Schmidt 88633 1981 Monika Schneider 88755 1980 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 103

Suchen in einem Datenbestand Algorithmus Suche(d 0, d 1,..., d n,m) - Durchlaufe die Elemente der Menge und vergleiche die Komponente Matrikelnummer des Datensatzes des aktuellen Elements mit m. - Wenn beide übereinstimmen, dann gib den Verweis auf das aktuelle Element zurück und breche die Suche ab. - Falls bei keinem Datensatz Gleichheit gefunden wurde, gib einen leeren Verweis zurück. Pseudocode: i := 0; Solange i <= n und d i.gibmatrikelnummer()!= m, führe aus: i := i+1; Wenn i <= n, dann Gib d i zurück; Sonst Gib null zurück. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 104

11. Grundkonzepte der Programmierung: Klassen und Objekte Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 105

Grundkonzepte von Algorithmen Datentyp: Menge von Daten gleicher Art Bsp.: ganze Zahlen, reelle Zahlen, Wahrheitswerte, Zeichenketten, Studierendendaten Zusammengesetzter Datentyp oder Klasse: ist aus Datenkomponenten zusammengesetzt und bietet Operationen zur Manipulation der Datenkomponenten an. Bsp.: Studierendendaten Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 106

Grundkonzepte von Algorithmen Bsp.: Studierendendaten d 0 Komponenten ( Attribute ): Studname (Typ Zeichenkette), Matrikelnummer (Typ ganze Zahl), Geburtsjahr (Typ ganze Zahl) Thorsten Meier 88188 1980 Operationen ( Methoden ): gibstudname(), setzestudname(name), gibmatrikelnummer, setztematrikelnummer(nummer), gibgeburtsjahr(), setzegeburtsjahr(jahr), gibalter() Ein konkreter Datensatz einer Klasse wird auch als Objekt oder Instanziierung einer Klasse bezeichnet. Bsp.: d 0.gibStudname() liefert Thorsten Meier. d 0.setzeMatrikelnummer(20002) liefert d 0.gibAlter() liefert 21. d 0 Thosten Meier 20002 1980 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 107

Suchen in einem Datenbestand Deklaration einer Java-Klasse Studierendendaten : class Studierendendaten { String studname; int matrikelnummer; int geburtsjahr; String gibstudname() { return studname; } void setzestudname( String name) { studname = name; } int gibmatrikelnummer() { return matrikelnummer; } } void setzematrikelnummer( int nummer) { matrikelnummer = nummer; } int gibgeburtsjahr() { return geburtsjahr; } void setzegeburtsjahr(int jahr) { geburtsjahr = jahr; } int gibalter() { return 2001-geburtsjahr; } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 108

Grundkonzepte der Programmierung Deklaration von Klassen in Java: - besteht aus der Angabe eines Klassennamens, von Attributen, von Methoden und von Konstruktoren. Syntax: class Klassenname { Attributdeklaration Konstruktordeklaration Methodendeklaration } Attribute werden wie Variablen deklariert. Methoden werden wie Funktionen deklariert. - bilden zusammen ein Java-Programm, d.h. ein Java-Programm besteht aus einer Menge von Klassen. In einer Klasse muß die Methode main deklariert sein. Mit dieser Methode startet das Gesamtprogramm. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 109

Grundkonzepte der Programmierung Deklaration von Klassen in Java: - Konstruktor: Ein Programmstück, das ausgeführt wird, wenn ein Objekt des Typs der Klasse instanziiert wird. Syntax: Klassenname(formale Parameterdeklaration){ Anweisungsfolge } Falls kein Konstruktor deklariert wird, wird ein vordefinierter ( Default -) Konstruktor ohne Parameter (Klassenname()) verwendet. Bsp.: ein expliziter Konstruktor für die Klasse Studierendendaten: Studierendendaten(String name, int nummer, int jahr) { studname = name; matrikelnummer = nummer; geburtsjahr = jahr; } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 110

Suchen in einem Datenbestand public class Suchprogramm { static Studierendendaten Suche( Studierendendaten d[],int m) { int i=0; int n = d.length; while ((i<n) && (d[i].gibmatrikelnummer()!=m)) i=i+1; if (i<n) return d[i]; else return null; } i := 0; Solange i < =n und d i.gibmatrikelnummer()!= m, führe aus: i := i+1; Wenn i <= n, dann Gib d i zurück; Sonst Gib null zurück. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 111

Suchen in einem Datenbestand } public static void main(string[] args) { Studierendendaten testd[] = new Studierendendaten[3]; testd[0] = new Studierendendaten( Thorsten Meier,88188,1980); testd[1] = new Studierendendaten( Monika Schmidt,88633,1981); testd[2] = new Studierendendaten( Monika Schneider,88755,1980); int m = 88633; boolean gefunden = (Suche(testd,m)!=null); if (gefunden) System.out.println(m+ gefunden ); // hier wird der Wert von m in eine Zeichenfolge gewandelt // und mit der Zeichenfolge gefunden verkettet. else System.out.println(m+ nicht gefunden ); } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 112

Grundkonzepte der Programmierung Deklaration von Java-Objektvariablen: - wie für Variablen einfachen Datentyps Bsp.: Studierendendaten a; Studierendendaten d[]; - Wirkung einer Deklaration: Es wird eine Variable abgelegt, die einen Verweis (Referenz, Zeiger) auf ein Objekt aufnehmen kann. Der Verweis wird auf den leeren Verweis null gesetzt. Bsp: Studierendendaten a; a null Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 113

Grundkonzepte der Programmierung Instanziierung von Java-Objekten: - erzeugt ein Objekt und gibt den Verweis (Referenz, Zeiger) auf dieses zurück. Syntax: new Klassenname(aktuelle Parameter); Bsp.: new Studierendendaten( Thorsten Meier,88188,1980); Thorsten Meier 88188 1980 Der Verweis ist durch den Pfeil angedeutet. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 114

Grundkonzepte der Programmierung Wertzuweisung an Objektvariable: - wie für Variable einfachen Datentyps. - Wirkung einer Wertzuweisung: Der Verweis auf der rechten Seite der Wertzuweisung = wird in die Variable der linken Seite übernommen. Bsp.: Studierendendaten a = new Studierendendaten( Thorsten Meier,88188,1980); Studierendendaten b; b = a; a b Thorsten Meier 88188 1980 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 115

Grundkonzepte der Programmierung zum Vergleich: Wertzuweisung an Variable einfachen Typs (z.b. ganze Zahlen, Gleitkommazahlen, Wahrheitswerte (Boolean)): Bsp.: int a = 5; int b = a; a 5 b 5 Beispiele für Klassen, die bereits Bestandteil der Sprache Java sind: Array, Zeichenfolgen (String) Bsp.: Studierendendaten testd[] = new Studierendendaten[3]; testd 0 1 2 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 116

12. Beispiel: Suchen in einer verzeigerten linearen Liste Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 117

Suchen in einer verzeigerten linearen Liste Die gleiche Aufgabe wie bei Suchen in einem Datenstand, mit dem Unterschied, daß die Daten nun nicht in einem Array gegeben sind, sondern in einer verzeigerten linearen Liste. Array: d 0 1 2 Thorsten Meier 88188 1980 verzeigerte lineare Liste: dliste Monika Schmidt 88633 1981 Monika Schneider 88755 1980 null Thorsten Meier 88188 1980 Monika Schmidt 88633 1981 Monika Schneider 88755 1980 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 118

Suchen in einer verzeigerten linearen Liste Deklaration eines Datenttyps Liste dieser Art: wert naechstes class Liste{ Studierendendaten wert; Liste naechstes; void setzewert(studierendendaten einwert) { wert = einwert;} Thorsten Meier 88188 1980 Liste gibnaechstes() { return naechstes;} } void setzenaechstes(liste einnaechstes) { naechstes = einnaechstes;} Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 119

Suchen in einer verzeigerten linearen Liste Anweisungen zum Anlegen einer Liste: Liste dliste = new Liste(); dliste null null Studierendendaten a = new Studierendendaten( Thorsten Meier,88188,1980); a Thorsten Meier 88188 1980 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 120

Suchen in einer verzeigerten linearen Liste Anweisungen zum Anlegen einer Liste: Liste dliste = new Liste(); dliste null null Studierendendaten a = new Studierendendaten( Thorsten Meier,88188,1980); dliste.setzewert(a); a dliste Thorsten Meier 88188 1980 null Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 121

Suchen in einer verzeigerten linearen Liste Anweisungen zum Anlegen einer Liste: Bsp.: Liste aktuell = dliste; aktuell.setzenaechstes(new Liste()); aktuell = aktuell.gibnaechstes(); aktuell dliste Thorsten Meier 88188 1980 null a = new Studierendendaten( Monika Schmidt,88633,1981); aktuell.setzewert(a); dliste aktuell a Thorsten Meier 88188 1980 Monika Schmidt 88633 1981 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 122

Suchen in einer verzeigerten linearen Liste Anweisungen zum Anlegen einer Liste: aktuell.setzenaechstes(new Liste()); aktuell = aktuell.gibnaechstes(); a = new Studierendendaten( Monika Schneider,88755,1980); aktuell.setzewert(a); dliste aktuell a Thorsten Meier 88188 1980 Monika Schmidt 88633 1981 Monika Schneider 88755 1980 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 123

Die Java-Programmierumgebungen Windows: NetBeans IDE V3.5 Unix: Emacs Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 124

Java-Programmierung mit NetBeans Installation Entwicklungsumgebung starten Erstellen eines ersten Programms: HelloWorld Compilieren und Ausführen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 125

Vorbereitung Installation von Java und NetBeans Programme von der Vorkurs-CD installieren Windows oder Linux Java installieren: JDK_1.4.2 (Sun) NetBeans IDE V3.5 (bzw. Sun ONE Studio 4 oder Forte) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 126

NetBeans - Programmstart 1. Windows Starten des Programms (Doppelklick) über das Icon NetBeans IDE 3.5 von der Windowsarbeitsfläche 2. Linux In einem geöffneten Shell (=Eingabeaufforderung) starten Sie NetBeans über runide. Die folgenden Screenshots stammen von einer Windows-Umgebung, deshalb kann es geringfügige Unterschiede im Erscheinungsbild unter Linux geben. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 127

NetBeans Ansicht nach Programmstart Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 128

HelloWorld Schritt 1: Neues Projekt anlegen Anlegen eines neuen Projektes: Project >> Project Manager Neues Projekt Projekt öffnen Neues Projekt erstellen: New Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 129

HelloWorld Schritt 2: Projektname bestimmen Name für das neue Projekt vergeben: HelloWorld Requester mit OK verlassen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 130

HelloWorld Schritt 3: Projektverzeichnis festlegen Verzeichnis auswählen: File >> New Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 131

HelloWorld Schritt 4: Quelldatei erzeugen Neue Datei ergänzen: File >> New Java-Klassentyp auswählen: Classes -> Empty Abfragedialog mit Next beenden Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 132

HelloWorld Schritt 5: Klassenname festlegen Name der Klasse eingeben: HelloWorld Abfragedialog mit Finish beenden Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 133

HelloWorld Schritt 6: Quellcode eingeben Eingeben des Java-Quellcodes: Das berühmte HelloWorld-Programm Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 134

HelloWorld Schritt 7: Speichern und Compilieren Über die rechte Maustaste PullDown-Menü öffnen Mit linker Maustaste Save auswählen Quellcode übersetzen (Compile) Programm ausführen (Execute) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 135

HelloWorld Schritt 8: Programm ausführen Compiliertes Programm mit Execute starten Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 136

Einführung in die Unix-Systemumgebung Ausstattung Benutzerumgebung Das erste Java-Programm Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 137

Ausstattung SunRays keine Workstations wie z.b. PC s, sondern Terminals, über Ethernet mit PC- Servern verbunden realisieren nur Bildschirmausgabe und Eingabeinteraktionen Geschossbau IV im Raum 006, Sun- Rays (carne[01..12, 21 44]) Einschalten bedeutet hier Einloggen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 138

Einloggen: Erste Anmeldung an das Unix-System Die Anmeldungsmaske 1.) Linke Maustaste auf das Feld Options 2.) Remote Login- >Choose host from list 3.) Rechner auswählen: carne[01..12, 21-44] 4.) Eingabe von Benutzername und Passwort 5.) Nach der Anmeldung: ändern des Passworts (passwd) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 139

Java-Programmierung unter Unix Der Editor emacs als Entwicklungstool: 1.) Emacs starten mit: emacs & Im geöffneten Editor Programm- Code eingeben: class HelloWorld { public static void main(string argv[]) { System.out.println("Hello World."); } } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 140

Java-Programmierung unter Unix Der Editor emacs als Entwicklungstool: 2.) Programm speichern: Pulldown-Menüs mit rechter Maustaste anwählen Files -> Save Buffer In unterer Statuszeile Name eingeben: HelloWorld.java 3.) Programm compilieren (=übersetzen): Über Menü JDE-->Compile Vorgang starten Meldung Compilation finished sollte erscheinen 4.) Programm starten: Menü: JDE-->RunApp Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 141

Marvin-Account Rechnerzugang (marvin) für alle Studierende des FBI 1. Reservieren eines Account Einloggen unter marvin an Marvin-Pool-Rechner (Campus Süd, Pav. 6) Matrikelnummer, Vor- und Nachname eingeben und mit J bestätigen Gewünschtes Passwort eingeben Accountname und Mailadresse werden berechnet <vorname>.<nachname>@marvin.cs.uni-dortmund.de Bitte Passwort und Accountnamen merken 2. Freischalten des Account Beim Operating der IRB (Campus Süd, GB V, R 311) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 142

Links zu Java und Unix http://irb- ww.cs.uni- dortmund.de/anleitungen http://www.javasoft.com http://www.java.de Anleitungen zu Unix und CDE Informationen zu Java Homepage der deutschen Java User Group http://www.gnu.org/software/emacs/emacs.html Informationen zum Editor emacs Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 143

13. Mehr zur objektorientierten Programmierung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 144

Vom Problem über den Systementwurf zum Programm reale Welt Abstraktion Problem Problemanalyse funktionale Spezifikation Algorithmenentwurf abstrakte Objekte Systementwurf Algorithmus Darstellung in formalisierter Sprache Darstellung für Ausführung durch Rechner Informationsver- Programm arbeitendes System Realisierung Umsetzung in Elementarschritte einer Maschine Rechner Maschine Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 145

Objektorientierter Entwurf - Modellierung von Systemen durch miteinander interagierende Objekte Bsp.: Videorekorder Benutzungsschnittstelle Tasten für play, stop, fwd, rwd, rec, eject Sensor am Kassettenschacht Systemsteuerung Operationen: Kassette einlegen lassen Band um LS-Kopf wickeln nach rechts laufen nach rechts abspulen nach links abspulen Schreibkopf aktivieren Lesekopf aktivieren Band entwickeln Kassette auswerfen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 146

Objektorientierter Entwurf Videorekorder-Software Objekt Eingabeverarbeitung Tastendruck aktiviert passende Interpretationsmethode von Eingabeverarbeitung Bsp.: Methode play Objekt Laufwerksteuerung Interpretationsmethode führt eine Sequenz von Steuermethoden von Laufwerksteuerung Bsp.: Methoden lauferechts aktivierelesen Steuermethode aktiviert Laufwerk über Signalleitungen und bekommt Rückmeldung über den Zustand Vorteil des objektorientierten Entwurfs: direkte Zuordnung von realen Funktionseinheiten zu Programmteilen (Objekten) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 147

Konzepte der objektorientierten Programmierung - Objekt = Attribute + Methoden - Verdeckung von Implementierungsdetails durch Spezifikation der Sichtbarkeit: public, protected, private - Vererbung: Deklaration von Unterklassen, die sich durch Hinzunahme weiterer Attribute und Methoden zu einer Klasse ergeben. Bsp.: Videorecorder: Laufwerksteuerung_mit_Fastplay Unterklasse von Laufwerksteuerung - Polymorphismus durch Überladung: Methoden können den gleichen Namen haben, aber etwas unterschiedliches tun. Bsp.: Addition von ganzen Zahlen, Addition von reellen Zahlen, Addition von komplexen Zahlen. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 148

14. Andere Programmierstile Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 149

Programmierstile Imperative Programmierung Programm = eine Folge von Befehlen Bsp.: Fortran, Basic, Pascal, C funktionale Programmierung Programm = eine Schachtelung von Funktionsaufrufen Bsp.: LISP Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 150

Programmierstile logische Programmierung Programm = eine Menge von wenn-dann-regeln. Der dann-teil einer Regel wird ausgeführt, wenn der wenn-teil erfüllt ist. Der dann-teil enthält Aktionen, die dazu führen können, daß andere weitere Regeln ausgeführt werden können. Die Reihenfolge der Regelausführung ist nicht festgelegt. Bsp.: Prolog objektorientierte Programmierung Programm = eine Menge von interagierenden Objekten Bsp.: Smalltalk, C++, Java Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 151

Teil III. Algorithmen und Datenstrukturen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 152

Inhalt 1. Asymptotische Aufwandsanalyse 2. Sortieren 3. Suchen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 153

1. Asymptotische Aufwandsanalyse Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 154

Zeitaufwandsanalyse - durch Abschätzen der Anzahl der ausgeführten Elementaroperationen (E) Bsp: Minimum Min(a 0, a 1,..., a n ) einer Menge von Zahlen Algorithmus Zeitaufwand Anzahl Durchläufe merker := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; Wenn a i <merker, dann merker := a i ;} Gib merker zurück; 1 E 1 1 E 1 1 E n+1 1 E n 1 E n 1 E min. 0, max. n 1 E 1 günstigster Fall: T min (n) = 3n + 4 ungünstigster Fall: T max (n)=4n + 4 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 155

Zeitaufwandsanalyse - Aufwandsmaße allgemein: Sei E die Menge aller Eingaben des Algorithmus, E n :={e in E die Größe von e ist n}, wobei die Größe einer Eingabe e aus E die Anzahl elementarer Datenelemente von e ist, A(e) der Aufwand des Algorithmus bei der Eingabe e. Dann ist A max (n):= max { A(e) e in E n } der maximale Aufwand A min (n):= min { A(e) e in E n } der minimale Aufwand. Speziell für den Zeitaufwand: A := T für den Speicheraufwand: A := S Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 156

Zeitaufwandsanalyse - asymptotische Aufwandsanalyse Beobachtung: die Elementaroperationen haben unterschiedliche Ausführungszeiten, d.h. das genaue Zählen lohnt sich nicht. Vorgehensweise für die Abschätzung des schlechtesten Falls: - Angabe einer oberen Zeitschranke, d.h. einer Funktion, die für jedes Argument größer oder gleich dem korrekten Wert ist. - Beschränkung der Angabe auf die Größenordnung, d.h. Unabhängig von den konkreten Konstanten. Bsp: T max (n) = 4n + 4 hat die Größenordnung n, oder: T max (n) = 4n + 4 wächst mit der Ordnung n. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 157

Zeitaufwandsanalyse - asymptotische Aufwandsanalyse groß-oh-notation : c 0 g f Seien f: IN->IR, g: IN->IR zwei Funktionen. f wächst mit der Ordnung g ( f ist von der Größenordnung g), Schreibweise f=o(g), wenn gilt: Es gibt ein n 0 in IN und ein dazu passendes c 0 > 0, c 0 in IR, so daß f(n) < c 0 * g(n) für alle n > n 0. Bsp.: Für T max (n) = 4n+4 gilt: T max (n) = O(n), da T max (n) < 5n für n > 4 T max (n) = O(n 2 ), da T max (n) < n 2 für n > 4 T max (n) nicht O( n) T max (n) nicht O(1) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 158 n 0

Speicheraufwandsanalyse - durch Abschätzen der Anzahl der während der Algorithmusausführung belegten Elementardateneinheiten (e) Bsp: Minimum Min(a 0, a 1,..., a n ) einer Menge von Zahlen Algorithmus: merker := a 0 ; i := 0; Solange i < n ist, führe aus: {i := i+1; Wenn a i <merker, dann merker := a i ;} Gib merker zurück; Speicherbedarf: a 0, a 1,..., a n merker, i, n: S max (n) = S min (n) = n + 4, d.h. S max (n) = S min (n) = O(n) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 159

2. Sortieren Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 160

Sortieren einer Menge von Zahlen Gegeben: a 0, a 1,..., a n Gesucht: Anordnung der Eingabewerte nach steigendem Wert Bedeutung: Sortieren großer Datenbestände ist eine der Hauptaufgaben kommerziell eingesetzter Rechnersysteme im folgenden: Analyse des Zeitaufwands der Verfahren Sortieren durch Minimumsuche und Sortieren durch Mischen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 161

Sortieren durch Minimumsuche Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 162

Sortieren einer Menge von Zahlen durch Minimumsuche Algorithmus MinSort(a 0,a 1,..., a n ) Zeitaufwand Anzahl Durchläufe restfolge := gegebenefolge; Solange restfolge nicht leer, führe aus: {a k := MinSuche(restfolge); FügeAn(a k, ergebnisfolge); Enferne(a k, restfolge);} gib ergebnisfolge zurück; O(n) 1 O(1) n + 2 O(n) n + 1 O(1) n + 1 O(1) n + 1 O(n) 1 Maximaler Zeitaufwand: T max (n)= (n+1) * O(n) + (3n+4) * O(1) + 2*O(n) = O(n 2 ) Annahme: 1 Nanosekunde = 10-9 Sekunden pro Elementaroperation, n 2 Elementaroperationen dann: Sortieren von 100 000=10 5 Werten benötigt 10 Sekunden Sortieren von 1 000 000=10 6 Werten benötigt 1 000 Sekunden Sortieren von 5 000 000=5*10 6 Werten benötigt 25 000 Sekunden, d.h. fast 7 Stunden Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 163

Sortieren einer Menge von Zahlen durch Minimumsuche Mit Hilfsmengen: restfolge := gegebenefolge; Solange restfolge nicht leer, führe aus: {a k := MinSuche(restfolge); FügeAn(a k, ergebnisfolge); Enferne(a k, restfolge);} gib ergebnisfolge zurück; Speicheraufwand beim i-ten Durchlauf: gegebenefolge restfolge ergebnisfolge a k (n+1) E (n+1-i) E i E 1 E MinSuche,FügeAn, Entferne c E Ohne Hilfsmengen: Die Datenstruktur gegebenefolge wird schrittweise so verändert, daß sie am Ende das Ergebnis enthält. Dies benötigt (n+d) E, wobei d eine von n unabhängige Konstante ist. Summe: (2n+3+c) E Hier kann eine nichtasymptotische Betrachtung praktisch relevant sein. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 164

Sortieren durch Mischen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 165

Iteratives Mischen zweier sortierter Folgen Algorithmus Mischen(folge1,folge2) n1 n2 n=n1+n2 n := Länge von folge1 plus Länge von folge2; folge := eine leere Folge; Solange die Länge von folge kleiner als n ist, führe aus: Wenn folge1 und folge2 nicht leer ist, dann: Wenn das erste Element f1 von folge1 nicht größer als das erste Element f2 von folge2 ist, dann füge f1 an folge an und entferne f1 aus folge1; sonst füge f2 an folge an und entferne f2 aus folge2; Wenn folge1 leer ist, dann füge folge2 an folge an; Wenn folge2 leer ist, dann füge folge1 an folge an; O(1) O(1) O(1) O(1) O(1) O(1) O(n) min{n1,n2} - mal O(n) (n - min{n1,n2}) - mal O(n) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 166

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Wenn die Menge nur ein Element hat (n = 0), dann gib die Menge unverändert zurück. T(n) c 0 Sonst zerlege die Menge in zwei Teilmengen, die beide etwa gleich groß sind, und sortiere beide Teilmengen nach diesem Verfahren; Mische die sortierten Teilmengen und gib das Ergebnis zurück. T(n/2)+T(n/2) O(n) Zeitaufwand: T(0) = c 0, T(n) = T(n/2)+T(n/2)+O(n) für n > 0. Behauptung: T(n) = O(n log n) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 167

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Zeitaufwand: T(0) = c 0, T(n) = T(n/2)+T(n/2)+O(n) für n>0. T(n/2) = T(n/4)+T(n/4)+O(n/2) c n c n c n/2 c n/2 c n/4 c n/4 c n/4 c n/4 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8................................................ +c n +c n +c n... i Stufen, wobei i minimal mit n/2 i < 1, d.h. log n < i =c n (log n +1)) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 168

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Zeitaufwand: T(0) = c 0, T(n) = T(n/2)+T(n/2)+O(n) für n>0. c n T(n/2) = T(n/4)+T(n/4)+O(n/2) c n c n/2 c n/2 c n/4 c n/4 c n/4 c n/4 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8................................................ +c n +c n +c n... i Stufen, wobei i minimal mit n/2 i < 1, d.h. log n < i =c n (log n +1)) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 169

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Zeitaufwand: T(0) = c 0, T(n) = T(n/2)+T(n/2)+O(n) für n>0. T(n/2) = T(n/4)+T(n/4)+O(n/2) c n c n T(n/4) = T(n/8)+T(n/8)+O(n/4) c n/2 c n/2 +c n T(n/8) = T(n/16)+T(n/16)+O(n/8) c n/4 c n/4 c n/4 c n/4 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8 c n/8................................................ +c n +c n... i Stufen, wobei i minimal mit n/2 i < 1, d.h. log n < i =c n (log n +1)) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 170

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Zeitaufwand: T(n) = T(n/2)+T(n/2)+O(n) für n>0. Behauptung: T(n) = O(n log n), wobei log den Logarithmus zur Basis 2 bezeichnet. Beweis: induktiv über n. Exkurs: Vollständige Induktion Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 171

Beweisprinzip der vollständigen Induktion Zu beweisen: Die Behauptung B(n) ist für alle natürlichen Zahlen n k richtig. Beweis: Induktionsanfang: (n=k) Es wird bewiesen, daß die Behauptung B(k) richtig ist, d.h. B(n) gilt für n=k. Induktionsschritt: Es wird bewiesen, daß unter der Annahme, daß die Behauptungen B(n-1), B(n-2),..., B(k) richtig sind, auch die Behauptung B(n) richtig ist. Warum reicht das? B(k) Induktionsschritt mit n=k+1 B(k), B(k+1) Induktionsschritt mit n=k+2 B(k), B(k+1), B(k+2)... Induktionsanfang Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 172

Beweisprinzip der vollständigen Induktion Bsp: Behauptung: Die Summe S(n) der Zahlen von 1 bis n, n 1, ist gleich n(n+1)/2. B(n): S(n)=n(n+1)/2 Beweis: Induktionsanfang: (n=1) Es ist zu beweisen, daß S(1)=1(1+1)/2 richtig ist. Dies stimmt offensichtlich. Induktionsschritt: Es wird bewiesen, daß unter der Annahme, daß S(n-1)=(n-1)n/2, S(n-2)=(n-2)(n-1)/2,..., S(1)=1(1+1)/2 richtig sind, auch S(n)=n(n+1)/2 richtig ist. Das folgt aus S(n) = S(n-1)+n=(n-1)n/2+n = (n+1)n/2=n(n+1)/2 Induktionsannahme Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 173

Beweisprinzip der vollständigen Induktion Bsp: Behauptung: Die Summe S(n) der Quadratzahlen von 1 bis n, n 1, ist gleich n(n+1)(2n+1)/6. B(n): S(n)=n(n+1)(2n+1)/6 Beweis: Induktionsanfang: (n=1) Es ist zu beweisen, daß S(1)=1(1+1)(2+1)/6=1 richtig ist. Dies stimmt offensichtlich. Induktionsschritt: Es wird bewiesen, daß unter der Annahme, daß S(n-1)=(n-1)n(2n-1)/6, S(n-2)=(n-2)(n-1)(2n-3)/6,... richtig sind, auch S(n)=n(n+1)(2n+1)/6 richtig ist. Das folgt aus 2 2 S(n) = S(n-1)+n =(n-1)n (2n-1)/6+n = n(n+1)(2n+1)/6 Induktionsannahme Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 174

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Zeitaufwand: T(n) = T(n/2)+T(n/2)+O(n) für n>0. Behauptung: T(n) = O(n log n), wobei log den Logarithmus zur Basis 2 bezeichnet. Beweis: induktiv über n. Es wird gezeigt, daß es eine Konstante c>0 gibt, so daß T(n) < c n(1+log n) für n>0. Induktionsanfang: Nachweis für n=1. Sei c 1 eine obere Schranke für den Zeitbedarf für Eingaben mit n=1. Dann gilt T(1)= c 1 < c 1 (1+log 1) für alle c> c 1. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 175

Sortieren einer Menge von Zahlen durch Mischen Algorithmus MischSort(a 0,a 1,..., a n ) Induktionsschritt: Nachweis für n>1 unter der Annahme, daß die Aussage für n-1, n-2,...,0 gilt. Aufgrund der Induktionsannahme gilt T(n/2) < c n/2 (1+log (n/2)). Mit T(n) = T(n/2)+T(n/2)+O(n) für n>1 folgt damit T(n) < T(n/2)+T(n/2)+ c 2 n < c n/2 (1+log n/2) + c n/2 (1+ log n/2) + c 2 n Induktionsannahme < c n (1+log (n) -1) + c 2 n < c n (1+log n), Umformung falls c > c 2 Mit c>max{c 1, c 2 } gilt die Behauptung. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 176

Sortieren einer Menge von Zahlen Einige Bemerkungen zum Sortierproblem: - Es kann bewiesen werden, daß jeder Sortieralgorithmus, der nur Vergleiche und Speicherzugriffe verwendet, asymptotisch mindestens c n log n Operationen, c eine Konstante, benötigt. Damit ist Sortieren durch Mischen optimal, wenn es geeignet implementiert wird. - Es gibt zahlreiche andere Sortierverfahren mit Zeitaufwand O(n log n). - Ein schnelles Verfahren ist Quicksort. Quicksort hat einen Zeitaufwand von O(n 2 ) im schlechtesten Fall, im Mittel jedoch von O(n log n). Annahme: 1 Nanosekunde = 10-9 Sekunden pro Elementaroperation n n 2 n log n 100 000=10 5 10 Sek. < 2*10-3 Sek. 1 000 000=10 6 1 000 Sek. < 24*10-3 Sek. 5 000 000=5*10 6 25 000 Sek. < 24*10-3 Sek. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 177

3. Suchen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 178

Operationen auf Mengen Gegeben: Eine Menge S= {s 0, s 1,..., s n } von Zahlen. Operation Suchen : Gesucht: Die Antwort ja, falls eine gegebene Zahl s in S enthalten ist, sonst nein. Operation Einfügen : Gesucht: Für eine gegebene Zahl s, die Erweiterung der Menge S um s Operation Entfernen : Gesucht: Für eine gegebene Zahl s, die um s reduzierte Menge S, falls s in S, sonst bleibt S unverändert. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 179

Operationen auf Mengen im folgenden: Lösungen mit - unsortiertem Array - sortiertem Array - ausgeglichenem binärem Suchbaum - Hashing Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 180

Lösung mit unsortiertem Array Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 181

Lösung mit unsortiertem Array Datenstruktur: Index i: Daten S[i]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 11 7 8 3 15 13 9 19 18 10 4 Variable füllstand: 11 enthält den Index des ersten nicht zur Menge S gehörigen Array-Elements Algorithmus Suche(s) i:=0; solange i < füllstand und nicht S[i] = s, führe aus i := i + 1; wenn i<füllstand, dann gib ja zurück sonst nein Zeitaufwand: T(n)=O(n), wobei n die Größe der Menge (=füllstand) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 182

Lösung mit unsortiertem Array Datenstruktur: Index i: Daten S[i]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 11 7 8 3 15 13 9 19 18 10 4 Variable füllstand: 11 Algorithmus Fügeein(s) wenn füllstand < Länge von S[ ], dann {S[füllstand] := s; füllstand := füllstand+1;} sonst gib Überlauf zurück; Zeitaufwand: T(n)=O(1), wobei n die Größe der Menge (=füllstand) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 183

Lösung mit unsortiertem Array Datenstruktur: Index i: Daten s[i]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 11 7 8 3 15 13 9 19 18 10 4 Variable füllstand: 11 Algorithmus Entferne(s) i := 0; // suche s solange i<füllstand und nicht s[i]=s, führe aus i := i + 1; wenn i<füllstand, dann // entferne s { s[i]:=s[füllstand-1]; füllstand:=füllstand-1; } Zeitaufwand: T(n)=O(n), wobei n die Größe der Menge (=füllstand) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 184

Lösung mit sortiertem Array Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 185

Lösung mit sortiertem Array Datenstruktur: Index i: Daten S[i]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3 4 7 8 9 10 11 13 15 18 19 Variable füllstand: 11 Algorithmus Suche(s,l,r) binäre Suche: Bsp.: s=13 Suche im Intervall [0,10]: s > S[(0+10) div 2] = S[5] -> Suche im Intervall [6,10]: s nicht > S[(6+10) div 2]=S[8]-> Suche im Intervall [6,8]: s nicht > S[(6+8) div 2]=S[7]-> Suche im Intervall [6,7]: s > S[(6+7) div 2] = S[6]-> Suche im Intervall [7,7]: gefunden Zeitaufwand: T(n) = T(n/2)+O(1) für n>0 -> T(n) = O(log n), Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 186

Lösung mit sortiertem Array l m r Algorithmus Suche(s,l,r) // binäre Suche wenn r < l, dann gib nein zurück; sonst wenn l = r und S[l] = s, dann gib ja zurück, sonst nein ; m:= (l+r) div 2; // ganzzahlige Division Wenn S[m] < s, dann wenn Suche(s,m+1,r) = ja, dann gib ja zurück; sonst gib nein zurück; sonst wenn Suche(s,l,m) = ja, dann gib ja zurück; sonst gib nein zurück; T(n) O(1) O(1) T(n/2) O(1) T(n/2) O(1) T(n) = T(n/2)+O(1) für n>0 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 187

Lösung mit sortiertem Array Zeitaufwand: T(n) = T(n/2)+O(1) für n>0, n die Mächtigkeit der Menge S. Behauptung: T(n)=O(log n) Beweis: induktiv über n. Es wird gezeigt, daß es eine Konstante c>0, so daß T(n) < c(1+ log n) für n>1. Induktionsanfang: n=1 Sei c 1 eine obere Schranke für die Rechenzeit von Eingaben mit n=1. Dann gilt T(1)= c 1 < c(1+ log 1) für c> c 1. Induktionsschritt: Nachweis, daß die Behauptung für n>1 unter der Annahme gilt, daß sie für n-1,n-2,...,1 richtig ist. Es gilt: T(n)<T(n/2)+ c 2 < c (1+log n/2)+ c 2 < c (1+log n), wobei c 2 eine Konstante für O(1) und falls c> c 2 gilt. Mit c>max{c 1, c 2 } gilt die Behauptung. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 188

Lösung mit sortiertem Array Datenstruktur: Index i: Daten S[i]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3 4 7 8 9 10 11 13 15 18 19 Variable füllstand: 11 Algorithmus Fügeein(s) Wenn füllstand gleich der Array-Länge (im Bsp. 15) ist, gib Überlauf zurück. Sonst durchlaufe das Array aufsteigend bis zu ersten Index i, für den S[i+1] nicht kleiner s ist. Wenn S[i+1] nicht gleich s, dann verschiebe die Array-Elemente von i+1 bis füllstand um 1 nach rechts und setzte S[i+1] auf s. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 189

Lösung mit sortiertem Array Algorithmus Entferne(s) wenn füllstand>0, dann i := 0; // suche s solange i<füllstand und nicht s =S[i], führe aus i := i+1; wenn nicht i=füllstand, dann { j:=i; // verschiebe den Rest solange j<füllstand-1, führe aus { S[j] := S[j+1]; j:=j+1;} füllstand := füllstand-1;} Zeitaufwand: T(n) = O(n), wobei n=füllstand Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 190

Lösung mit ausgeglichenem binärem Suchbaum Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 191

Lösung mit ausgeglichenem binärem Suchbaum Datenstruktur: 10 7 15 4 9 13 19 3 8 11 18 Bsp.: Suche(11) :10 ->15 ->13 ->11 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 192

Lösung mit ausgeglichenem binärem Suchbaum Definitionen gerichteter Graph: eine Struktur aus Knoten und Kanten. Eine Kante e wird durch ein Paar (p,q) von Knoten definiert, d.h. e=(p,q). Schreibweise: G=(V,E), wobei G der Graph V eine endliche Menge von Knoten E eine Teilmenge von VxV. Bsp.: G=(V,E) mit V={1,2,3,4}, E={(1,2),(2,2),(1,3),(3,4),(4,3)} 1 3 4 zusammenhängender Graph: zu je zwei Knoten gibt es eine Folge von Knoten, in der je zwei aufeinanderfolgende Knoten durch eine Kante verbunden sind. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 193 2

Lösung mit ausgeglichenem binärem Suchbaum binärer Baum: ein zusammenhängender gerichteter Graph B, der eine der folgenden Eigenschaften hat: 1. B hat nur einen Knoten. 2. Falls B mehr als einen Knoten hat, gibt es einen Knoten w, die sogenannte Wurzel, der nur auswärts gerichtete Kanten hat. Wird w inklusive seiner Kanten weggenommen, so entstehen genau zwei zusammenhängende Graphen, die 1. oder 2. erfüllen. Die Endknoten der weggenommen Kanten sind Wurzeln in den entstehenden Graphen. w Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 194

Lösung mit ausgeglichenem binärem Suchbaum Bsp: 10 7 15 4 9 13 19 3 8 11 18 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 195

Lösung mit ausgeglichenem binärem Suchbaum Schlußfolgerung: Jeder Knoten in einem binären Baum ist Wurzel eines binären Baums, der von allen Knoten induziert wird, die direkter oder indirekter Nachfolger des Knotens längs einer gerichteten Folge von Kanten (einem Pfad) sind. Blatt eines binären Baums: ein Knoten ohne Auswärtskanten innerer Knoten eines binären Baums: ein Knoten, der nicht Blatt ist. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 196

Lösung mit ausgeglichenem binärem Suchbaum ausgeglichener binärer Baum zu einer endlichen Menge S von Zahlen (eine mögliche Definition): ein binärer Baum, bei dem für jeden inneren Knoten gilt, daß die beiden Teilbäume, die von seinen Nachfolgern gebildet werden, etwa gleich viele Knoten enthalten. 10 7 15 4 9 13 19 3 8 11 18 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 197

Lösung mit ausgeglichenem binärem Suchbaum binärer Suchbaum zu einer endlichen Menge S von Zahlen: ein binärer Baum, dessen innere Knoten mit den Zahlen aus S markiert sind, so daß - es für jede Zahl genau einen Knoten gibt - die maximal zwei Teilbäume, die durch die Nachfolger eines Knotens p induziert werden, die Eigenschaft haben, daß die Knotenmarkierungen des einen Teilbaums alle kleiner als die Markierung von p sind und die Knotenmarkierungen der andere Teilbaums alle größer sind. ausgeglichener binärer Suchbaum: ein binärer Suchbaum, der ein ausgeglichener binärer Baum ist. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 198

Lösung mit ausgeglichenem binärem Suchbaum ausgeglichener binärer Suchbaum zu einer endlichen Menge S von Zahlen: Bsp.: 10 7 15 4 9 13 19 3 8 11 18 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 199

Lösung mit ausgeglichenem binärem Suchbaum Datenstruktur: 10 Verweise auf Blätter durch null-zeiger repräsentiert 7 15 4 9 13 19 3 8 11 18 Algorithmus Suche(s) Vergleiche s mit dem Wert s der Wurzel. Wenn beide übereinstimmen, dann wird ja zurückgegeben. Wenn nicht, wird im Fall s<s zum linken Nachfolger gegangen und mit diesem Teibaum genauso verfahren. Im Fall s>s geschieht dies mit dem rechten Teilbaum. Falls es den entsprechenden Teilbaum nicht gibt (null-pfeil), wird nein zurückgegeben. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 200

Lösung mit ausgeglichenem binärem Suchbaum Datenstruktur: 10 7 15 4 9 13 19 3 8 11 18 Algorithmus Suche(s) Bsp.: Suche(11): 10->15->13->11 Suche(7): 10->7 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 201

Lösung mit ausgeglichenem binärem Suchbaum Datenstruktur: 10 7 15 4 9 13 19 3 8 11 18 Algorithmus Suche(s) Bsp.: Suche(11): 10->15->13->11 Suche(7): 10->7 Suche(12): 10->15->13->11->null Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 202

Lösung mit ausgeglichenem binärem Suchbaum Zeitaufwand des Algorithmus Suche(s): T(n) = O(log n) Beweis: Der Zeitaufwand ist proportional zu der Anzahl durchzuführender Vergleiche. Die Anzahl durchzuführender Vergleiche ist durch die Höhe des Baums beschränkt. Die Höhe des Baums ist durch O(log (2n+3)) = O(log n) beschränkt (siehe Behauptungen 1-3 im folgenden.) Länge eines Pfades: die Anzahl der Knoten auf dem Pfad Höhe eines binären Baumes: die maximale Pfadlänge von der Wurzel zu den Blättern. Vollständiger binärer Baum: alle Pfade haben die gleiche Länge. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 203

Lösung mit ausgeglichenem binärem Suchbaum Behauptung 1: Für die Höhe h(m) eines ausgeglichenen binären Suchbaums mit m Knoten gilt h(m)=o(log m), d.h. es gibt Konstante c und d, so daß h(m) < c log m + d. Beweis: induktiv über m. Induktionsanfang: m=1: Die Behauptung gilt für alle d>1. Induktionsschritt: Nachweis der Behauptung für m>1 unter der Annahme, daß die Behauptung für m-1, m-2,..., 1 richtig ist. Da die Höhe eines ausgeglichenen Baums gleich 1 plus die Höhe der beiden Unterbäume der Wurzel ist (die beide etwa m/2 Knoten haben), gilt Induktionsannahme h(m) = 1 + h(m/2) < 1 + c log (m/2) + d = c log m c + d + 1 <= c log m + d für c >= 1 und d > 0. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 204

Lösung mit ausgeglichenem binärem Suchbaum Einfügen und Entfernen: Es gibt Klassen ausgeglichener binärer Suchbäume und Algorithmen dazu, die folgenden Zeitaufwand haben (ohne Beweis): Suchen: T(n) = O(log n) Einfügen: T(n) = O(log n) Entfernen: T(n) = O(log n) Zum Vergleich: Unsortierte Arrays: Suchen: T(n) = O(n) Einfügen: T(n) = O(1) Entfernen: T(n) = O(n) Sortierte Arrays: Suchen: T(n) = O(log n) Einfügen: T(n) = O(n) Entfernen: T(n) = O(n) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 205

Lösung mit Hashing Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 206

Lösung mit Hashing Datenstruktur: Bsp.: S={110,119,150, 127, 164, 147, 173} Index i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 h[i]: 127 173 119 150 110 147 164 Hashfunktion: ordnet einer Zahl s einen Index i(s) zu, unter dem sie abgelegt wird. Bsp.: i(s)=s mod k, k die Länge des Arrays (hier 14) Definition: a mod b, wobei a, b ganze Zahlen: Rest der ganzzahligen Division, z.b. 9 mod 4 = 1, 12 mod 3 = 0 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 207

Lösung mit Hashing Datenstruktur: Bsp.: S={110,119,150, 127, 164, 147, 173} Index i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 h[i]: 127 173 119 150 110 147 164 Algorithmus Suche(s) Berechne i(s). Durchlaufe die Liste von h[i(s)]. Wenn ein Element mit dem Wert s auftritt, gib ja aus, sonst nein. Zeitaufwand: im schlechtesten Fall T(n)=O(n) (alle Elemente in einer Liste) im günstigsten Fall T(n)=O(1) (ein Element in einer Liste). Es kann gezeigt werden, daß eher der gute Fall erwartet werden kann. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 208

Lösung mit Hashing Datenstruktur: Bsp.: S={110,119,150, 127, 164, 147, 173} Index i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 h[i]: 127 173 119 150 110 147 164 Algorithmus Fügeein(s) Berechne i(s). Füge s am Anfang der Liste von h[i(s)] ein. Zeitaufwand: T(n)=O(1). Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 209

Lösung mit Hashing Datenstruktur: Bsp.: S={110,119,150, 127, 164, 147, 173} Index i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 h[i]: 127 173 119 150 110 147 164 Algorithmus Entferne(s) Berechne i(s). Durchlaufe die Liste von h[i(s)]. Wenn ein Element mit dem Wert s auftritt, entferne es aus der Liste. Zeitaufwand: im schlechtesten Fall T(n)=O(n) (alle Elemente in einer Liste) im günstigsten Fall T(n)=O(1) (ein Element in einer Liste). Es kann gezeigt werden, daß eher der gute Fall erwartet werden kann. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 210

Lösung mit Hashing Bemerkungen zum Hashing: Bei dem vorgestellten Verfahren wird das Array nicht gut genutzt. Alternative: Die Werte werden im Array abgelegt. Beim Auftreten einer Kollision wird der Wert nach einem vorgegebenen Verfahren in einem noch leeren Array-Element untergebracht, z.b. das erste freie Element nach aufsteigendem Index. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 211

Teil IV. Vom Programm zum Rechner Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 212

Ebenen heutiger Rechner Problemorientierte Programmierspache Assemblersprache Maschinensprache Registertransfer Schaltungen Hardware-Ebene Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 213

Inhalt 1. Von-Neumann-Rechner 2. Schaltungen 3. Compiler und formale Sprachen 4. Semantik und Verifikation Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 214

1. Von-Neumann-Rechner Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 215

Grundstruktur heutiger Rechner - von-neumann-rechnerarchitektur - Rechner = Prozessor + Speicher + Ein-/Ausgabe - Programm und Daten im Speicher - Abarbeiten des Programms durch den Prozessor Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 216

von-neumann-architektur Möglichkeiten der Integration der Funktionseinheiten: - Einzelverbindungswege Prozessor Hauptspeicher Ein-/Ausgabe Direct Memory Access (DMA) Speicherperipherie Interaktionsperipherie Datenkommunikationsperipherie Datenkommunikationsperipherie - Bus (Sammelschiene) Prozessor Hauptspeicher Interaktionsperipherie Bussteuerung Speicherperipherie Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 217

von-neumann-architektur (Haupt-)Speicher: - setzt sich aus Speicherzellen zusammen, die unter Adressen ansprechbar sind: 0 1 2 3 4...... Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 218

von-neumann-architektur Prozessor: - führt Maschinenbefehle aus. Die Befehle sind im Befehlssatz festgelegt. Einteilung eines typischen Befehlssatzes: Befehlssatz Zuweisen (Transport) Rechnen (arithm./log. Verknüpfungen) Steuern (Ablauforganisation) Register- Register Register- Hauptspeicher Register- Ein-/Ausgabe arithmetische Befehle logische Befehle Sprungbefehle Gerätesteuerung Aufbau eines typischen Maschinenbefehls: Operationscode Operanden Bsp.: addiere r 4, r 3, r 2 ; hole r 5, a 1 ; multipliziere r 6, r 5, r 4 ; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 219

von-neumann-architektur Prozessor: - Funktionsgruppen eines Prozessors: Leitwerk: steuert die Abarbeitung des Programms Rechenwerk: führt die arithmetischen und logischen Befehle sowie eventuelle Dienstleistungen (z.b. Adressrechnungen) für das Leitwerk aus Register: Speicherzellen im Prozessor für Operanden und Zwischenergebnisse - sind schneller als als der Hauptspeicher zugreifbar Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 220

von-neumann-architektur Prozessor: Hauptspeicher... SAR BZ +1 Leitwerk SDR Prozessor BR Reg. opcode Operand Rechenwerk SAR: Speicheradressregister SDR: Speicherdatenregister BZ: Befehlszeiger BR: Befehlsregister addiere r 4, r 3, r 2 ; hole r 5, a 1 ; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 221

von-neumann-architektur Prozessor: - Befehlsausführungszyklus: Wiederhole hole den nächsten Befehl vom Hauptspeicher (Adresse im BZ) in das Befehlsregister (BR); erhöhe den Befehlszeiger (BZ); führe den Befehl aus, der im Befehlsregister (BR) steht; bis ein Halte-Befehl auftritt. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 222

2. Schaltungen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 223

Zweiwertige Informationsdarstellung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 224

Zweiwertige Informationsdarstellung Bit: - kleinste Informationseinheit - zwei mögliche Werte: 0 oder 1 - Realisierung: Transistor: auf/zu Byte: - Informationseinheit aus 8 Bits: Bsp: 00100001 Anwendung: Codierung von Zeichen (Textzeichen und Steuerzeichen) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 225

Zweiwertige Informationsdarstellung positive ganze Zahlen: - Darstellung als Dualzahl: z = z n 2 n +z n-1 2 n.1 +z n-2 2 n-2 +... z 0 2 0 Bsp.: dezimal 7 ist dual 111 1 2 2 + 1 2 1 +1 2 0 dezimal 14 ist dual 1110 1 2 3 + 1 2 2 +1 2 1 + 0 2 0 - Dualzahlen sind ein Spezialfall der p-adischen Darstellung (p=2): z = z n p n +z n-1 p n.1 +z n.2 p n-2 +... z 0 p 0 Bsp.: Hexadezimalsystem: p=16, Ziffern: 0-9,A-F dezimal 15 ist hexadezimal F dezimal 16 ist hexadezimal 10 dezimal 27 ist hexadezimal 1B Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 226

Zweiwertige Informationsdarstellung positive ganze Zahlen: Berechnung der p-adischen Darstellung einer Dezimalzahl d: z i = (d div p i ) mod p wobei div die ganzzahlige Division ohne Rest und mod (modulo) die Berechnung des Rests bezeichnet. Bsp.: Dezimal 14 in Dualdarstellung: z 0 = (14 div 1) mod 2 = 14 mod 2 = 0 z 1 = (14 div 2) mod 2 = 7 mod 2 = 1 z 2 = (14 div 4) mod 2 = 3 mod 2 = 1 z 3 = (14 div 8) mod 2 = 1 mod 2 = 1 (z 4 = (14 div 16) mod 2 = 0 mod 2 = 0) 14 = 1 2 3 + 1 2 2 +1 2 1 + 0 2 0 14 div 1 = 1 2 3 + 1 2 2 +1 2 1 + 0 2 0 14 div 2 = 1 2 2 + 1 2 1 +1 2 0 14 div 4 = 1 2 1 + 1 2 0 14 div 8 = 1 2 0 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 227

Zweiwertige Informationsverarbeitung: Boolesche Funktionen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 228

Zweiwertige Informationsverarbeitung Berechnung Boolescher Funktionen n-stellige Boolesche Funktion: Definitionsbereich: Menge der 0/1-Folgen der Länge n Wertebereich: {0,1} Definition boolescher Funktionen durch Wertetabellen: Bsp.: a b c f (a,b,c) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 f ist genau dann gleich 1, wenn die Mehrzahl der Bitstellen des Arguments gleich 1 ist. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 229

Zweiwertige Informationsverarbeitung Berechnung Boolescher Funktionen: Boolesche Formeln: Darstellung einer Booleschen Funktion durch Verknüpfung von elementaren Booleschen Funktionen. Beispiele für elementare Boolesche Funktionen: and, or, nand, nor, not a b and a b or a b nand a b nor a not 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 nand = nicht and, nor = nicht or, 1 = true, 0= false Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 230

Zweiwertige Informationsverarbeitung Berechnung Boolescher Funktionen: Verfahren zur Herleitung einer Booleschen Formel, der sogenannten disjunktiven Normalform, aus and-, or- und not-verküpfungen: Bsp.: a b c f (a,b,c) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 a*b*c 1 0 0 0 1 0 1 1 a*b*c 1 1 0 1 a*b*c 1 1 1 1 a*b*c * entspricht and (math. ) + entspricht or (math. ) entspricht not (math. ) Ergebnis: f = a*b*c + a*b*c+a *b* c+a*b*c math.: ( a b c) (a b c) (a b c) (a b c) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 231

Zweiwertige Informationsverarbeitung Berechnung Boolescher Funktionen: Verfahren zur Herleitung einer Booleschen Formel, der sogenannten disjunktiven Normalform, aus and-, or- und not-verküpfungen: 1. Für alle Zeilen der Tabelle, die den Wert 1 liefern, forme eine Boolesche Formel, die alle Eingabeparameter direkt oder negiert enthält. Ein Parameter genau dann negiert wird, wenn sein Wert auf der Zeile =0 ist. Die Parameter werden mit and verknüpft. 2. Verknüpfe die Formeln aus 1. mit or. Optimierung: Die resultierenden Formeln können häufig noch verkürzt werden (weniger Operationen). Hierfür gibt es Optimierungsverfahren. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 232

Zweiwertige Informationsverarbeitung: Schaltungen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 233

Zweiwertige Informationsverarbeitung Boolescher Schaltkreise: Darstellung einer Booleschen Funktion durch Verknüpfung von Gattern. Gattern entsprechen den elementaren Booleschen Funktionen Beispiele für elementare Boolesche Funktionen: and, or, nand, nor, not and-gatter or-gatter nand-gatter nor-gatter not-gatter and or nand nor not and or Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 234

Zweiwertige Informationsverarbeitung Boolesche Schaltkreise: Bsp.: f = a*b*c + a*b*c+a *b* c+a*b*c a and not b and not or f c and not and a b c a b c Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 235

Schaltungen 1. Zweiwertige Informationsdarstellung: Bit, Byte, positive ganze Zahl 2. Zweiwertige Informationsverarbeitung: Boolesche Funktionen a b S 0 0 0 0 1 1 1 0 1 1 1 0 a*b a*b S= a*b + a*b 3. Zweiwertige Informationsverarbeitung: Schaltungen a b not and or S not and Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 236

Zweiwertige Informationsverarbeitung Beispiel: 1-Bit-Addierer a b Halbaddierer: a b S Ü 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 xor and S Ü xor: entweder oder a b Ü in Addierer: a b Ü in S Ü out 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 HA HA: Halbaddierer Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 237 Ü S HA Ü S OR Ü out S 011 a + 101 b 11 Ü 1000 S

Zweiwertige Informationsverarbeitung Speicher: Bsp.: RS-Flipflop: R= reset, S= set, speichert 1-Bit-Information Lösung: Realisierung durch rückgekoppelte Schaltung: S Q R nor S nor R Gespeicherter Wert: Q Setzen des Speichers auf 1: S=1, R=0 Setzen des Speichers auf 0: S=0, R=1 Ausgabe des gespeicherten Werts: S=0, R=0, d.h. Q=0 oder Q=1 nicht verwendet: S=1, R=1 Q Problem: Zwei Werte (Q=0/1) für die gleiche Eingabe (S=0, R=0) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 238

Zweiwertige Informationsverarbeitung Speicher: RS-Flipflop: Analyse des Verhaltens Zustand R S Q alt Q neu Q alt S R nor nor Q neu Q 0 0 0 0 0 1 0 0 1 1 2 0 1 0 1 3 0 1 1 1 4 1 0 0 0 5 1 0 1 0 6 1 1 0 0 7 1 1 1 0 stabil, gibt den gespeicherten Wert aus stabil, gibt den gespeicherten Wert aus instabil, speichert den Wert 1 ( set ), ->3 stabil, wird auf 1 gesetzt ( set ) stabil, wird auf 0 gesetzt ( reset ) instabil, wird auf 0 gesetzt ( reset ), ->4 stabil, für Speicherfunktion nicht verwendet instabil, ->6 Stabiler Zustand: Q alt =Q neu Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 239

Zweiwertige Informationsverarbeitung Beispiel für einen schwingenden Schaltkreis: b alt a nand b neu b Zustand a b alt b neu Ergebnis: 0 0 0 1 1 0 1 1 2 1 0 1 3 1 1 0 instabil, ->1 stabil, ->1, b=1 instabil, ->3 instabil, ->2 Eingabe a=0: Ausgabe b=1 Eingabe a=1: Ausgabe b schwingt zwischen 0 und 1 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 240

3. Compiler und formale Sprachen Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 241

Compiler und Interpreter Compiler: übersetzt ein Programm, das üblicherweise in einer höheren Programmiersprache geschrieben ist, in ein Programm in einer anderen, üblicherweise einfacheren Sprache, z.b. Assembler oder Maschinensprache Interpreter: arbeitet ein gegebenes Programm schrittweise ab und führt es dabei gleich aus Bsp. Java - Übersetzung des Java-Programms (.java-datei) in ein Java-Byte-Code-Programm (.class-datei), das rechnerunabhängig ist, durch den Java-Compiler - Interpretation des Java-Byte-Code-Programms auf dem Zielrechner durch die Java Virtual Machine (JVM) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 242

Compiler und Interpreter Vorgehensweise: Analyse der syntaktischen Struktur des Programms und Zusammensetzen des übersetzten Programms aus Bausteinen, die Sprachelementen zugeordnet sind (compilieren = zusammensetzen) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 243

Inhalt Grammatiken Sprachtypen nach Chomsky Übersetzung endlicher Automat Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 244

Grammatiken Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 245

Formale Sprachen Sprache: - Menge von Worten über einem Alphabet Alphabet: - endliche Menge von Zeichen Wort: - endliche Folge von Zeichen Bsp.: Alphabet A = {b} Sprache L = {b, bb, bbb, bbbb,...} Syntax: struktureller Aufbau der Worte, z.b. beschrieben durch eine Grammatik Semantik: Bedeutung der Worte der Sprache Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 246

Formale Sprachen Grammatik: Satz -> Subjekt Prädikat Objekt Subjekt -> Vorwort Hauptwort... - Regelwerk, das den Aufbau der Worte einer Sprache beschreibt. Bsp.: Grammatikregeln für L = {b, bb, bbb, bbbb,...} : S -> b, S->Sb Ableitung von Worten durch Ersetzen von Zeichen: S=>b Anwendung der ersten Regel S=>Sb=>bb Anwendung der zweiten Regel, dann der ersten Regel S=>Sb=>Sbb=>bbb zweimal die zweite Regel, dann die erste Regel usw. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 247

Formale Sprachen Grammatik: Bsp.: Grammatik für geklammerte arithmetische Ausdrücke 3*(b+7)+c a*(a+a)+a Alphabet: { a,+,*,(,) } Hilfszeichenmenge: { E,T,F } Startsymbol: E Produktionsregeln: { E->T, E->E+T, T->F, T->T*F, F->a, F->(E) } Bsp.: a*(a+a)+a gehört zur Sprache dieser Grammatik E => E+T => T+T => T*F+T => F*F+T => a*f+t => a*(e)+t =>a*(e+ T)+T => a*(t+t)+t => a*(f+t)+t => a*(a+t)+t => a*(a+f)+t => a*(a+a)+t => a*(a+a)+f => a*(a+a)+a Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 248

Formale Sprachen Grammatik: Definition: ein 4-Tupel G=(N,T,P,S), wobei N eine endliche Menge von Variablenzeichen ( Nichtendzeichen ) T eine endliche Menge von Endzeichen ( Terminalzeichen ), wobei N und T disjunkt sind P eine endliche Menge von Produktionsregeln der Form y -> y, wobei y und y endliche Folgen aus Zeichen ( Worte ) aus N oder T sind, y mindestens ein Zeichen enthalten muß und y auch leer sein kann ( leeres Wort lambda λ). S ein Zeichen aus N, Startvariable genannt. Bsp.; Grammatik auf der vorigen Seite: G=(N,T,P,E) mit N={ E,T,F }, T={ a,+,*,(,) }, P={ E->T, E->E+T, T->F, T->T*F, F->a, F->(E) } Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 249

Formale Sprachen Grammatik: unmittelbare Ableitung u=>v: u geht unmittelbar in v über, wenn gilt: u und v sind Worte aus Zeichen aus N oder T, u hat die Form xyz, v hat die Form xy z, wobei x,y,y,z Worte sind, y->y ist eine Produktionsregel in P. Ableitung u => *v: u geht in v über oder v wird aus u abgeleitet, wenn gilt: Es gibt eine Folge w 1,..., w n von Worten mit u = w 1 und v = w n, sodaß w i => w i+1, i = 1,..., n-1. von G erzeugte (definierte) Sprache L(G): die Menge aller Worte w aus Zeichen aus T, die aus dem Startsymbol ableitbar sind: L(G) = { w S => *w, w enthält nur Endzeichen oder ist das leere Wort} Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 250

Sprachentypen nach Chomsky Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 251

Formale Sprachen Sprachtypen: Chomsky-Typ-i-Sprache, i = 0,... 3: Es gibt eine Chomsky-Typ-i-Grammatik, die die Sprache erzeugt. Typ 1: kontextsensitive Sprache Typ 2: kontextfreie Sprache Typ 3: reguläre Sprache Bsp.: L = {b, bb, bbb, bbbb,...} ist regulär. Die Sprache der arithmetischen Ausdrücke ist kontextfrei. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 252

Formale Sprachen Grammatik G=(N,T,P,E) : Bsp.: Grammatik für geklammerte arithmetische Ausdrücke a*(a+a)+a Alphabet: T={ a,+,*,(,) } Hilfszeichenmenge: N={ E,T,F } Startsymbol: E Produktionsregeln: P={ E->T, E->E+T, T->F, T->T*F, F->a, F->(E) } Bsp.: a*(a+a)+a gehört zur Sprache dieser Grammatik E => E+T => T+T => T*F+T => F*F+T => a*f+t => a*(e)+t =>a*(e+ T)+T => a*(t+t)+t => a*(f+t)+t => a*(a+t)+t => a*(a+f)+t => a*(a+a)+t => a*(a+a)+f => a*(a+a)+a Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 253

Formale Sprachen Grammatik: spezielle Grammatiken nach Chomsky: Chomsky-Typ-0-Grammatik: alle Grammatiken Chomsky-Typ-1-Grammatik (kontextsensitive Grammatiken): Für alle Regeln w->w ist w nicht länger als w. Chomsky-Typ-2-Grammatik (kontextfreie Grammatiken): Typ-1-Grammatiken, für die alle Regeln die Form X->w haben, wobei X ein Variablenzeichen ist. Chomsky-Typ-3-Grammatik: Typ 2-Grammatiken, für die alle Regeln die Form X->x oder X->Yx haben, wobei X, Y Variablenzeichen und x ein Endzeichen sind. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 254

Formale Sprachen Bedeutung der Sprachtypen: Die Syntax der meisten existierenden Programmiersprachen läßt sich im wesentlichen durch kontextfreie Grammatiken beschreiben. Teilsprachen, wie die Menge der Namen oder die Menge der ganzen Zahlen sind regulär. Bsp.: Java Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 255

Formale Sprachen Bedeutung der Sprachtypen: Bsp.: Java-Gleitpunktzahlen in Java-Grammatik-Notation FloatingPointLiteral: Digits. Digits_opt ExponentPart_opt FloatTypeSuffix_opt. Digits ExponentPart_opt FloatTypeSuffix_opt Digits ExponentPart FloatTypeSuffix_opt Digits ExponentPart_opt FloatTypeSuffix ExponentPart: ExponentIndicator SignedInteger Linke Seite der Produktionsregeln Rechte Seiten der Produktionsregeln: jede Zeile definiert eine alternative Regel; opt bedeutet, daß das Symbol auch fehlen darf ExponentIndicator: one of e E SignedInteger: Sign_opt Digits Sign: one of + - FloatTypeSuffix: one of f F d D Endzeichen Bsp.: 1.E-14.12e13F 5d andere, ähnliche, gebräuliche Grammatikdarstellung, z.b. bei Pascal: Backus-Naur-Form (BNF-Form) Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 256

Übersetzung Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 257

Formale Sprachen Übersetzung (nur zur Illustration): Zuweisung von Übersetzungsaktionen an Produktionsregeln Bsp.: geklammerte arithmetische Ausdrücke mit n Variablen Alphabet: T={ a 1,..., a n,+,*,(,) } Hilfszeichenmenge: N={ E,T,F } Startsymbol: E Produktionsregeln: P={ E->T, E->E+T, T->F, T->T*F, F->a i, i = 1,...n, F->(E) } Befehlsatz der Zielsprache: hole a,b (a=b), addiere a,b,c (a=b+c), multipliziere a,b,c (a=b*c) Zuweisung von Aktionen: E->T e k: =t i ; E->E+T e k := e i +t j ; T->F t k := f i ; T->T*F t k := t i * f j ; F->a i f k := a i ; F->(E) f k := e i ; wobei e i, f i,t i Programmvariable sind. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 258

Formale Sprachen Übersetzung: - Bestimme eine Ableitung für das gegebene Wort (Programm). Wenn dies nicht möglich ist, gib eine Fehlermeldung aus (Syntaxfehler). Wenn dies möglich ist, fahre wie folgt fort: - Arbeite die Ableitung von hinten nach vorne ab. - Gib die zugeordneten Anweisungen der Produktionsregeln aus. - Tritt links ein Index auf, der rechts nicht vorhanden ist, gib diesem den kleinsten bisher nicht verwendeten Indexwert. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 259

Formale Sprachen Übersetzung: E->T e k = t i ; E-> E+T e k := e i + t j ; T->F t k := f i ; T-> T*F t k := t i * f j ; F->a i f k := a i ; F-> (E) f k := e i ; Bsp.: a 1 *(a 2 + a 3 ) + a 4 Ableitung Ersetzung E =>E+T =>T+T =>T*F+T =>F*F+T =>a 1 *F+T => a 1 *(E)+T => a 1 *(E+T)+T Ableitung Ersetzung =>a 1 *(T+T)+T => a 1 *(F + T)+T => a 1 *(a 2 + T)+T => a 1 *(a 2 + F)+T => a 1 *(a 2 + a 3 )+T => a 1 *(a 2 + a 3 )+ F => a 1 *(a 2 + a 3 )+ a 4 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 260

Formale Sprachen Übersetzung: E->T e k = t i ; E-> E+T e k := e i + t j ; T->F t k := f i ; T-> T*F t k := t i * f j ; F->a i f k := a i ; F-> (E) f k := e i ; Bsp.: a 1 *(a 2 + a 3 ) + a 4 Ableitung Ersetzung E =>E+T =>T+T =>T*F+T =>F*F+T =>a 1 *F+T => a 1 *(E)+T => a 1 *(E+T)+T Ableitung Ersetzung =>a 1 *(T+T)+T => a 1 *(F + T)+T => a 1 *(a 2 + T)+T => a 1 *(a 2 + F)+T => a 1 *(a 2 + a 3 )+T => a 1 *(a 2 + a 3 )+ F f 5 := a 4 ; => a 1 *(a 2 + a 3 )+ a 4 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 261

Formale Sprachen Übersetzung: E->T e k = t i ; E-> E+T e k := e i + t j ; T->F t k := f i ; T-> T*F t k := t i * f j ; F->a i f k := a i ; F-> (E) f k := e i ; Bsp.: a 1 *(a 2 + a 3 ) + a 4 Ableitung Ersetzung E =>E+T =>T+T =>T*F+T =>F*F+T =>a 1 *F+T => a 1 *(E)+T => a 1 *(E+T)+T Ableitung Ersetzung =>a 1 *(T+T)+T => a 1 *(F + T)+T => a 1 *(a 2 + T)+T => a 1 *(a 2 + F)+T => a 1 *(a 2 + a 3 )+T t 6 := f 5 ; => a 1 *(a 2 + a 3 )+ F f 5 := a 4 ; => a 1 *(a 2 + a 3 )+ a 4 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 262

Formale Sprachen Übersetzung: E->T e k = t i ; E-> E+T e k := e i + t j ; T->F t k := f i ; T-> T*F t k := t i * f j ; F->a i f k := a i ; F-> (E) f k := e i ; Bsp.: a 1 *(a 2 + a 3 ) + a 4 Ableitung Ersetzung E e 18 := e 17 + t 6 ; =>E+T e 17 := t 16 ; =>T+T t 16 := t 15 * f 13 ; =>T*F+T t 15 := f 14 ; =>F*F+T f 14 := a 1 ; =>a 1 *F+T f 13 := e 12 ; => a 1 *(E)+T e 12 := e 11 + t 8 ; => a 1 *(E+T)+T e 11 := t 10 ; Ableitung Ersetzung =>a 1 *(T+T)+T t 10 := f 9 ; => a 1 *(F + T)+T f 9 := a 2 ; => a 1 *(a 2 + T)+T t 8 := f 7 ; => a 1 *(a 2 + F)+T f 7 := a 3 => a 1 *(a 2 + a 3 )+T t 6 := f 5 ; => a 1 *(a 2 + a 3 )+ F f 5 := a 4 ; => a 1 *(a 2 + a 3 )+ a 4 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 263

Formale Sprachen Übersetzung: E e 18 := e 17 + t 6 ; =>E+T e 17 := t 16 ; =>T+T t 16 := t 15 * f 13 ; =>T*F+T t 15 := f 14 ; =>F*F+T f 14 := a 1 ; =>a 1 *F+T f 13 := e 12 ; => a 1 *(E)+T e 12 := e 11 + t 8 ; => a 1 *(E+T)+T e 11 := t 10 ; Kopie von voriger Seite =>a 1 *(T+T)+T t 10 := f 9 ; => a 1 *(F + T)+T f 9 := a 2 ; => a 1 *(a 2 + T)+T t 8 := f 7 ; => a 1 *(a 2 + F)+T f 7 := a 3 => a 1 *(a 2 + a 3 )+T t 6 := f 5 ; => a 1 *(a 2 + a 3 )+ F f 5 := a 4 ; => a 1 *(a 2 + a 3 )+ a 4 Ergebnis: f 5 := a 4 ; t 6 := f 5 ; f 7 := a 3 ; t 8 := f 7 ; f 9 := a 2 ; t 10 := f 9 ; e 11 := t 10 ; e 12 :=e 11 + t 8 ; f 13 :=e 12 ; f 14 :=a 1 ; t 15 :=f 14 ; t 16 :=t 15 * f 13 ; e 17 :=t 16 ; e 18 :=e 17 + t 6 ; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 264

Formale Sprachen Übersetzung: Ergebnis (Kopie von voriger Seite): f 5 := a 4 ; t 6 := f 5 ; f 7 := a 3 ; t 8 := f 7 ; f 9 := a 2 ; t 10 := f 9 ; e 11 := t 10 ; e 12 :=e 11 + t 8 ; f 13 :=e 12 ; f 14 :=a 1 ; t 15 :=f 14 ; t 16 :=t 15 * f 13 ; e 17 :=t 16 ; e 18 :=e 17 + t 6 ; Optimierung: Entfernen von Zuweisungsketten t 6 := a 4 ; t 8 := a 3 ; e 11 := a 2 ; f 13 :=e 11 +t 8 ; t 15 :=a 1 ; e 17 :=t 15 *f 13 ; e 18 :=e 17 +t 6 ; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 265

Formale Sprachen Übersetzung: t 6 := a 4 ; t 8 := a 3 ; e 11 := a 2 ; Kopie von voriger Seite f 13 :=e 11 +t 8 ; t 15 :=a 1 ; e 17 :=t 15 *f 13 ; e 18 :=e 17 +t 6 ; Registerzuweisung: r 1 r 2 r 3 r 4 r 5 r 6 r 7 t 6 t 8 e 11 f 13 t 15 e 17 e 18 a 1, a 2, a 3, a 4 stehen für Hauptspeicheradressen Ergebnis: r 1 := a 4 ; r 2 := a 3 ; r 3 := a 2 ; r 4 :=r 3 + r 2 ; r 5 := a 1 ; r 6 :=r 5 *r 4 ; r 7 :=r 6 + r 1 ; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 266

Formale Sprachen Übersetzung: r 1 :=a 4 ; r 2 :=a 3 ; r 3 :=a 2 ; Kopie von voriger Seite r 4 :=r 3 +r 2 ; r 5 :=a 1 ; r 6 :=r 5 *r 4 ; r 7 :=r 6 +r 1 ; Übersetzung in Assembler oder Maschinensprache durch eins-zu-eins-ersetzung: hole r 1, a 4 ; hole r 2, a 3 ; hole r 3, a 2 ; addiere r 4, r 3, r 2 ; hole r 5, a 1 ; multipliziere r 6, r 5, r 4 ; addiere r 7, r 6, r 1 ; Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 267

Formale Sprachen Teilaufgabe der Sprachübersetzung durch Compiler: Bestimmung einer Ableitung für ein gegebenes Programm (= Wort der Sprache. Lösung: Automaten Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 268

Formale Sprachen korrespondierende Automatentypen für Sprachen: für Typ-0-Sprachen: (nichtdeterministische) Turingmachinen für Typ-1-Sprachen: bandbeschränkte Turingmaschinen für Typ 2-Sprachen: (nichtdeterministische) Kellerautomaten für Typ 3-Sprachen: endliche Automaten Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 269

Endlicher Automat Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 270

Formale Sprachen endlicher Automat: Eingabewort Zustandsübergangsdiagramm: Zustand a z 0 z 1 b a b a Ausgabe: akzeptiert/nicht akzeptiert Abarbeitung einer Eingabe: abab: z 0 => z 1 => z 2 => z 1 => z 2 a b a b akzeptierte Sprache: L = {ab, abab, ababab,...} z 3 a b b z 0,..., z 3 : Zustände z 0 : Startzustand z 2 : Endzustand Alphabet: {a, b} z 2 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 271

Formale Sprachen endlicher Automat: spezifiziert durch ein 5-Tupel M = (Z, T, δ, z 0, E), wobei Z eine endliche Menge von Zuständen T ein endliches Eingabealphabet δ eine Überführungsfunktion, die einem Paar aus Zustand z und Eingabezeichen a einen neuen Zustand z = δ(z, a) zuordnet z 0 der Anfangszustand E eine Menge von Endzuständen, die Teilmenge von Z ist. Bsp.: a z 0 z 1 b a b a δ (z 0, a) = z 1, δ(z 0, b) = z 3, δ(z 1, a) = z 3, δ(z 1, b) = z 2, δ(z 2, a) = z 1, δ(z 2, b) = z 3, δ(z 3, a) = z 3, δ(z 3, b) = z 3. z 3 a b b z 2 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 272

Formale Sprachen endlicher Automat: Ein Automat M akzeptiert ein Wort a 1 a 2... a n, genau dann wenn der Automat beim Abarbeiten des Worts beginnend mit dem Startzustand z 0 eine Folge z 0, z 1,..., z n von Zuständen durchläuft, wobei a z 0 z 1 z {i+1} = δ(z i,a {i+1} ), i = 0,..., n-1, b a b z n ein Endzustand ist. Bsp.: abab: z 0 => z 1 => z 2 => z 1 => z 2 δ(z 0,a) = z 1, δ(z 1, b) = z 2, δ(z 2, a) = z 1, δ(z 1, b) = z 2 δ(z 0, a)= z 1, δ(z 0, b)= z 3, δ(z 1, a)= z 3, δ(z 1, b)= z 2, δ(z 2, a) = z 1, δ(z 2, b) = z 3, δ(z 3, a) = z 3, δ(z 3, b) = z 3. mit δ definiert durch Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 273 z 3 a b b z 2 a

Formale Sprachen endlicher Automat: - Von einem Automaten M akzeptierte Sprache L(M): die Menge aller Worte, die M akzeptiert. - Eine von einem endlichen Automaten akzeptierte Sprache ist vom Chomsky-Typ 3, d.h. regulär. Eine entsprechende reguläre Grammatik kann aus der Überführungsfunktion konstruiert werden. Bsp. (nicht durch Konstruktion erhalten): L = {ab, abab, ababab,...} G = {N,T,P,S} mit T={a,b}, N={X,B,S}, P={S->aB, S->aX, X->bS, B->b} S=>aX=>abS=>abaB=>abab Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 274

Formale Sprachen endlicher Automat: - Zu jeder regulären Sprache L gibt es einen endlichen Automaten, der L akzeptiert. Die Überführungsfunktion eines entsprechenden endlichen Automaten kann aus der Grammatik konstruiert werden. Bsp. (nicht durch Konstruktion erhalten): L = {b, bb, bbb, bbbb,...} b z 0 z 1 b T = {b}, Z={z 0,z 1 }, Startzustand z 0, E = {z 1 }, δ(z 0, b) = z 1, δ(z 1, b) = z 1 Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 275

Semantik und Verifikation Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 276

Semantik Sprache: Syntax und Semantik Struktur des Gesprochenen/Geschriebenen Inhalt/Bedeutung des Gesprochenen/Geschriebenen Formaler Ansatz zur Syntaxdefinition: Grammatik Formale Ansätze zur Semantikdefinition: - operationelle Semantiken - denotationelle Semantiken - axiomatische Semantiken Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 277

Semantik Repräsentation: Apfel apple... Information, Begriffe: Apfel reale Welt: Syntax Semantik Abstraktion Semantikschema: (R,I,[. ]) mit - R: Menge der Repräsentationen - I: Menge der Informationen - [. ] Teilmenge von R x I: Semantikrelation oder Interpretation: ist (r,i) in [. ], dann ist i eine Information zur Repräsentation r. Vorkurs Informatik, LS VII, Universität Dortmund, WS 2003/2004 278