9runxuv ,qirupdwln - Vorkurs Informatik

Werbung
9RUNXUV,QIRUPDWLN
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 2004/2005
1
Organisatorisches zum Vorkurs Informatik
Vorlesung: von Montag,13.09.2004, bis Dienstag, 28.09.2004,
14-16 Uhr
Hörsaalgebäude I, Hörsaal 6, Campus Süd
Dozent: Prof. Dr. Heinrich Müller
Übungen: von Dienstag, 14.09.2004, bis Mittwoch, 29.09.2004,
von 12-14 Uhr beziehungsweise 16-18 Uhr
Rechnerpool 006 im Kellergeschoss von GB IV, Campus Süd
Betreuer: Dipl.-Inform. Frank Weichert
Tutoren: Martina Vaupel und Olaf Hengesbach
Einteilung der Übungsgruppen nach dieser Vorlesung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
2
Inhaltsverzeichnis
Organisatorisches ................................................................................
5
Teil I. Einführung...................................................................................
9
Teil II. Programmierung........................................................................ 23
1. Vom Problem über den Algorithmus zum Programm ................... 25
2. Grundkonzepte von Algorithmen .................................................. 41
3. Grundkonzepte der Programmierung ........................................... 53
4. Beispiel: Mittelwert einer Menge von Zahlen................................ 67
5. Grundkonzepte der Programmierung: Gleitkommazahlen ........... 71
6. Beispiel: Sortieren einer Menge von Zahlen
durch Minimumsuche ................................................................... 73
7. Grundkonzepte der Programmierung: Funktionen ....................... 82
8. Beispiel: Sortieren einer Menge von Zahlen durch Mischen
(„Merge-Sort“) .............................................................................. 87
9. Prinzip der Rekursion ................................................................... 100
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
3
Inhaltsverzeichnis
10. Beispiel: Suchen in einem Datenbestand ...................................
11. Grundkonzepte der Programmierung: Klassen und Objekte ......
12. Beispiel: Suchen in einer verzeigerten linearen Liste .................
13. Mehr zur objektorientierten Programmierung .............................
14. Andere Programmierstile ............................................................
102
106
118
145
150
Teil III. Algorithmen und Datenstrukturen ..........................................
1. Asymptotische Aufwandsanalyse .................................................
2. Sortieren .......................................................................................
3. Suchen..........................................................................................
153
155
161
179
Teil IV. Vom Programm zum Rechner .................................................
1. Von-Neumann-Rechner ................................................................
2. Schaltungen ..................................................................................
3. Compiler und formale Sprachen ...................................................
215
218
226
244
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
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 2004/2005
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 2004/2005
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 2004/2005
7
Zum Vorkurs
Inhalt:
Teil I: Einführung
13.09.
Teil II: Programmierung
14.09.-20.09.
Teil III: Datenstrukturen und Algorithmen
Teil IV: Vom Programm zum Rechner
21.09.-24.09.
27.09.-28.09.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
8
Teil I. Einführung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
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 2004/2005
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 2004/2005
11
Einige Teilgebiete der Informatik
Technische Informatik
Rechnerarchitektur
Betriebssysteme
Software-Technologie
Informationssysteme
Theoretische Informatik
Systemanalyse
Compilerbau
Mensch-Rechner-Interaktion
Algorithmenentwurf
Simulation
Rechnernetze
Computational Intelligence
Computergraphik
Künstliche Intelligenz
Anwendungen der Informatik
Informatik und Gesellschaft
Didaktik der Informatik
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
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:
umfasst 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 2004/2005
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 2004/2005
14
Rechnereinführung
- Übungsrechner am FBI
- PCs
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
15
Übungsrechner am Fachbereich Informatik
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
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 2004/2005
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 2004/2005
18
Privat: • Personal Computer (PC)
• Laptop/Notebook
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
19
Personal Computer (PC)
Hardware:
Rechner:
Gehäuse: Tower (Midi oder Maxi)
Prozessor: ab 2.4 GHz, Intel oder AMD
Hauptspeicher(RAM): Minimum 256 MB, 512 MB gut
Festplatte: mindestens 80 GB
Combi-Laufwerk: DVD‘s & CD‘s lesen, und CD‘s brennen,
Diskettenlaufwerk: 3 1/2 Zoll-Laufwerk und evtl. ein ZIP-Laufwerk
Graphikkarte: NVidia-GeForce oder ATI Radeon, min. 128 MB
Soundkarte: Soundblaster
Tastatur
Maus: 3 Tasten mit Rad (Wheel)
Monitor: 17 Zoll TFT-Monitor, alternativ 19 Zoll Röhrenmonitor
Internet: ISDN- bzw. DSL-Zugang
Drucker: Tintenstrahldrucker
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
20
Laptop/Notebook
Prozessor: Centrino (ab 1.5 GHz) oder Mobile-Version (ab 2.0 GHz)
Hauptspeicher(RAM): Minimum 256 MB, 512 MB gut
Display: 15,1‘‘ TFT, Auflösung mindestens 1024x768
Festplatte: mindestens 60 GB
Combi-Laufwerk: DVD‘s & CD‘s lesen, und CD‘s (DVD‘s) brennen
Graphikkarte: NVidia-GeForce oder ATI Radeon, Mobile, 64 MB
-> keine shared Memory Version
Anschlüsse: USB 2.0, PCMCIA, IrDa, LAN, Modem, Parallel, Firewire
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
21
Personal Computer (PC)
Software (Standard):
Betriebssystem: Microsoft Windows XP
Editor: Sun Net Neans 3.6
Java-Programmiersystem: JDK 1.4.2 (aktuell Version 5.0 Beta 2)
Software (Alternative):
Betriebssystem: Linux, z.B. SuSE, Debian
Editor: XEmacs, Net Beans 3.6
Java-Programmiersystem: JDK 1.4.2 (aktuell Version 5.0 Beta 2)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
22
Teil II. Programmierung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
23
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 2004/2005
24
1. Vom Problem über den Algorithmus
zum Programm
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
25
Vom Problem über den Algorithmus zum Programm
reale Welt
Problem
Abstraktion
abstrakte Objekte
Algorithmus
Darstellung
informationsverarbeitendes System
Darstellung in formalisierter Sprache
für Ausführung durch Rechner
Programm
Realisierung
Rechner
Problemanalyse
funktionale Spezifikation
Algorithmenentwurf
Umsetzung in
Elementarschritte
einer Maschine
Maschine
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
26
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 2004/2005
27
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 2004/2005
28
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 2004/2005
29
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 2004/2005
30
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 2004/2005
31
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 2004/2005
32
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üssten
Personenkennung und Alter verfügbar sein)
Entscheidungskorrektur: Möglichkeit 2, weil einfacher.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
33
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 a0 ,..., an von positiven ganzen Zahlen,
n ≥ 0.
Gesucht: der kleinste Wert a der gegebenen Zahlen, d.h.
a = min{ a0 ,..., an }.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
34
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 2004/2005
35
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 2004/2005
36
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 2004/2005
37
Algorithmenentwurf
Beispiel:
Minimum einer Menge von Zahlen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
38
Minimum einer Menge von Zahlen
Gegeben: a0,a1,...,an
Gesucht: Kleinster Wert der Eingabemenge
Algorithmus Minimum(a0,a1,...,an)
Durchlaufe die Elemente der Menge und merke den bisher kleinsten Wert.
Pseudocode:
Kurzschreibweise:
Setze merker auf a0;
Setze i auf 0;
Solange i < n ist, führe aus:
Erhöhe i um 1;
Wenn ai < merker, dann
Setze merker auf ai;
Gib merker zurück;
merker := a0;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
Wenn ai < merker, dann
merker := ai;}
Gib merker zurück;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
39
Minimum einer Menge von Zahlen
11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4
merker := a0 ;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
Wenn ai < merker, dann
merker := ai;}
Gib merker zurück;
n=10
i
ai
merker
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 2004/2005
40
2. Grundkonzepte von Algorithmen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
41
Grundkonzepte von Algorithmen
Kurzschreibweise:
merker := a0;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
Block
Wenn ai < merker, dann
merker := ai ;}
Gib merker zurück;
Wertzuweisung an Variable
Schleife
Bedingte Anweisung
Rückgabeanweisung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
42
Grundkonzepte von Algorithmen
Algorithmus:
Folge von Anweisungen: Anweisung 1; Anweisung 2; ...
Ablaufdiagramm:
Anw. 1
Anw. 1
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
43
Grundkonzepte von Algorithmen
Variable:
- hat einen Namen, über den sie angesprochen wird
- speichert Information
Bsp: merker, a0 , i, n
- Verwendung der gespeicherten Information durch Verwendung des
Variablennamens: Anstelle des Variablennamens wird die
gespeicherte Information eingesetzt
Bsp: i < n
ai < merker
merker := a0 ;
i := 0;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
44
Grundkonzepte von Algorithmen
Wertzuweisung:
- Anweisung, mit der einer Variablen ein Wert gegeben wird
- Schreibweise: Variablenname := Ausdruck
Bsp.: merker := a0 ;
i := 0;
i := i+1;
merker := ai ;
- 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:=i+1;
i
0
i
1
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
45
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 ai < merker, dann merker := ai ;
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 2004/2005
46
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 2004/2005
47
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 ai < merker, dann merker := ai ;}
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 2004/2005
48
Grundkonzepte von Algorithmen
Schleife:
Solange Bedingung, führe aus: Anweisung
Bed.
falsch
wahr
Anw.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
49
Grundkonzepte von Algorithmen
Block:
- Zusammenfassung einer Folge von Anweisungen zu einer einzigen
Anweisung
- Schreibweise: {Anweisung 1; .... Anweisung n;}
Bsp.: {i := i+1;
Wenn ai < merker, dann merker := ai ;}
Ausführung eines Blocks:
Führe die Anweisungen des Blocks nacheinander in der angegebenen
Reihenfolge aus.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
50
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 dass das Ausgabeziel ein
Ausgabegerät wie Bildschirm oder Drucker ist.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
Grundkonzepte von Algorithmen
Darstellung des Algorithmus
als Ablaufdiagramm:
51
Start
merker := a0
i:=0
i<n
falsch
wahr
i:= i + 1
falsch
merker := a0 ;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
Wenn ai < merker, dann
merker := ai;}
Gib merker zurück;
ai < merker
wahr
merker:=aj
Gib merker zurück
Ende
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
52
3. Grundkonzepte der Programmierung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
53
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 2004/2005
54
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 2004/2005
55
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 2004/2005
56
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 2004/2005
57
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 muss jedoch nicht sein. Dann muss 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 2004/2005
58
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, muss „== “ geschrieben werden.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
59
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 2004/2005
60
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 2004/2005
61
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 2004/2005
62
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 2004/2005
63
Grundkonzepte der Programmierung
- Boolesche Operatoren:
nicht !, und &&, oder ||, mit folgenden Regeln:
x
true
false
!x
false
true
x
false
false
true
true
y
false
true
false
true
x&&y
false
false
false
true
x
false
false
true
true
y
false
true
false
true
x||y
false
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 2004/2005
64
Grundkonzepte der Programmierung
Block:
- fasst 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 2004/2005
65
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 2004/2005
66
4. Beispiel:
Mittelwert einer Menge von Zahlen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
67
Mittelwert einer Menge von Zahlen
Gegeben: a0 , a1 , ..., an
Gesucht: (a0 +...+ an )/(n+1)
Algorithmus Mittelwert(a0 , a1 , ..., an )
Durchlaufe die Elemente der Menge und addiere sie dabei auf.
Teile das Ergebnis durch die Anzahl der Elemente.
Pseudocode:
Kurzschreibweise:
Setze ak auf a0 ;
Setze i auf 0;
Solange i < n ist, führe aus:
Erhöhe i um 1;
addiere ai zu ak;
Setze m auf ak/(n+1);
Gib m zurück;
ak := a0 ;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
ak := ak + ai ;}
m := ak/(n+1);
Gib m zurück;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
68
Mittelwert einer Menge von Zahlen
11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4
ak := a0 ;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
ak := ak + ai ;}
m := ak/(n+1);
Gib m zurück;
n=10
i
ak
0
1
2
3
4
5
6
7
8
11
18
26
29
44
57
66
85
103
9
10
113
117
m
10.64
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
69
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 2004/2005
70
5. Grundkonzepte der Programmierung:
Gleitkommazahlen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
71
Grundkonzepte der Programmierung
Gleitkommazahlen:
- sind Zahlen der Form 1.73 oder 1.71 * 1015
- lassen sich in Java von ganzen Zahlen dadurch unterscheiden, dass
- 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 2004/2005
72
6. Beispiel:
Sortieren einer Menge von Zahlen
durch Minimumsuche
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
73
Sortieren einer Menge von Zahlen durch Minimumsuche
Gegeben: a0 , a1 , ..., an
Gesucht: Anordnung der Eingabewerte nach steigendem Wert
Algorithmus MinSort(a0 , a1 , ..., an )
Suche ein Element ak der Menge mit dem kleinsten Wert.
Füge ak an das Ende einer neuen Folge an, die am Anfang leer ist.
Entferne ak aus der Eingabemenge und verfahre mit der Restmenge
genauso.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
74
Sortieren einer Menge von Zahlen durch Minimumsuche
Suche ein Element ak der Menge mit dem kleinsten Wert.
Füge ak an das Ende einer neuen Folge an, die am Anfang leer ist.
Entferne ak 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 ak mit dem
kleinsten Wert in restfolge;
- füge ak an ergebnisfolge an;
- entferne ak aus restfolge;
gib ergebnisfolge zurück;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
75
Sortieren einer Menge von Zahlen durch Minimumsuche
gegebenefolge 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4
restfolge
11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4
11, 7, 8, 15, 13, 9, 19, 18, 10, 4
11, 7, 8, 15, 13, 9, 19, 18, 10
11, 8, 15, 13, 9, 19, 18, 10
11, 15, 13, 9, 19, 18, 10
11, 15, 13, 19, 18, 10
11, 15, 13, 19, 18
15, 13, 19, 18
15, 19, 18
19, 18
19
ak
3
4
7
8
9
10
11
13
15
18
19
ergebnisfolge
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
3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
76
Sortieren einer Menge von Zahlen durch Minimumsuche
Suche ein Element ak der Menge mit dem kleinsten Wert.
Füge ak an das Ende einer neuen Folge an, die am Anfang leer ist.
Entferne ak aus der Eingabemenge und verfahre mit der Restmenge
genauso.
Pseudocode:
Kurzschreibweise:
Weise restfolge die gegebene
restfolge := gegebenefolge;
Folge zu;
Solange restfolge nicht leer, führe aus:
Solange restfolge nicht leer, führe aus:
{ak := MinSuche(restfolge);
FügeAn(ak , ergebnisfolge);
- suche ein Element ak mit dem
kleinsten Wert in restfolge;
Enferne(ak , restfolge);}
gib ergebnisfolge zurück;
- füge ak an ergebnisfolge an;
- entferne ak aus restfolge;
gib ergebnisfolge zurück;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
77
Sortieren durch Minimumsuche ohne Hilfsmenge
Gegeben: a0 , a1 , ..., an
Gesucht: Anordnung der Eingabewerte nach steigendem Wert
Algorithmus MinSort2(a0 , a1 , ..., an )
- 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 2004/2005
78
Sortieren einer Menge von Zahlen durch Minimumsuche
gegebenefolge 11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4
ak
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 2004/2005
79
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 2004/2005
80
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 2004/2005
81
7. Grundkonzepte der Programmierung:
Funktionen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
82
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 2004/2005
83
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 2004/2005
84
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 2004/2005
85
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 2004/2005
86
8. Beispiel:
Sortieren einer Menge von Zahlen
durch Mischen („Merge-Sort“)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
87
Sortieren einer Menge von Zahlen durch Mischen
Gegeben: a0 , a1 , ..., an
Gesucht: Anordnung der Eingabewerte nach steigendem Wert
Algorithmus MischSort(a0 , a1 , ..., an )
- 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
Beispiel für das Mischen (Verschmelzen) von zwei sortierten Folgen:
3, 7, 8, 11, 15
3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19
4, 9, 10, 13, 18, 19
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
88
Sortieren einer Menge von Zahlen durch Mischen
11, 7, 8, 3, 15, 13, 9, 19, 18, 10, 4
11, 7, 8, 3, 15
11, 7
11
8, 3, 15
7
8
3, 15
3
15
3, 15
7, 11
3, 8, 15
3, 7, 8, 11, 15
Auflösung der
Rekursion
13, 9, 19, 18, 10, 4
13, 9, 19
9, 19
13
9
19
9, 19
9, 13, 19
18, 10, 4
18
10, 4
10
4
4, 10
4, 10, 18
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 2004/2005
89
Sortieren einer Menge von Zahlen durch Mischen
Gegeben: a0 , a1 , ..., an
Gesucht: Anordnung der Eingabewerte nach steigendem Wert
Algorithmus MischSort(a0 , a1 , ..., an )
- 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.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
Rekursion
90
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.
Rekursion
Gib ergebnisfolge zurück.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
91
Rekursives Mischen zweier sortierter Folgen
Algorithmus Mischen(folge1,folge2)
3, 7, 8, 11, 15
4, 9, 10, 13, 18, 19
7, 8, 11, 15
7, 8, 11, 15
4, 9, 10, 13, 18, 19
9, 10, 13, 18, 19
8, 11, 15
11, 15
9, 10, 13, 18, 19
9, 10, 13, 18, 19
11, 15
11, 15
15
15
10, 13, 18, 19
13, 18, 19
13, 18, 19
18, 19
18, 19
3
4, 7, 8, 9, 10, 11, 13, 15, 18, 19
4
7, 8, 9, 10, 11, 13, 15, 18, 19
7 8, 9, 10, 11, 13, 15, 18, 19
8
9, 10, 11, 13, 15, 18, 19
9 10, 11, 13, 15, 18, 19
10
11, 13, 15, 18, 19
11
13, 15, 18, 19
15, 18, 19
13
18, 19
15
18, 19
3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
92
Iteratives Mischen zweier sortierter Folgen
Algorithmus Mischen(folge1,folge2)
n := Länge von folge1 plus Länge von folge2;
folge := eine leere Folge;
Solange folge1 und folge2 nicht leer ist:
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;
Solange folge1 nicht leer ist:
füge das erste Element f1 von folge1 an folge an
und entferne f1 aus folge1;
Solange folge2 nicht leer ist:
füge das erste Element f2 von folge2 an folge an
und entferne f2 aus folge2;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
93
Iteratives Mischen zweier sortierter Folgen
Algorithmus Mischen(folge1,folge2)
3, 7, 8, 11, 15
4, 9, 10, 13, 18, 19
3
7, 8, 11, 15
4, 9, 10, 13, 18, 19
7, 8, 11, 15
8, 11, 15
11, 15
9, 10, 13, 18, 19
9, 10, 13, 18, 19
9, 10, 13, 18, 19
3, 4
3, 4, 7
11, 15
11, 15
15
15
10, 13, 18, 19
13, 18, 19
13, 18, 19
18, 19
18, 19
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 2004/2005
94
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, 7, 8, 11, 15
3, 7, 8, 11, 15
3, 7, 8, 11, 15
3, 7, 8, 11, 15
4, 9, 10, 13, 18, 19
4, 9, 10, 13, 18, 19
4, 9, 10, 13, 18, 19
4, 9, 10, 13, 18, 19
3, 4
3, 4, 7
3, 7, 8, 11, 15
3, 7, 8, 11, 15
3, 7, 8, 11, 15
3, 7, 8, 11, 15
4, 9, 10, 13, 18, 19
4, 9, 10, 13, 18, 19
4, 9, 10, 13, 18, 19
4, 9, 10, 13, 18, 19
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
3, 7, 8, 11, 15
4, 9, 10, 13, 18, 19
3, 4, 7, 8, 9, 10, 11, 13, 15, 18, 19
i1
3, 4, 7, 8
3, 4, 7, 8, 9
3, 4, 7, 8, 9, 10
i2
i
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
95
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 (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 2004/2005
96
Iteratives Mischen zweier sortierter Folgen
while (i2<n2){
f[i]=f2[i2];
i2=i2+1; i=i+1;
}
// f2 anfügen,
// falls f2 nicht leer
while (i1<n1){
f[i]=f1[i1];
i1=i1+1; i=i+1;
}
// f1 anfügen
// falls f1 nicht leer
return f;
}
// mische
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
97
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);
int hrechts[] = new int[nr];
i=0;
while (i<nr)
{hrechts[i]=f[nl+i]; i=i+1;}
int frechts[]=MischSort(hrechts);
return mische(flinks,frechts);
}
else return f;
} // MischSort
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
// Rekursion
// Rekursion
98
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 2004/2005
99
9. Prinzip der Rekursion
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
100
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 umfasst, gib die einelementige
Folge, bestehend aus diesem Element, zurück.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
101
10. Beispiel:
Suchen in einem Datenbestand
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
102
Suchen in einem Datenbestand
Stuhl
Verweise, Referenzen, Zeiger:
Tisch
Regal
Bett
Regal
Stuhl
Tisch
Bett
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
103
Suchen in einem Datenbestand
Gegeben: d0 , d1 , ..., dn , wobei die di 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:
d0
d1
Thorsten Meier
88188
1980
Monika Schmidt
88633
1981
d2
Monika Schneider
88755
1980
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
104
Suchen in einem Datenbestand
Algorithmus Suche(d0 , d1 , ..., dn ,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 di.gibMatrikelnummer() != m, führe aus:
i := i+1;
Wenn i <= n, dann
Gib di zurück;
Sonst
Gib null zurück.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
105
11. Grundkonzepte der Programmierung:
Klassen und Objekte
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
106
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 2004/2005
107
Grundkonzepte von Algorithmen
Bsp.: Studierendendaten
Komponenten („Attribute“):
Studname (Typ Zeichenkette),
Matrikelnummer (Typ ganze Zahl),
Geburtsjahr (Typ ganze Zahl)
d0
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.:
d0 .gibStudname() liefert Thorsten Meier.
d0 .setzeMatrikelnummer(20002) liefert d0
d0 .gibAlter() liefert 21.
Thosten Meier
20002
1980
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
108
Suchen in einem Datenbestand
Deklaration einer Java-Klasse „Studierendendaten“:
class Studierendendaten
{
String studname;
int matrikelnummer;
int geburtsjahr;
void setzeMatrikelnummer(
int nummer)
{ matrikelnummer = nummer; }
int gibGeburtsjahr()
{ return geburtsjahr; }
String gibStudname()
{ return studname; }
void setzeGeburtsjahr(int jahr)
{ geburtsjahr = jahr; }
void setzeStudname(
String name)
{ studname = name; }
int gibAlter()
{ return 2001-geburtsjahr; }
}
int gibMatrikelnummer()
{ return matrikelnummer; }
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
109
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 muss die Methode main deklariert sein. Mit dieser
Methode startet das Gesamtprogramm.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
110
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 2004/2005
111
Suchen in einem Datenbestand
public class Suchprogramm
{
static Studierendendaten Suche(
Studierendendaten d[],int m)
{ int i=0;
int n = d.length-1;
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 di.gibMatrikelnummer() != m, führe aus:
i := i+1;
Wenn i <= n, dann
Gib di zurück;
Sonst
Gib null zurück.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
112
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 2004/2005
113
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 angelegt, 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 2004/2005
114
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 2004/2005
115
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 2004/2005
116
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 2004/2005
117
12. Beispiel:
Suchen in einer verzeigerten
linearen Liste
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
118
Suchen in einer verzeigerten linearen Liste
Die gleiche Aufgabe wie bei „Suchen in einem Datenstand“, mit dem
Unterschied, dass die Daten nun nicht in einem Array gegeben sind,
sondern in einer verzeigerten linearen Liste.
Array:
d
0
Thorsten Meier
88188
1980
1
2
Monika Schneider
88755
1980
Monika Schmidt
88633
1981
verzeigerte lineare Liste:
dliste
Thorsten Meier
88188
1980
null
Monika Schmidt
88633
1981
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
Monika Schneider
88755
1980
119
Suchen in einer verzeigerten linearen Liste
Deklaration eines Datenttyps Liste dieser Art:
wert
class Liste{
Studierendendaten wert;
Liste naechstes;
naechstes
Thorsten Meier
88188
1980
void setzeWert(Studierendendaten einwert)
{ wert = einwert;}
Liste gibNaechstes()
{ return naechstes;}
void setzeNaechstes(Liste einnaechstes)
{ naechstes = einnaechstes;}
}
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
120
Suchen in einer verzeigerten linearen Liste
Anweisungen zum Anlegen einer Liste:
dliste
Liste dliste = new Liste();
null null
Studierendendaten a =
new Studierendendaten(´´Thorsten Meier´´,88188,1980);
a
Thorsten Meier
88188
1980
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
121
Suchen in einer verzeigerten linearen Liste
Anweisungen zum Anlegen einer Liste:
dliste
Liste dliste = new Liste();
null null
Studierendendaten a =
new Studierendendaten(´´Thorsten Meier´´,88188,1980);
dliste.setzeWert(a);
a
dliste
null
Thorsten Meier
88188
1980
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
122
Suchen in einer verzeigerten linearen Liste
aktuell
Anweisungen zum Anlegen einer Liste:
dliste
Bsp.:
Liste aktuell = dliste;
aktuell.setzeNaechstes(new Liste());
null
Thorsten Meier
aktuell = aktuell.gibNaechstes();
88188
1980
a = new Studierendendaten(
´´Monika Schmidt´´,88633,1981);
aktuell.setzeWert(a);
aktuell
dliste
a
Thorsten Meier
88188
1980
Monika Schmidt
88633
1981
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
123
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);
aktuell
a
dliste
Thorsten Meier
88188
1980
Monika Schmidt
88633
1981
Monika Schneider
88755
1980
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
124
Die Java-Programmierumgebungen
• Windows: Sun NetBeans 3.6
• Unix: Emacs
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
125
Java-Programmierung mit Sun NetBeans
• Installation
• Entwicklungsumgebung starten
• Erstellen eines ersten Programms: „ HelloWorld “
• Compilieren und Ausführen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
126
Vorbereitung – Installation von Java und NetBeans
Programme von der Vorkurs-CD installieren
Windows oder Linux
•
Java installieren: JDK_1.4.2 (Sun)
•
Sun NetBeans 3.6
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
127
NetBeans - Programmstart
1. Windows
Starten des Programms (Doppelklick) über das Icon
„NetBeans IDE 3.6“ von der Windowsarbeitsfläche
2. Linux
In einem geöffneten Shell (=Eingabeaufforderung)
starten Sie Forte ü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 2004/2005
128
NetBeans – Ansicht nach Programmstart
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
129
„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 2004/2005
130
„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 2004/2005
131
„HelloWorld“ – Schritt 3: Projektverzeichnis festlegen
• Verzeichnis auswählen: File >> New
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
132
„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 2004/2005
133
„HelloWorld“ – Schritt 5: Klassenname festlegen
• Name der Klasse eingeben: HelloWorld
• Abfragedialog mit Finish beenden
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
134
„HelloWorld“ – Schritt 6: Quellcode eingeben
• Eingeben des Java-Quellcodes:
Das berühmte HelloWorld-Programm
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
135
„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 2004/2005
136
„HelloWorld“ – Schritt 8: Programm ausführen
• Compiliertes Programm mit Execute starten
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
137
Einführung in die Unix-Systemumgebung
• Ausstattung
• Benutzerumgebung
• Das erste Java-Programm
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
138
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])
• „Einschalten“ bedeutet hier „Einloggen“
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
139
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]
4.) Eingabe von Benutzername und Passwort
5.) Nach der Anmeldung: ändern des Passworts (passwd)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
140
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 2004/2005
141
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 2004/2005
142
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 2004/2005
143
Links zu Java und Unix
http://irb
-
ww.cs.uni- d
ortmund.de/anleitungen
Anleitungen zu Unix und CDE
http://www.javasoft.com
Informationen zu Java
http://www.java.de
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 2004/2005
144
13. Mehr zur objektorientierten
Programmierung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
145
Vom Problem über den Systementwurf zum Programm
reale Welt
Problem
Abstraktion
Problemanalyse
funktionale Spezifikation
Algorithmenentwurf
Systementwurf
Algorithmus
Darstellung in formalisierter Sprache
Darstellung
für Ausführung durch Rechner
abstrakte Objekte
InformationsverProgramm
arbeitendes System
Realisierung
Rechner
Umsetzung in
Elementarschritte
einer Maschine
Maschine
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
146
Objektorientierter Entwurf
- Modellierung von Systemen durch miteinander interagierende Objekte
Bsp.: Videorekorder
Benutzungsschnittstelle
Systemsteuerung
Tasten für play, stop, fwd,
rwd, rec, eject
Sensor am Kassettenschacht
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 2004/2005
147
Objektorientierter Entwurf
Videorekorder-Software
Objekt
Eingabeverarbeitung
Tastendruck
aktiviert
passende
Interpretationsmethode
von Eingabeverarbeitung
Bsp.: Methode play
Interpretationsmethode führt
eine Sequenz von
Steuermethoden von
Laufwerksteuerung
Objekt
Laufwerksteuerung
Steuermethode
aktiviert
Laufwerk über
Signalleitungen
und bekommt
Rückmeldung
über den Zustand
Bsp.: Methoden
laufeRechts
aktiviereLesen
Vorteil des objektorientierten Entwurfs: direkte Zuordnung von
realen Funktionseinheiten zu Programmteilen (Objekten)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
148
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 2004/2005
149
14. Andere Programmierstile
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
150
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 2004/2005
151
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, dass 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 2004/2005
152
Teil III. Algorithmen und
Datenstrukturen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
153
Inhalt
1. Asymptotische Aufwandsanalyse
2. Sortieren
3. Suchen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
154
1. Asymptotische Aufwandsanalyse
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
155
Zeitaufwandsanalyse
- durch Abschätzen der Anzahl der ausgeführten
Elementaroperationen (E)
Bsp: Minimum Min(a0, a1, ..., an) einer Menge von Zahlen
Algorithmus
Zeitaufwand
Anzahl Durchläufe
1E
1E
1
1
merker := a0 ;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
Wenn ai < merker, dann
merker := ai;}
Gib merker zurück;
1E
1E
1E
1E
1E
n+1
n
n
min. 0, max. n
1
günstigster Fall: Tmin(n) = 3n + 4
ungünstigster Fall: Tmax(n)=4n + 4
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
156
Zeitaufwandsanalyse
- Aufwandsmaße allgemein:
Sei
E die Menge aller Eingaben des Algorithmus,
En:={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
Amax(n):= max { A(e) | e in En } der maximale Aufwand
Amin(n):= min { A(e) | e in En } der minimale Aufwand.
Speziell
für den Zeitaufwand: A := T
für den Speicheraufwand: A := S
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
157
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: Tmax(n) = 4n + 4 hat die Größenordnung n,
oder: Tmax(n) = 4n + 4 wächst mit der Ordnung n.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
158
Zeitaufwandsanalyse
c0 g
- asymptotische Aufwandsanalyse
f
„groß-Oh-Notation“:
Seien f: IN->IR, g: IN->IR zwei Funktionen.
n0
f wächst mit der Ordnung g ( f ist von der Größenordnung g),
Schreibweise f=O(g), wenn gilt:
Es gibt ein n0 in IN und ein dazu passendes c0 > 0, c0 in IR,
so dass f(n) < c0 * g(n) für alle n > n0.
Bsp.: Für Tmax(n) = 4n+4 gilt:
Tmax(n) = O(n), da Tmax(n) < 5n für n > 4
Tmax(n) = O(n2), da Tmax(n) < n2 für n > 4
Tmax(n) nicht O( n)
Tmax(n) nicht O(1)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
159
Speicheraufwandsanalyse
- durch Abschätzen der Anzahl der während der Algorithmusausführung
belegten Elementardateneinheiten (e)
Bsp: Minimum Min(a0, a1, ..., an) einer Menge von Zahlen
Algorithmus:
merker := a0;
i := 0;
Solange i < n ist, führe aus:
{i := i+1;
Wenn ai < merker, dann
merker := ai;}
Gib merker zurück;
Speicherbedarf:
a0, a1, ..., an
merker, i, n:
Smax(n) = Smin(n) = n + 4,
d.h. Smax(n) = Smin(n) = O(n)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
160
2. Sortieren
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
161
Sortieren einer Menge von Zahlen
Gegeben: a0, a1, ..., an
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 2004/2005
162
Sortieren durch Minimumsuche
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
163
Sortieren einer Menge von Zahlen durch Minimumsuche
Algorithmus MinSort(a0,a1,..., an)
restfolge := gegebenefolge;
Solange restfolge nicht leer, führe aus:
{ak:= MinSuche(restfolge);
FügeAn(ak, ergebnisfolge);
Enferne(ak, restfolge);}
gib ergebnisfolge zurück;
Zeitaufwand
O(n)
O(1)
O(n)
O(1)
O(1)
O(n)
Anzahl Durchläufe
1
n+2
n+1
n+1
n+1
1
Maximaler Zeitaufwand: Tmax(n)= (n+1) * O(n) + (3n+4) * O(1) + 2*O(n) = O(n2)
Annahme: 1 Nanosekunde = 10-9 Sekunden pro Elementaroperation,
n2 Elementaroperationen
dann: Sortieren von 100 000=105 Werten benötigt 10 Sekunden
Sortieren von 1 000 000=106 Werten benötigt 1 000 Sekunden
Sortieren von 5 000 000=5*106 Werten benötigt 25 000 Sekunden,
d.h. fast 7 Stunden
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
164
Sortieren einer Menge von Zahlen durch Minimumsuche
Mit Hilfsmengen:
restfolge := gegebenefolge;
Solange restfolge nicht leer, führe aus:
{ak := MinSuche(restfolge);
FügeAn(ak, ergebnisfolge);
Enferne(ak, restfolge);}
gib ergebnisfolge zurück;
Speicheraufwand beim i-ten
Durchlauf:
gegebenefolge (n+1) E
restfolge
(n+1-i) E
ergebnisfolge
i E
1E
ak
MinSuche,FügeAn,
Entferne
cE
Ohne Hilfsmengen: Die Datenstruktur
Summe:
(2n+3+c) E
gegebenefolge wird schrittweise so
verändert, dass sie am Ende das
Ergebnis enthält. Dies benötigt (n+d) E,
Hier kann eine
wobei d eine von n unabhängige
nichtasymptotische
Konstante ist.
Betrachtung praktisch
relevant sein.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
165
Sortieren durch Mischen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
166
Iteratives Mischen zweier sortierter Folgen
Algorithmus Mischen(folge1,folge2)
n1
n2
n := Länge von folge1 plus Länge von folge2;
folge := eine leere Folge;
n=n1+n2
O(1)
O(n)
Solange folge1 und folge2 nicht leer ist:
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;
Solange folge1 nicht leer ist:
füge das erste Element f1 von folge1 an folge an
und entferne f1 aus folge1;
Solange folge2 nicht leer ist:
füge das erste Element f2 von folge2 an folge an
und entferne f2 aus folge2;
O(1)
O(1)
O(n)
O(1)
O(n1)
O(n)
O(n2)
O(n)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
167
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
T(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.
c0
T(n/2)+T(n/2)
O(n)
Zeitaufwand: T(0) = c0,
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 2004/2005
168
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
Zeitaufwand:
T(0) = c0,
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/2
c n/4
c n/8 c n/8
...
... ... ...
cn
cn
+c n
c n/2
c n/4
c n/8 c n/8
... ... ... ...
c n/4
c n/4
+c n
c n/8 c n/8
... ... ... ...
c n/8 c n/8
... ... ... ...
+c n
...
=c n (log n +1))
i Stufen, wobei i minimal mit n/2i < 1, d.h. log n < i
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
169
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
Zeitaufwand:
T(0) = c0,
T(n) = T(n/2)+T(n/2)+O(n) für n>0.
cn
c n/2
c n/4
...
c n/8 c n/8
... ... ...
T(n/2) = T(n/4)+T(n/4)+O(n/2)
cn
+c n
c n/2
c n/4
c n/8 c n/8
... ... ... ...
c n/4
c n/4
+c n
c n/8 c n/8
... ... ... ...
c n/8 c n/8
... ... ... ...
+c n
...
i Stufen, wobei i minimal mit n/2i < 1, d.h. log n < i
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
=c n (log n +1))
170
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
Zeitaufwand:
T(0) = c0,
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)
T(n/4) = T(n/8)+T(n/8)+O(n/4)
cn
cn
c n/2
c n/4
+c n
c n/2
c n/4
c n/4
c n/4
+c n
c n/8 c n/8
... ... ... ...
c n/8 c n/8
... ... ... ...
+c n
...
T(n/8) = T(n/16)+T(n/16)+O(n/8)
c n/8 c n/8
...
... ... ...
c n/8 c n/8
... ... ... ...
i Stufen, wobei i minimal mit n/2i < 1, d.h. log n < i
=c n (log n +1))
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
171
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
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 2004/2005
172
Beweisprinzip der vollständigen Induktion
Behauptung: Die Aussage B(n) ist für alle natürlichen Zahlen n ≥ k richtig.
Beweis:
Induktionsanfang: (n=k)
Es wird bewiesen, dass die Aussage B(k) richtig ist,
d.h. B(n) gilt für n=k.
Induktionsschritt:
Es wird bewiesen, dass unter der Annahme, dass die Aussagen
B(n-1), B(n-2), ..., B(k) richtig sind, auch die Aussage B(n) richtig ist.
Warum reicht das?
B(k) Induktionsschritt
mit n=k+1
richtig
B(k), B(k+1)
richtig
Induktionsschritt
mit n=k+2
B(k),
B(k+1),B(k+2)
richtig
...
Induktionsanfang
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
173
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, dass S(1)=1(1+1)/2 richtig ist. Dies stimmt
offensichtlich.
Induktionsschritt:
Es wird bewiesen, dass unter der Annahme, dass
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 2004/2005
174
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, dass S(1)=1(1+1)(2+1)/6=1 richtig ist. Dies stimmt
offensichtlich.
Induktionsschritt:
Es wird bewiesen, dass unter der Annahme, dass
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 2004/2005
175
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
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, dass es eine Konstante c>0 gibt, so dass
T(n) < c n(1+log n) für n>0.
Induktionsanfang: Nachweis für n=1.
Sei c1 eine obere Schranke für den Zeitbedarf für Eingaben mit n=1.
Dann gilt T(1)= c1 < c 1 (1+log 1) für alle c> c1.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
176
Sortieren einer Menge von Zahlen durch Mischen
Algorithmus MischSort(a0,a1,..., an)
Induktionsschritt: Nachweis für n>1 unter der Annahme, dass 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)+ c2 n
< c n/2 (1+log n/2) + c n/2 (1+ log n/2) + c2 n
Induktionsannahme
< c n (1+log (n) -1) + c2 n < c n (1+log n),
Umformung
falls c > c2
Mit c>max{c1, c2} gilt die Behauptung.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
177
Sortieren einer Menge von Zahlen
Einige Bemerkungen zum Sortierproblem:
- Es kann bewiesen werden, dass 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(n2) im schlechtesten Fall, im Mittel jedoch von O(n log n).
Annahme: 1 Nanosekunde = 10-9 Sekunden pro Elementaroperation
n2
n log n
100 000=105
10 Sek.
< 2*10-3 Sek.
1 000 000=106
1 000 Sek.
< 24*10-3 Sek.
25 000 Sek.
< 24*10-3 Sek.
n
5 000 000=5*106
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
178
3. Suchen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
179
Operationen auf Mengen
Gegeben: Eine Menge S= {s0, s1, ..., sn} 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 2004/2005
180
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 2004/2005
181
Lösung mit unsortiertem Array
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
182
Lösung mit unsortiertem Array
Datenstruktur:
Index i:
Daten S[i]:
0 1
2
3
5
6
7
11 7 8 3 15 13
9
19 18 10 4
Variable füllstand:
4
8
9
10 11 12 13 14
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 2004/2005
183
Lösung mit unsortiertem Array
Datenstruktur:
Index i:
0 1
5
6
7
Daten S[i]: 11 7 8 3 15 13
9
19 18 10 4
Variable füllstand:
2
3
4
8
9
10 11 12 13 14
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 2004/2005
184
Lösung mit unsortiertem Array
Datenstruktur:
Index i:
0 1
5
6
7
Daten s[i]: 11 7 8 3 15 13
9
19 18 10 4
Variable füllstand:
2
3
4
8
9
10 11 12 13 14
11
Algorithmus Entferne(s)
i := 0;
solange i<füllstand und nicht s[i]=s, führe aus
i := i + 1;
wenn i<füllstand, dann
{ s[i]:=s[füllstand-1];
füllstand:=füllstand-1; }
// suche s
// entferne s
Zeitaufwand: T(n)=O(n), wobei n die Größe der Menge (=füllstand)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
185
Lösung mit sortiertem Array
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
186
Lösung mit sortiertem Array
Datenstruktur:
Index i:
0 1
Daten S[i]:
3
Variable füllstand:
2
3
4
5
6
7
8
9
10 11 12 13 14
4 7 8
9
10
11 13 15 18 19
Zeitaufwand:
T(n) = T(n/2)+O(1) für n>0
-> T(n) = O(log n),
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
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
l
187
r
m
Lösung mit sortiertem Array
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 2004/2005
188
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, dass es eine Konstante c>0, so dass T(n) < c(1+ log n)
für n>1.
Induktionsanfang: n=1
Sei c1 eine obere Schranke für die Rechenzeit von Eingaben mit n=1.
Dann gilt T(1)= c1 < c(1+ log 1) für c> c1.
Induktionsschritt: Nachweis, dass die Behauptung für n>1 unter
der Annahme gilt, dass sie für n-1,n-2,...,1 richtig ist.
Es gilt:
T(n)<T(n/2)+ c2 < c (1+log n/2)+ c2 < c (1+log n),
wobei c2 eine Konstante für O(1) und falls c> c2 gilt.
Mit c>max{c1, c2} gilt die Behauptung.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
189
Lösung mit sortiertem Array
Datenstruktur:
Index i:
0 1
Daten S[i]:
3
2
3
4
5
6
4 7 8
9
10
11 13 15 18 19
Variable füllstand:
7
8
9
10 11 12 13 14
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 2004/2005
190
Lösung mit sortiertem Array
Index i:
0 1
Daten S[i]:
3
Variable füllstand:
2
3
4
5
6
7
8
9
10 11 12 13 14
4 7 8
9
10
11 13 15 18 19
11
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 2004/2005
191
Lösung mit ausgeglichenem binärem
Suchbaum
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
192
Lösung mit ausgeglichenem binärem Suchbaum
Datenstruktur:
10
15
7
4
3
9
13
8
19
11
18
Bsp.: Suche(11) :10 ->15 ->13 ->11
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
193
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)}
2
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 2004/2005
194
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 2004/2005
195
Lösung mit ausgeglichenem binärem Suchbaum
Bsp:
10
15
7
4
3
9
8
13
11
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
19
18
196
Lösung mit ausgeglichenem binärem Suchbaum
Schlussfolgerung: 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 2004/2005
197
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, dass die beiden
Teilbäume, die von seinen Nachfolgern gebildet werden, etwa gleich
viele Knoten enthalten.
10
15
7
4
3
9
8
13
11
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
19
18
198
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 dass
- 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, dass 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 2004/2005
199
Lösung mit ausgeglichenem binärem Suchbaum
ausgeglichener binärer Suchbaum zu einer endlichen Menge S von
Zahlen:
Bsp.:
10
15
7
4
3
9
8
13
11
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
19
18
200
Lösung mit ausgeglichenem binärem Suchbaum
Datenstruktur:
Verweise auf Blätter durch
null-Zeiger repräsentiert
10
15
7
4
3
9
13
8
19
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 Teilbaum 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 2004/2005
201
Lösung mit ausgeglichenem binärem Suchbaum
Datenstruktur:
10
15
7
4
3
9
8
13
11
19
18
Algorithmus Suche(s)
Bsp.: Suche(11): 10->15->13->11
Suche(7): 10->7
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
202
Lösung mit ausgeglichenem binärem Suchbaum
Datenstruktur:
10
15
7
4
3
9
8
13
11
19
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 2004/2005
203
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 2004/2005
204
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 dass 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, dass 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 2004/2005
205
Lösung mit ausgeglichenem binärem Suchbaum
Behauptung 2: Die Anzahl m der Knoten eines binären Suchbaums für
eine Menge mit n+1 Elementen ist m=2n+3.
Beweis: Anzahl der Knoten = Anzahl innerer Knoten + Anzahl Blätter
= Anzahl innerer Knoten + Anzahl innerer Knoten + 1
= 2(n+1)+1 = 2n+3.
Die zweite Zeile folgt aus der Tatsache, dass für binäre Bäume
Anzahl Blätter = Anzahl innere Knoten + 1
gilt (vgl. Behauptung 3).
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
206
Lösung mit ausgeglichenem binärem Suchbaum
Behauptung 3: Für binäre Bäume gilt m b=m i +1, wobei
m b die Anzahl der Blätter und m i die Anzahl der inneren Knoten
bezeichnet.
Beweis: Induktiv über die Anzahl m der Knoten.
Induktionsanfang: m = 1:
Hier ist m b = 1, m i = 0, so dass die Behauptung gilt.
_
Induktionsschritt: Nachweis der Behauptung für m > 1 unter der
Annahme, dass die Behauptung für m-1, m-1,..., 1 gilt.
Die Wurzel ist ein innerer Knoten. Für ihre beiden Unterbäume
gilt die Beziehung aufgrund der Induktionsannahme, also
m b,l = m i,l+1, m b,r = m i,r+1.
Damit gilt
m b = m b,l + m b,r = m i,l +1+ m i,r+1 = m i +1.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
207
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:
Sortierte Arrays:
Suchen: T(n) = O(n)
Einfügen: T(n) = O(1)
Entfernen: T(n) = O(n)
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 2004/2005
208
Lösung mit Hashing
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
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
147
164
110
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 2004/2005
210
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
147
164
110
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, dass eher der gute Fall
erwartet werden kann.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
211
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
147
164
110
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 2004/2005
212
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
147
164
110
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, dass eher der gute Fall
erwartet werden kann.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
213
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 2004/2005
214
Teil IV. Vom Programm zum Rechner
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
215
Ebenen heutiger Rechner
Problemorientierte Programmiersprache
Assemblersprache
Maschinensprache
Registertransfer
Schaltungen
Hardware-Ebene
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
216
Inhalt
1. Von-Neumann-Rechner
2. Schaltungen
3. Compiler und formale Sprachen
4. Semantik und Verifikation
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
217
1. Von-Neumann-Rechner
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
218
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 2004/2005
219
von-Neumann-Architektur
Möglichkeiten der Integration der Funktionseinheiten:
- Einzelverbindungswege
Speicherperipherie
Prozessor
Interaktionsperipherie
Ein-/Ausgabe
Hauptspeicher
Direct Memory Access (DMA)
Datenkommunikationsperipherie
- Bus (Sammelschiene)
Prozessor
Hauptspeicher
Interaktionsperipherie
Bussteuerung
Speicherperipherie
Datenkommunikationsperipherie
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
220
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 2004/2005
221
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- RegisterRegisterarithmetische logische Sprungbefehle Gerätesteuerung
Register Hauptspeicher Ein-/Ausgabe Befehle
Befehle
Aufbau eines typischen Maschinenbefehls: Operationscode Operanden
Bsp.: addiere r4, r3, r2; hole r5, a1; multipliziere r6, r5, r4;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
222
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 2004/2005
223
von-Neumann-Architektur
Prozessor:
Hauptspeicher
...
SAR
SDR
Prozessor
Leitwerk
BZ
BR
+1
opcode
Operand
Reg.
Rechenwerk
SAR: Speicheradressregister
BZ: Befehlszeiger
SDR: Speicherdatenregister
BR: Befehlsregister
addiere r4, r3, r2; hole r5, a1;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
224
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 2004/2005
225
2. Schaltungen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
226
Zweiwertige Informationsdarstellung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
227
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 2004/2005
228
Zweiwertige Informationsdarstellung
positive ganze Zahlen:
- Darstellung als Dualzahl:
z = zn 2n + zn-1 2n.1+zn-2 2n-2 + ... z020
1 22 + 1 21+1 20
Bsp.: dezimal 7 ist dual 111
dezimal 14 ist dual 1110
1 23 + 1 22+1 21+ 0 20
- Dualzahlen sind ein Spezialfall der p-adischen Darstellung (p=2):
z = zn pn + zn-1 pn.1+zn.2 pn-2+ ... z0 p0
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 2004/2005
229
Zweiwertige Informationsdarstellung
positive ganze Zahlen:
Berechnung der p-adischen Darstellung einer Dezimalzahl d:
zi = (d div pi) mod p
wobei „div“ die ganzzahlige Division ohne Rest
und „mod“ (modulo) die Berechnung des Rests bezeichnet.
Bsp.:
Dezimal 14 in Dualdarstellung:
z0 = (14 div 1) mod 2 = 14 mod 2 = 0
z1 = (14 div 2) mod 2 = 7 mod 2 = 1
z2 = (14 div 4) mod 2 = 3 mod 2 = 1
z3 = (14 div 8) mod 2 = 1 mod 2 = 1
(z4 = (14 div 16) mod 2 = 0 mod 2 = 0)
14 = 1 23 + 1 22+1 21+ 0 20
14 div 1 = 1 23 + 1 22+1 21+ 0 20
14 div 2 = 1 22 + 1 21+1 20
14 div 4 = 1 21 + 1 20
14 div 8 = 1 20
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
230
Zweiwertige Informationsverarbeitung:
Boolesche Funktionen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
231
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:
a b c f (a,b,c)
Bsp.:
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
1
0
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 2004/2005
232
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
0
0
1
1
0
1
0
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
0
0
1
1
0
1
0
1
1
1
1
0
0
0
1
1
0
1
0
1
1
0
0
0
a not
0
1
1
0
nand = nicht and, nor = nicht or, 1 = „true“, 0=„false“
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
233
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
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
1
0
1
1
1
* entspricht and (math. ∧)
+ entspricht or (math. ∨)
entspricht not (math. ¬)
a*b*c
a*b*c
a*b*c
a*b*c
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 2004/2005
234
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 2004/2005
235
Zweiwertige Informationsverarbeitung:
Schaltungen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
236
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 2004/2005
237
Zweiwertige Informationsverarbeitung
Boolesche Schaltkreise:
Bsp.:
f = a*b*c + a*b*c+a *b* c+a*b*c
a
and
not
and
b
or
not
f
and
c
not
and
a b
c ¬a ¬b ¬c
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
238
Schaltungen
1. Zweiwertige Informationsdarstellung: Bit, Byte, positive ganze Zahl
2. Zweiwertige Informationsverarbeitung: Boolesche Funktionen
a
b
S
0
0
1
1
0
1
0
1
0
1
1
0
a*b
a*b
S= a*b + a*b
3. Zweiwertige Informationsverarbeitung: Schaltungen
not
and
a
b
or
not
S
and
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
239
Zweiwertige Informationsverarbeitung
Beispiel: 1-Bit-Addierer
011
+ 101
11
1000
Addierer:
Halbaddierer:
a
b
S
Ü
0
0
1
1
0
1
0
1
0
1
1
0
0
0
0
1
a
xor
b
S
Ü
Üout
0
0
0
0
1
1
1
1
0
1
1
0
1
0
0
1
0
0
0
1
0
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
HA S‘
b
Üin
xor: entweder oder
S
Ü‘
a
and
a b Üin
a
b
Ü
S
Ü‘‘
OR
HA S‘‘
Üout
S
HA: Halbaddierer
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
240
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
Q
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
Problem: Zwei Werte (Q=0/1) für die gleiche Eingabe (S=0, R=0)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
241
Zweiwertige Informationsverarbeitung
Speicher:
Qalt
RS-Flipflop: Analyse des Verhaltens
S
Zustand
0
1
2
3
4
5
6
7
R
S
Qalt
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Qneu
0
1
1
1
0
0
0
0
Qneu
nor
R
nor
Q
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: Qalt = Qneu
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
242
Zweiwertige Informationsverarbeitung
Beispiel für einen
schwingenden Schaltkreis:
bneu
balt
a
Zustand
0
1
2
3
a
balt
bneu
0
0
1
1
0
1
0
1
1
1
1
0
b
nand
Ergebnis:
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 2004/2005
243
3. Compiler und formale Sprachen
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
244
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 2004/2005
245
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 2004/2005
246
Inhalt
Grammatiken
Sprachtypen nach Chomsky
Übersetzung
endlicher Automat
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
247
Grammatiken
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
248
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 2004/2005
249
Satz -> Subjekt Prädikat Objekt
Formale Sprachen
Subjekt -> Vorwort Hauptwort
Grammatik:
...
- 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 2004/2005
250
Formale Sprachen
Grammatik:
3*(b+7)+c
Bsp.: Grammatik für geklammerte arithmetische Ausdrücke
Alphabet: { a,+,*,(,) }
a*(a+a)+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 2004/2005
251
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 muss 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 2004/2005
252
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 w1, ..., wn von Worten mit u = w1 und v = wn,
sodass wi => wi+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 2004/2005
253
Sprachentypen nach Chomsky
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
254
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 2004/2005
255
Formale Sprachen
Grammatik G=(N,T,P,E) :
Bsp.: Grammatik für geklammerte arithmetische Ausdrücke
Alphabet: T={ a,+,*,(,) }
a*(a+a)+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 2004/2005
256
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 2004/2005
257
Formale Sprachen
Bedeutung der Sprachtypen:
Die Syntax der meisten existierenden Programmiersprachen lässt 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 2004/2005
258
Formale Sprachen
Bedeutung der Sprachtypen:
Bsp.: Java-Gleitpunktzahlen in Java-Grammatik-Notation
Linke Seite der Produktionsregeln
FloatingPointLiteral:
Rechte Seiten der
Digits . Digits_opt ExponentPart_opt FloatTypeSuffix_opt
. Digits ExponentPart_opt FloatTypeSuffix_opt
Digits ExponentPart FloatTypeSuffix_opt
Digits ExponentPart_opt FloatTypeSuffix
Produktionsregeln:
jede Zeile definiert eine
alternative Regel;
„opt“ bedeutet, dass das
Symbol auch fehlen darf
ExponentPart:
ExponentIndicator SignedInteger
ExponentIndicator: one of
e E
Endzeichen
SignedInteger:
Sign_opt Digits
Sign: one of
+ FloatTypeSuffix: one of
f F d D
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 2004/2005
259
Übersetzung
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
260
Formale Sprachen
Übersetzung (nur zur Illustration):
Zuweisung von Übersetzungsaktionen an Produktionsregeln
Bsp.: geklammerte arithmetische Ausdrücke mit n Variablen
Alphabet: T={ a1, ..., an,+,*,(,) }
Startsymbol: E
Hilfszeichenmenge: N={ E,T,F }
Produktionsregeln: P={ E->T, E->E+T, T->F, T->T*F,
F->ai, 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
T->F
F->ai
ek := ti ;
tk := fi ;
fk := ai ;
E->E+T
T->T*F
F->(E)
ek := ei + tj ;
tk := ti * fj ;
fk := ei ;
wobei ei , fi , ti Programmvariable sind.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
261
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 2004/2005
262
Formale Sprachen
Übersetzung:
E->T
T->F
F->ai
ek = ti ;
tk := fi ;
fk := ai ;
E-> E+T
T-> T*F
F-> (E)
ek := ei + tj ;
tk := ti * fj ;
fk := ei ;
Bsp.: a1*(a2 + a3) + a4
Ableitung
Ersetzung
E
Ableitung
Ersetzung
=>a1*(T+T)+T
=> a1 *(F + T)+T
=> a1 *(a2 + T)+T
=> a1 *(a2 + F)+T
=> a1 *(a2 + a3)+T
=> a1 *(a2 + a3)+ F
=> a1 *(a2 + a3)+ a4
=>E+T
=>T+T
=>T*F+T
=>F*F+T
=>a1*F+T
=> a1 *(E)+T
=> a1 *(E+T)+T
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
263
Formale Sprachen
Übersetzung:
E->T
T->F
F->ai
ek = ti ;
tk := fi ;
fk := ai ;
E-> E+T
T-> T*F
F-> (E)
ek := ei + tj ;
tk := ti * fj ;
fk := ei ;
Bsp.: a1*(a2 + a3) + a4
Ableitung
E
=>E+T
=>T+T
=>T*F+T
=>F*F+T
=>a1*F+T
=> a1 *(E)+T
=> a1 *(E+T)+T
Ersetzung
Ableitung
=>a1*(T+T)+T
=> a1 *(F + T)+T
=> a1 *(a2 + T)+T
=> a1 *(a2 + F)+T
=> a1 *(a2 + a3)+T
=> a1 *(a2 + a3)+ F
=> a1 *(a2 + a3)+ a4
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
Ersetzung
f5 := a4 ;
264
Formale Sprachen
Übersetzung:
E->T
T->F
F->ai
ek = ti ;
tk := fi ;
fk := ai ;
E-> E+T
T-> T*F
F-> (E)
ek := ei + tj ;
tk := ti * fj ;
fk := ei ;
Bsp.: a1*(a2 + a3) + a4
Ableitung
Ersetzung
Ableitung
E
=>a1*(T+T)+T
=> a1 *(F + T)+T
=> a1 *(a2 + T)+T
=> a1 *(a2 + F)+T
=> a1 *(a2 + a3)+T
=> a1 *(a2 + a3)+ F
=> a1 *(a2 + a3)+ a4
=>E+T
=>T+T
=>T*F+T
=>F*F+T
=>a1*F+T
=> a1 *(E)+T
=> a1 *(E+T)+T
Ersetzung
t6 := f5 ;
f5 := a4 ;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
265
Formale Sprachen
Übersetzung:
E->T
T->F
F->ai
ek = ti ;
tk := fi ;
fk := ai ;
E-> E+T
T-> T*F
F-> (E)
ek := ei + tj ;
tk := ti * fj ;
fk := ei ;
Bsp.: a1*(a2 + a3) + a4
Ableitung
E
Ersetzung
e18 := e17 + t6 ;
=>E+T
e17 := t16 ;
=>T+T
t16 := t15 * f13;
=>T*F+T
t15:= f14 ;
=>F*F+T
f14:= a1 ;
=>a1*F+T
f13:= e12 ;
e12:= e11+ t8 ;
=> a1 *(E)+T
=> a1 *(E+T)+T e11:= t10 ;
Ableitung
=>a1*(T+T)+T
=> a1 *(F + T)+T
=> a1 *(a2 + T)+T
=> a1 *(a2 + F)+T
=> a1 *(a2 + a3)+T
=> a1 *(a2 + a3)+ F
=> a1 *(a2 + a3)+ a4
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
Ersetzung
t10 := f9;
f9 := a2;
t8:= f7 ;
f7 := a3
t6 := f5 ;
f5 := a4 ;
266
Formale Sprachen
Übersetzung:
E
Kopie von voriger Seite
e18 := e17 + t6 ;
=>E+T
e17 := t16 ;
=>T+T
t16 := t15 * f13;
=>T*F+T
t15:= f14 ;
=>F*F+T
f14:= a1 ;
f13:= e12 ;
=>a1*F+T
e12:= e11+ t8 ;
=> a1 *(E)+T
=> a1 *(E+T)+T e11:= t10 ;
=>a1*(T+T)+T
=> a1 *(F + T)+T
=> a1 *(a2 + T)+T
=> a1 *(a2 + F)+T
=> a1 *(a2 + a3)+T
=> a1 *(a2 + a3)+ F
=> a1 *(a2 + a3)+ a4
t10 := f9;
f9 := a2;
t8:= f7 ;
f7 := a3
t6 := f5 ;
f5 := a4 ;
Ergebnis:
f5 := a4;
t6 := f5;
f7 := a3;
t8 := f7;
f9 := a2;
t10 := f9;
e11 := t10;
e12:=e11 + t8;
f13:=e12;
f14:=a1;
t15:=f14;
t16:=t15* f13;
e17:=t16;
e18:=e17+ t6;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
267
Formale Sprachen
Übersetzung:
Ergebnis (Kopie von voriger Seite):
f5 := a4;
t6 := f5;
f7 := a3;
t8 := f7;
f9 := a2;
t10 := f9;
e11 := t10;
e12:=e11 + t8;
f13:=e12;
f14:=a1;
t15:=f14;
t16:=t15* f13;
e17:=t16;
e18:=e17+ t6;
Optimierung: Entfernen von Zuweisungsketten
t6 := a4;
t8 := a3;
e11 := a2;
f13:=e11+t8;
t15:=a1;
e17:=t15*f13;
e18:=e17+t6;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
268
Formale Sprachen
Übersetzung:
Kopie von voriger Seite
t6 := a4;
t8 := a3;
e11 := a2;
f13:=e11+t8;
t15:=a1;
e17:=t15*f13;
e18:=e17+t6;
Registerzuweisung:
r2
r3
r1
t6
t8
e11
r4
r5
r6
r7
f13
t15
e17
e18
a1, a2, a3, a4
stehen für
Hauptspeicheradressen
Ergebnis:
r4:=r3 + r2;
r5 := a1;
r6:=r5*r4;
r7:=r6 + r1;
r1 := a4;
r2 := a3;
r3 := a2;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
269
Formale Sprachen
Übersetzung:
Kopie von voriger Seite
r1:=a4;
r2:=a3;
r3:=a2;
r4:=r3+r2;
r5:=a1;
r6:=r5*r4;
r7:=r6+r1;
Übersetzung in Assembler oder Maschinensprache durch
eins-zu-eins-Ersetzung:
hole r1, a4;
hole r2, a3;
hole r3, a2;
addiere r4, r3, r2;
hole r5, a1;
multipliziere r6, r5, r4;
addiere r7, r6, r1;
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
270
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 2004/2005
271
Formale Sprachen
korrespondierende Automatentypen für Sprachen:
für Typ-0-Sprachen: (nichtdeterministische) Turingmaschinen
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 2004/2005
272
Endlicher Automat
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
273
Formale Sprachen
endlicher Automat:
Eingabewort
Zustandsübergangsdiagramm:
a
z0
Zustand
a
b
z3
Ausgabe:
akzeptiert/nicht akzeptiert
Abarbeitung einer Eingabe:
abab: z0 => z1 => z2 => z1 => z2
a
b
a
b
a
b
z1
b
b
a
z2
z0, ..., z3: Zustände
z0 : Startzustand
z2: Endzustand
Alphabet: {a, b}
akzeptierte Sprache: L = {ab, abab, ababab, ...}
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
274
Formale Sprachen
endlicher Automat:
spezifiziert durch ein 5-Tupel M = (Z, T, G, z0, E), wobei
Z eine endliche Menge von Zuständen
T ein endliches Eingabealphabet
G eine Überführungsfunktion, die einem Paar aus Zustand z und
Eingabezeichen a einen neuen Zustand z‘ = G(z, a) zuordnet
z0 der Anfangszustand
E eine Menge von Endzuständen, die Teilmenge von Z ist.
Bsp.:
a
z0
a
b
z3
a
b
b
z1
b
a
G (z0, a) = z1,
G(z0, b) = z3,
G(z1, a) = z3,
G(z1, b) = z2,
G(z2, a) = z1,
G(z2, b) = z3,
G(z3, a) = z3,
G(z3, b) = z3.
z2
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
275
Formale Sprachen
endlicher Automat:
Ein Automat M akzeptiert ein Wort a1 a2 ... an, genau dann
wenn der Automat beim Abarbeiten des Worts beginnend mit dem
Startzustand z0 eine Folge z0, z1, ..., zn von Zuständen durchläuft,
wobei
a
z0
z1
z{i+1} = G(zi,a{i+1} ), i = 0, ..., n-1,
a
b
b
a
zn ein Endzustand ist.
z3
z2
b
a
Bsp.: abab: z0 => z1 => z2 => z1 => z2
b
G(z0,a) = z1, G(z1, b) = z2, G(z2, a) = z1, G(z1, b) = z2 mit G definiert durch
G(z0, a)= z1,
G(z0, b)= z3,
G(z1, a)= z3,
G(z1, b)= z2,
G(z2, a) = z1,
G(z2, b) = z3,
G(z3, a) = z3,
G(z3, b) = z3.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
276
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 2004/2005
277
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, ...}
z0
b
z1
b
T = {b}, Z={z0,z1}, Startzustand z0, E = {z1},
G(z0, b) = z1, G(z1, b) = z1
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
278
Semantik und Verifikation
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
279
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 2004/2005
280
Semantik
Repräsentation:
Information, Begriffe:
reale Welt:
Apfel
„Apfel“
apple
....
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 2004/2005
281
Semantik und Verifikation
Vorgehensweise bei der Lösung von Problemen
1. Problem formulieren
2. Problemanalyse, Problemabstraktion, Problemspezifikation
3. Algorithmenentwurf
4. Nachweis der Korrektheit, Verifikation
Formale Spezifikation
im Informationsraum
5. Aufwandsanalyse
6. Programmierung
Beweis der Korrektheit
eines Programms über
seine formale Semantik,
indem gezeigt wird, dass
die formale Spezifikation
erfüllt ist.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
282
Operationelle Semantik
Prinzip:
Repräsentation des aktuellen Zustands des Informationsraums
durch die aktuelle Belegung der Programmvariablen
Definition der Semantik eines Programms durch sukzessive
Transformationen gemäß des Programmaufbaus
Dazu: Zuordnung von Zustandstransformationen zu Konstrukten
der Programmsyntax
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
283
Operationelle Semantik
Beispiel:
Programme mit zwei Variablen a, b, die Inkrementierungen,
Additionen und Wertzuweisungen durchführen können:
Bsp.: a=1; b=a+1; a=b+a;
Syntax:
Var -> a | b
Inkr -> Var + 1
Sum -> Var + Var
Wert -> Inkr | Sum
Wertzuw -> Var = Wert
Programm = Wertzuw; | Wertzuw; Programm
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
284
Operationelle Semantik
Syntax:
Semantik:
Zustand σ: {a,b} −> ΙΝ
Var -> a | b
[Var](σ) = σ(Var) für Var = a oder Var = b
Inkr -> Var + 1
[Inkr](σ) = [Var](σ) + 1
Sum -> Var + Var
[Sum](σ) = [Var](σ) + [Var](σ)
Wert -> Inkr | Sum
[Wert](σ) = Inkr(σ) bzw.
[Wert](σ) = Sum(σ)
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
285
Operationelle Semantik
Semantik:
Syntax:
Wertzuw -> Var = Wert
[Wertzuw](σ) = σ[[Wert](σ)/Var]
d.h. der Wert von Var in σ
wird auf [Wert](σ) gesetzt
Programm = Wertzuw; |
Wertzuw; Programm
[Programm](σ) = [Wertzuw](σ)
[Programm](σ) = [Programm‘](σ´),
wobei σ´ = [Wertzuw](σ)
und Programm‘ das Restprogramm,
das der Syntaxvariable
„Programm“ auf der rechten
Seite der Produktionsregel
entspricht
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
286
Operationelle Semantik
Bsp.: a=1; b=a+1; a=b+a;
Beh.: Wenn die Variablen a und b zu Beginn beide auf 0 gesetzt sind,
dann hat a nach Ausführung des Programms den Wert 3 und b den
Wert 2.
Bew.:
Programm => a=1; Programm‘
[Programm](0,0) = [Programm‘](1,0), da [a=1](0,0)=(1,0);
Programm‘ => b=a+1; Programm‘‘
[Programm‘](1,0) = [Programm‘‘](1,2), da
[b=a+1](1,0) = (1,0)[[a+1](1,0)/b]) = (1,2) wegen
[a+1](1,0) = [a](1,0)+1 = 1+1 = 2
Programm‘‘ => a=b+a;
[Programm‘‘](1,2) = [a=b+a](1,2) = (1,2)[[b+a](1,2)/a]) = (3,2) wegen
[b+a](1,2) = [b](1,2) + [a](1,2) = 2+1 = 3
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
287
Operationelle Semantik
Gebräuchliche Darstellung der Regeln der operationellen Semantik:
Prämisse
[Regelname]
Nebenbedingung
Konklusion
Bsp.:
[Wertzuweisung]
<Var = Wert,σ > => σ [[Wert](σ)/Var]
<Prog1, σ> =>σ´
[Komposition]
<Prog1;Prog2,σ> => <Prog2,σ´>
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
288
Axiomatische Semantik
Nachteil der operationellen Semantik:
- detaillierter, als häufig benötigt
- aufgrund der Details sind die Beweise sehr lang
Ausweg:
- axiomatische Semantik: explizite Zustandsangaben werden durch
Zustandsbeschreibungen in einer Sprache der Logik ersetzt:
Bsp: Hoare-Kalkül:
{P} Prog {Q}
P: Vorbedingung, Q: Nachbedingung
Wenn vor Ausführung von Prog die Aussage P gilt, gilt nach Ausführung
von Prog die Aussage Q.
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
289
Axiomatische Semantik
Gebräuchliche Darstellung der Regeln der axiomatischen Semantik
nach Hoare:
Prämisse
[Regelname]
Konklusion
Bsp.:
[Wertzuweisung]
{Q[Wert/Var]} Var = Wert {Q}
{P} Prog1 {Q}, {Q} Prog2 {R}
[Komposition]
{P} Prog1;Prog2 {R}
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
290
Ein paar allgemeine Hinweise
zum Studium
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
291
Informationen zu den Vorlesungen
- Vorlesungsverzeichnis WS 2004/2005 der Universität Dortmund
im Buchhandel
- LSF
http://www.lsf.uni-dortmund.de/
- INPUD: Informationsseiten für das Grundstudium Informatik
http://www.inpud.de
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
292
Informationen zur Planung des Studiums
- Diplomprüfungsordnung Informatik
- Diplomprüfungsordnung Angewandte Informatik
- Studienordnung für das Lehramt Informatik Sek II
- Studienführer des Fachbereichs Informatik
http://zuse.informatik.uni-dortmund.de /Studium/Studiengaenge.html
oder über die Internet-Seite des Fachbreichs Informatik (deutsche Version):
http.//www.cs.uni-dortmund.de
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
293
Informationen zur Planung des Studiums und darüber hinaus
- Studienberater des Fachbereichs Informatik:
http://inpud.cs.uni-dortmund.de/stinfo/stteam_de.html
E-Mail: [email protected]
- Fachschaft Informatik:
http://fsinfo.cs.uni-dortmund.de/
- Studienberatung anderer Fachbereiche:
bei den Dekanaten erfragen
- Beratungseinrichtungen der Universität und des Studentenwerks:
siehe Vorlesungsverzeichnis und Internet
-Beratungseinrichtung des Arbeitsamtes:
Hochschulteam des Arbeitsamts Dortmund:
Mensa Campus Nord, Raum E12, Tel. 842 1850/51
Vorkurs Informatik, LS VII, Universität Dortmund, WS 2004/2005
294
Herunterladen