Grundlagen der Informatik I+II Dr. Stefan Bosse Universität Bremen Fachbereich Mathematik & Informatik Fachgruppe Robotik email: [email protected] web: http://sun45.informatik.uni-bremen.de Kurs I: Vorlesung WS 2012/2013 Kurs II: Vorlesung SS 2013 V130620

Literatur Vorlesungsbegleitendene Literatur: ERFORDERLICH! Grundlagen der Informatik (Pearson Studium - IT) [Gebundene Ausgabe] Helmut Herold (Autor), Bruno Lurz (Autor), Jürgen Wohlrab (Autor) # Gebundene Ausgabe: 800 Seiten # Verlag: Pearson Studium; Auflage: 2., aktualisierte Auflage (28. Juni 2012) # Sprache: Deutsch # ISBN-10: 3868941118 # ISBN-13: 978-3868941111

@-1

Dr. Stefan Bosse • Grundlagen der Informatik

Einführung (I) ➤ Verknüpfung von Informatik und Elektrotechnik ➤ Bedeutung der Informatik für die Elektrotechnik

[010]

Elektrotechnik

Grundlagen Disziplinen

Mathematik A-1

Physik

Informatik Dr. Stefan Bosse • Grundlagen der Informatik

Einführung (II) ➤ Informatik befaßt sich mit der maschinellen Datenverarbeitung: Informatik = Information ⊕ Automatik

➤ Man unterscheidet: 1. Verfahren zur Lösung von Problemen, unabhängig von einer Maschine ➽ Algorithmik 2. Implementierung der Algorithmen mit einer bestimmten Programmiersprache auf bestimmten Rechnern (Maschinen). ➤ Richtungen der Informatik: Theoretische Informatik Formale Sprachen, Automatentheorie, Komplexitätstheorie, Korrektheit und Berechenbarkeit, Algorithmen, Logik usw. Praktische Informatik Betriebssysteme, Compiler, Datenbanken, Software-Entwurf usw. Technische Informatik Digitale Logik und Schaltungen, Hardware-Entwurf und Komponenten, Rechnerarchitektur, Mikroprogrammierung usw. Angewandte Informatik Anwendungen von Informationsverwaltung, z.B. in Medizin, Fertigung usw.

A-2

Dr. Stefan Bosse • Grundlagen der Informatik

Themenüberblick ➤ Informationen und Daten - Zahlensysteme und Arithmetik ➤ Boolesche Algebra und Logik ➤ Automaten: Die Turing-Maschine und deren Programmierung ➤ Rechnerarchitektur: von-Neumann-Architektur ➤ Betriebssyteme ➤ Einführung in die Programmierung und Programmiersprachen ◆ Imperative Programmierung ◆ Funktionale Programmierung ◆ Logische Programmierung ➤ Compiler-Bau ➤ Algorithmen auf abstrakten Datentypen ◆ Listen ◆ Stapel- und Schlangenspeicher ◆ Hash-Verfahren und Loookup-Tables ◆ Bäume

Dr. Stefan Bosse • Grundlagen der Informatik

A-3

Entwurfs-Abläufe und Ebenen in der Informatik (I) ➤ Spezifikation eines Algorithmus für die gestellte Aufgabe. ➤ Unabhängig von Maschine und Programmiersprache. ➤ Beispiel: Skalarprodukt zweier Vektoren: X T a ×b= ai • b i (1) i

Algorithmus-Ebene [001]

Hochsprache Betriebssystem-Ebene Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-4

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (II) ➤ Hochsprache: Abstraktion von Maschine und Betriebssystem. ➤ Umsetzung mit einer Hochsprache, z.B. funktionale Programmiersprache ML:

Algorithmus-Ebene [002]

Hochsprache

let v1 = [1;4;5;6];; let v2 = [2;0;1;0];; let rec scal_prod a b = match a,b with | (ai::tal),(bi::tbl) -> (ai*bi)+(scal_prod tal bal) | [],[] -> 0 | _ ,_ -> failwith "|A||B|";;

Betriebssystem-Ebene

let res = scal_prod v1 v2;; print_integer res;;

Mikroarchitektur

Maschinensprache ISA-Befehlssatz-Architektur Software Hardware

Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter Dr. Stefan Bosse • Grundlagen der Informatik

A-5

Entwurfs-Abläufe und Ebenen in der Informatik (III) ➤ Übersetzung des Quellkodes in ein ausführbares Maschinen-Programm ➤ Verwaltung und Zuweisung von Ressourcen ➤ Laden und Ausführen des Programms,

Algorithmus-Ebene [003]

Hochsprache Betriebssystem-Ebene

z.B. von einem Terminal aus

➤ Zugriff auf Festplatte ➤ Ein- und Ausgabe (Bildschirm) ➤ Zuteilung von Mikroprozessorzeit an Programm sbosse@h1:~$ ocaml scalprod.ml sbosse@h1:~$ scalprod 7 sbosse@h1:~$

Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-6

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (IV) ➤ Hochsprache besteht aus komplexen Programmanweisungen. ➤ Maschinensprache besteht aus einfachen elementaren Anweisungen. for i do ••• done; ⇒ 1000: 1001: 1002: 1003: 1004: 1005: 1010: 1011: 1012:

= 0 to n−1

Algorithmus-Ebene [004]

Hochsprache Betriebssystem-Ebene Maschinensprache

LOAD I,0 LOAD A,n SUB A,1 CMP I,A JMPZERO 1012 ••• ADD I,1 JUMP 1003 •••

ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-7

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (V) ➤ Mikroprozessoren müssen kodierte Maschinenbefehle ausführen. ➤ Befehlsausführung in mehreren Phasen ➤ Häufig werden die Maschinenbefehle (Phasen) in weitere Mikrobefehle zerlegt. CMP I,A ⇒ 1: MOVE I,R1 2: MOVE A,R2 3: SUB R1,R2,R1 4: SETFLAG ZERO,R1=0? 5: SETFLAG POS,R1>0?

Algorithmus-Ebene [005]

Hochsprache Betriebssystem-Ebene Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-8

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (VI) ➤ Rechnerarchitektur ➤ Mikroprozessorebene ➤ Register-Transfer-Logik ➤ Zustandsdiagramme ➤ Steuerung durch Zustandsautomaten ➤ Noch abstrakte Beschreibung der Hardware

Algorithmus-Ebene [006]

Hochsprache Betriebssystem-Ebene Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-9

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (VII) ➤ Digitallogik-Ebene ➤ Boolesche Algebra ➤ Logiksynthese ➤ Noch nicht technologiespezifisch.

Algorithmus-Ebene [007]

Hochsprache Betriebssystem-Ebene Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-10

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (VIII) ➤ Übergang auf Transistorebene ➤ Technologiespezifisch.

Algorithmus-Ebene [008]

Hochsprache Betriebssystem-Ebene Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter A-11

Dr. Stefan Bosse • Grundlagen der Informatik

Entwurfs-Abläufe und Ebenen in der Informatik (IX) ➤ Übergang auf physikalische Chip-Ebene ➤ Halbleitertechnik in Mehrschichtenaufbau ➤ Übergang von Digital- zu Analogtechnik!

Algorithmus-Ebene [009]

Hochsprache Betriebssystem-Ebene Maschinensprache ISA-Befehlssatz-Architektur Software Hardware Mikroarchitektur Digitale Logik Transistoren und Verdrahtung Masken-Layout/Halbleiter

A-12

Dr. Stefan Bosse • Grundlagen der Informatik

Informationen und Daten (I) ▼ Informationen werden durch maschinelle Daten repräsentiert/abgebildet. Beispiel: Informationsmenge hName, Adresse, Telefonnummeri hFarbe eines Gegenstandesi ⇒ topologische Werte hLänge eines Körpersi ⇒ metrische Werte ▼ Maschinelle Informationsverarbeitung bedeutet: Verarbeitung von Daten mit technischen Geräten/Mitteln ➽ {Mechanische-, elektronische-, optische, quantenmechanische Systeme} ▼ Voraussetzung für das ◆ Speichern, ◆ Verarbeiten, ◆ und Übermitteln von Informationen: Kodierung von Informationen in Daten

▼ Informations- und Datenverarbeitung ist ein geschlossener Kreislauf aus Kodierung von Informationen und Rückgewinnung von Informationen durch Dekodierung.

Dr. Stefan Bosse • Grundlagen der Informatik

B-1

Informationen und Daten (II) Mensch

Informationen [012]

Maschinelle Repräsentation =Kodierung

Maschine

Abstraktion =Dekodierung

Daten

Datenverarbeitung

➤ Daten werden durch Bitmuster dargestellt. ➤ Ein Bit ist die kleinstmögliche Einheit der Information (atomar). ➤ Ein Bit ist eine Informationsmenge bestehend aus zwei Elementen: {wahr,falsch} {ja,nein} {hell,dunkel} ➤ Kodierung dieser Informationsmenge durch logische oder technische Werte: {1,0} {H,L} {3.3V,0.5V} {20mA, 0mA} B-2

Dr. Stefan Bosse • Grundlagen der Informatik

Informationen und Daten (III) ➤ Zusammenfassung mehrerer Bits zu Bitfolgen erlaubt Kodierung einer Wertemenge mit mehr als zwei Werten. ➤ Beispiel: Kodierung einer Menge von Farben: {rot,blau,grün,gelb} ➥ 00 ⇔ rot 01 ⇔ blau 10 ⇔ grün 11 ⇔ gelb ➤ Es gibt genau 2N mögliche Bitfolgen der Länge N≡Anzahl der Bits. Beispiel: N=4 ⇒ 16 Kodierungsmöglichkeiten ➤ Ein Rechner verarbeitet Daten immer in Gruppen von Bits mit festgelegter Länge N. ➤ Zusammenfassung von Bitfolgen bestimmter Länge zu sog. Bytes. Ein Byte umfaßt i.A. 8 Bits. ➤ Die Zusammenfassung von Bytes zu weiteren Gruppen (z.B. 2/4/8 Bytes) ist namentlich nicht eindeutig definiert und hängt von der Rechnerarchitektur ab: 32−Bit Rechnerarchitektur ⇒ {2,4,8} Bytes={short,word,double word} Dr. Stefan Bosse • Grundlagen der Informatik

B-3

Positive ganze Zahlen (I) ➤ Natürliche Zahlen: ℵ={0,1,2,..,∞} ➽ unendlich abzählbare Menge ➤ Zuordnung einer Untermenge der natürlichen Zahlen durch gewichtete Binärzahlendarstellung (Dualzahlen): N−1 X a= ai 2i (2) i=0

➥ Dabei ist B=2 die Basis≡Gewicht des Zahlensystems. Beispiel a1/a0 0 0 0 1 1 0 1 1

⇒ ⇒ ⇒ ⇒ ⇒

N 0 1 2 3

➤ Es können natürliche Zahlen im Bereich 0...(2 N-1) bei N Bits dargestellt werden. ➤ Das Zahlensystem zur Basis B=2 nennt man Dual- oder Binärzahlensystem, da die Wertemenge jeder Ziffer zwei Elemente {0,1} umfaßt. ➤ Obige Gleichung ist die Umrechnungsvorschrift vom Dual- in das Dezimalzahlensystem (B=10). B-4

Dr. Stefan Bosse • Grundlagen der Informatik

Positive ganze Zahlen (II) ➤ Beispiel: 10010111(2)=1•27+0•26+0•25+1•24+0•23+1•22+1•21+1•20=151(10)

➤ Schreibweise der Dualzahlen: MSB ••• LSB

➽ MSB: Most Significant Bit (höchstwertigstes Bit) ➽ LSB: Least SIgnificant Bit (niederwrtigstes Bit) ➤ Umrechnung vom Dezimal- in das Dualzahlensystem: 1. Dezimalzahl durch 2 dividieren, 2. Rest gibt niederwertigste Stelle der Dualzahl (LSB) an, 3. Divisionsergebnis (ganzzahlig) durch 2 dividieren, 4. Schritt (1) und (2) wiederholen bis N-te Stelle (MSB) erreicht ist. ➤ Herleitung der Umrechnungsvorschrift: ◆ Jede Zahl darstellbar durch: Z=Q × B + R mit 0 ≤ R < B ⇔ Z/B={Q,R} mit Q: Quotient, R: Rest, B: Basis. Dr. Stefan Bosse • Grundlagen der Informatik

B-5

Positive ganze Zahlen (III) ➤ Herleitung der Umrechnungsvorschrift: ◆ Es gilt dann für die gesuchte Binärzahlendarstellung durch Faktorisierung: Z=(aN−1aN−2•••a0)= = aN−1•2N−1+aN−2•2N−2+...+a0 = ( aN−1•2N−2+aN−2•2N−3+...+a1) • 2 + a0 =q•2+r

➤ Beispiel: Umrechnung der Dezimalzahl 151(10) in Dualzahl: 151/2 75/2 37/2 18/2 9/2 4/2 2/2 1/2

= = = = = = = =

75 37 18 9 4 2 1 0

Rest Rest Rest Rest Rest Rest Rest Rest

1 (LSB) 1 1 0 1 0 0 1 (MSB)

➽ 10010111(2) B-6

Dr. Stefan Bosse • Grundlagen der Informatik

Vorzeichenbehaftete Dualzahlen (I) ➤ Ganze Zahlen mit der Wertemenge =={-∞,...,-1,0,1,2,...∞} benötigen ein weiteres Bit für die Kennzeichnung des Vorzeichens. ➤ Das höchstwertigste Bit (MSB) wird zur Kodierung des Vorzeichens verwendet: {0: positiv, 1: negativ}

➤ Gegenüber vorzeichenlosen Zahlen stehen nur noch (N-1) Bits für den Zahlenwert zur Verfügung. ➤ Es gibt verschiedene Kodierungsverfahren für negative Zahlen: 1. Vorzeichen-Betragswert V

Betragswert W

2. Einer-Komplement

¬W

V 3. Zweier-Komplement V

¬W+1

➽ Dabei ist (¬) der Negationsoperator für binäre Zahlen: f: x → {x=0→1,x=1→0}; Dr. Stefan Bosse • Grundlagen der Informatik

B-7

Vorzeichenbehaftete Dualzahlen (II) ➤ Vergleich der verschiedenen Kodierungsmethoden: Beispiel: +4 -2= (+4) + (-2) = (+2) 1. Vorzeichen-Betrags-Methode ➽ Ergebnis falsch!

+4 0100 −2 1010 ⇒ −2 ≡ 1 :: 010 ≡ 1 010 −−−−−−−−−− , 1110 −6 2. Einer-Komplement-Methode ➽ Korrektur des Ergebnisses erforderlich!

+4 0100 −2 1101 ⇒ −2 ≡ 1 ::¬(010) ≡ 1 101 −−−−−−−−−− , +1 0001 3. Zweier-Komplement-Methode ➽ Direkt einsetzbar!

+4 0100 −2 1110 ⇒ −2 ≡ (1 :: −−−−−−−−−− = +2 0010 B-8

¬

(010))+1 ≡ 1 110 Dr. Stefan Bosse • Grundlagen der Informatik

Zweier-Komplement-Darstellung (I) ➤ Allgemein gilt: a = −aN−1 • 2

N− 1

+

N−2 X i=0

ai • 2 i

(3)

➤ Beispiel: 100010111(2)=-1•27+0•26+0•25+1•24+0•23+1•22+1•21+1•20=−105(10) ➤ Erzeugung der Zweier-Komplement-Darstellung V in drei Schritten: 1. Komplement von Betragszahl (positive Zahl) W durch Invertieren aller Bits bilden ¬ W 2. Wert 1 zu (¬W) addieren 3. Höchstwertigstes Bit setzen. Beispiel: W=7 ⇒ V=−7 W 111 ¬ W 000 +1 001 −−−−−−−−−−−− V= 1001

Dr. Stefan Bosse • Grundlagen der Informatik

B-9

Zweier-Komplement-Darstellung (II) ➤ Erzeugung des Betragswertes W aus Zweier-Komplement-Darstellung V: 1. Höchstwertigstes Bit von V auf V(N-1)=0 setzen bzw. W=V(N-2 downto 0) setzen, 2. Von W Wert 1 subtrahieren (W-1), 3. In W alle Bits invertieren (¬W), Beispiel: V=−7 ⇒ W=7 V 1001 W 001 −1 000 ¬ W 111 −−−−−−−−−−−− W= 111 [001]

➤ Die Zuordnung der positiven und negativen Zahlen kann anschaulich mit einer Zahlengeraden verdeutlicht werden, z.B. für N=4:

B-10

-8 -7 -6 -5 -4 -3 -2 -1

0

1

0 0 0 1

0 0 0 0

1 0 0 0

1 1 1 1

2

3

4

5

6

7 1 1 1 0

Dr. Stefan Bosse • Grundlagen der Informatik

Zahlensysteme (I) ➤ Allgemeine Darstellung einer Zahl in einem Zahlensystem zur Basis B: Z=

N−1 X i=0

zi • B i

(4)

mit zi als i-te Ziffer einer Zahl.

➤ Es gibt verschiedene bekannte Zahlensysteme, wobei die Basis die Anzahld er möglichen Ziffern angibt: B=2 Binär- oder Dualzahlensystem ➽ Ziffernmenge: {0,1} B=10 Dezimalzahlensystem ➽ Ziffernmenge {0,1,2,3,4,5,6,7,8,9} B=16 Hexadezimalzahlensystem ➽ Ziffernmenge {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} Umrechnung: A→10, B→11, C→12, D→13, E→14, F→15 B=8 Oktalzahlensystem ➽ ZIffernmenge {0,1,2,3,4,5,6,7} ➤ Beispiel: 1F2(16) =1•162+15•161+2•160=498(10) Dr. Stefan Bosse • Grundlagen der Informatik

B-11

Zahlensysteme (II) ➤ Das Hexadezimalsystem ist vorteilhaft bei der Handhabung von Binärzahlen. ➤ Einfache Umrechnung zwischen beiden Zahlensystemen durch Bitgruppierung mit M=4 Bits und Verwendung einer Zuordnungstabelle: 0 1 2 3 4

⇔ ⇔ ⇔ ⇔ ⇔

0000 0001 0010 0011 0100

5 6 7 8 9

⇔ ⇔ ⇔ ⇔ ⇔

0101 0110 0111 1000 1001

A B C D E

⇔ ⇔ ⇔ ⇔ ⇔

1010 1011 1100 1101 1110

F ⇔ 1111

➤ Beispiel: N=8 Bit: 1101◆1001(2)=13•161+9•160=D9(16)

➤ Spezielle Kodierungen: Dualkodierte Dezimalziffern ➥ Gepackte BCD-Dezimalziffern ➥ Jeweils eines Stelle einer Dezimalzahl wird mit einer Bitgruppe mit M=4 Bits zugeordnet. ➥ Beispiel: 725(10)=0000◆0111◆0010◆0101(BCDpacked) B-12

Dr. Stefan Bosse • Grundlagen der Informatik

Arithmetische Operationen (I) 1. Addition (+) ➽ f: = × = → =

2. Subtraktion (-) ➽ Rückführung auf Addition 3. Multiplikation (*) ➽ f: = × = → 2•= 4. Division (/) ➽ f: = × = → = 5. Division mit Rest (//)

6. Relationsoperatoren: {,≡,=,≤,≥,,} ➽ f: = × = → β

➤ Addition und Subtraktion können für positive und negative Binärzahlen in ZweierKomplement-Darstellung ohne Unterscheidung ausgeführt werden. ➤ Multiplikation und Division müssen bei einfachen Schiebe-Verfahren das Vorzeichen korrigieren, aber z.B. mit Booth-Kodierung können auch negative Zahlen verarbeitet werden. Addition Einstellige Binärzahlen:

0 +0 == 0

0 +1 == 1

1 +0 == 1

1 +1 == 10

1 +1 +1 == 11

Linke 1 ist Übertrag!

Dr. Stefan Bosse • Grundlagen der Informatik

C-1

Arithmetische Operationen (II) Addition Bei mehrstelligen Binärzahlen gleiches Verfahren wie bei Dezimalzahlen:

B=10

B=2

121 +119 Ü 1 ==== 240

0111 1001 0111 0111 1111 111 ========= 1111 0000

 Subtraktion durch Negation des Subtrahenten mit Zweier-Komplementdarstellung und Rückführung auf Addition: 121 −119

121 ⇒ +(−119) ➥

0111 1001 (121) +1000 1001 (−119) Ü 111 1 ========= 0000 0010 (2) C-2

Dr. Stefan Bosse • Grundlagen der Informatik

Arithmetische Operationen (III) Addition Bei Addition und Subtraktion kann ein Überlauf auftreten, der zu einem falschen Ergebnis führt:

121 0111 1001 +240 1111 0000 Ü 1 1111 ==== ========, 361 1 1110 1001 ➤ Bei arithmetischen Operationen gibt es verchiedene Statusinformationen, die in zusätzlichen Bits der Recheneinheit aus dem Ergebnis E einer Operation abgeleitet und gespeichert werden:

Übertragsbit

C

E(MSB+1)=1

Überlaufbit

V

|E| > Emax

Negativbit

N

E(MSB)=1

Nullbit

Z

E=0

Bei vorzeichenlosen Zahlen: Überlauf Bei vorzeichenbehafteten Zahlen

Dr. Stefan Bosse • Grundlagen der Informatik

C-3

Arithmetische Operationen (IV) Multiplikation Einstellige Binärzahlen:

0 *0 == 0

0 *1 == 0

1 *0 == 0

1 *1 == 1

 Mehrstellige Binärzahlen werden wie im Dezimalzahlensystem stellenweise durch Schieben und Addieren multipliziert: 37*21 37*1= 37 37*20=740 ========= 777

00100101 * 00010101 ⇒

00100101*1= 00100101 00100101*1 = 0010010100 00100101*1 = 001001010000 ============= 1100001001

 Das Ergebnis einer Multiplikation ist 2•N Bits lang bei N-Bit Datenbreite der Operanden. C-4

Dr. Stefan Bosse • Grundlagen der Informatik

Reelle Zahlen ➤ Reelle Zahlen setzen sich aus zwei Zahlenmengen zusammen R=Q∩I: ➽ unendlich nicht abzählbare Menge! Rationale Zahlen Q Gebrochene Zahlen, darstellbar mit Brüchen. 1 124 Beispiele : , usw. 3 7 Irrationale Zahlen I Nicht als Bruchausdruck darstellbar. Beispiele :

√ 2, π, e usw.

(5)

(6)

➤ Es gibt zwei Kodierungsmöglichkeiten für eine Untermenge der reellen Zahlen: 1. Festpunktdarstellung 2. Gleitpunktdarstellung

Dr. Stefan Bosse • Grundlagen der Informatik

C-5

Reelle Zahlen :: Festpunktdarstellung ➤ Die Festpunktdarstellung verwendet feste Anzahl von Stellen und einen fixen Dezimalpunkt. ➥ Nachteil: unzureichende Genauigkeit bei kleinen Zahlenwerten ➥ Vorteil: einfach zu implementieren Beispiel : 12.39(10) ➽ ≈ 1100.0110(2) ••• 1100.011 ➽ 1•23+1•22+0•21+0•20+0•2−1+1•2−2+1•2−3••• = 8+4+0.25+0.125+•••

➤ Der Punkt trennt den ganzzahligen vom gebrochenen Teil der reellen Zahl. ➤ Nur ein kleines Intervall der reellen Zahl kann dargestellt werden. ➤ Eine reelle Zahl kann i.A. nur näherungsweise dargestellt werden. Es tritt ein Informationsverlust auf, im Gegensatz zu ganzen Zahlen. Beispiel : N=8.4=12 Bit ➽ -∞) im Binärzahlensystem: M=

k X

mi 2 i

(9)

i=−∞

mit 0 ≤ mi< B.

➤ Beispiel: Zerlegung der Zahl 18.5 in Exponentialdarstellung: 1•24+0•23+0•22+1•21+0•20 . 1•2−1 = 10010.1(2) •20 ➤ Für normierte Gleitpunktzahlen gilt dann: M=

N− 1 X

m i 2 −i

(10)

i=0

mit 0 ≤ mi< B.

➤ Beispiel: Normierte Gleitpunktdarstellung der Zahl 18.5 in Exponentialdarstellung: 1•24+0•23+0•22+1•21+0•20 . 1•2−1 = 10010.1(2) •20 = 1.00101(2) •24 Dr. Stefan Bosse • Grundlagen der Informatik

C-9

Reelle Zahlen :: Gleitpunktdarstellung (IV) ➤ Normierte Gleitpunktzahlen nutzen die Mantissenbits (feste Bitgruppenbreite) optimal mit kleinsten Genauigkeitsverlust aus. ➤ Der Exponent wird durch einen Offsetwert immer positiv gehalten (Bias). ➤ Sonderfälle: Z=0 ➽ nicht mit 1.F darstellbar Z=∞ Z=NaN (Not a Number) ➽ z.B. Überlauf oder Divison durch Null liefert NaN ➤ Bitformat nach IEEE: Einfach lang (32 Bit) S

E

F

1

8

23 Bit

Doppelt lang (64 Bit)

C-10

S

E

F

1

11

52 Bit

Dr. Stefan Bosse • Grundlagen der Informatik

Digitallogik & Boolesche Algebra ZIELE ➤ Verständnis der technichen Digitallogik als Grundlage der maschinellen Datenverarbeitung

➤ Verständnis und Anwendung der Booleschen Algebra als formale Beschreibung von Digitallogik

➤ Ableitung von Digitallogiksystemen aus einer gegebenen Spezifikation und gestellten Aufgabe

D-0

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Logik :: Logische Werte ➤ Boolesche Logikwerte sind die Wahrheitswerte: {”Wahr”,”Falsch”}, darstellbar mit Bits {1,0} ➤ Boolesche Werte stellen eine mathematische Methode zur Beschreibung von Digitallogiksystemen dar ➽ Boolesche Algebra ➤ Boolesche Variablen sind das Analogon zu mathematischen Variablen, die nur die Zustände {0,1} annehmen können. ➤ Technologieumsetzung durch Übergang von Variablen auf elektrische Signale . ➤ Technologische Logikwerte werden mittels physikalischer Größen kodiert und haben einen Technologiebezug zu der Transistortechnik: {0,1,L,H,Z,X} 0,1 ➽ {0V,3.3V} Starke logische Werte . Es dürfen keine zwei Ausgangssignale von logischen Schaltungen zusammengeführt werden. L,H Schwache logische Werte . Es dürfen mehrere Ausgangssignale zusammengeführt werden. Es gibt eine Auflösungsfunktion die bestimmt, welches Resultatsignal aus der Überlagerung folgt. Z,X Tristate-Signale (Hochimpedanzausgang) und Don’t-Care (kein technischer Bezug). D-1

Dr. Stefan Bosse • Grundlagen der Informatik

Digitallogik :: Transistortechnologie ➤ Digitallogik wird i.A. technologisch mit elektronischen Bauteilen wie Transistoren umgesetzt. ➤ Ursprünglich Einsatz von Bipolartransistortechnik. ➤ Moderne Fertigungstechnologien (ASIC) setzen CMOS-FET-Technologie ein: ➽ CMOS: Complementary Metal Oxide Substrat ➽ FET: Field Effect Transistor ➽ ASIC: Application Specific Integrated Circuit ➥ Paarweiser Einsatz von komplementären MOSFET-Transistoren in N- und PKanaltechnik. ➤ MOSFET-Transistoren sind spannungsgesteurte Stromquellen mit folgender Übertragungsfunktion: ID

ID

+5V D

D

N N-Kanal

R

P-Kanal

G UGS

UGS

G

S

D G

nicht leitend

S

UDS = U S- RI D

leitend

S D

D

UGS

[025]

P G

S

G

S

Dr. Stefan Bosse • Grundlagen der Informatik

D-2

Boolesche Logik :: Negation/Komplement ➤ Mit logischen Werten können boolesche Verknüpfungen durchgeführt werden. Einfachste Verknüpfung ist die Negation. Boolesche Funktion Y = ¬X = X Y = NOT(X) Wahrheitstabelle Die Schaltfunktion Y wird durch eine Wahrheitstabelle beschrieben, die eine vollständige Zuordnung der Eingangsvariable X zur Ausgangsvariable Y erlaubt. X

Y

0

1

1

0

Us

Logiksymbol und Transistorschaltung

P-Kanal MOSFET

X X

1

Y

Y N-Kanal MOSFET

[013]

[014]

D-3

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Logik :: Konjunktion/Und-Verknüpfung ➤ Boolesche Grundverknüpfung mit N≥2 Eingangsvariablen X1,X2,... Boolesche Funktion Y = X1 ∧ X2 Y = X1 • X2 ➽ 1-Bit-Mulitplizierer Y = AND(X1,X2) Wahrheitstabelle Die Schaltfunktion Y wird durch eine Wahrheitstabelle beschrieben, die eine vollständige Zuordnung der Eingangsvariablen X1 und X2 zur Ausgangsvariable Y erlaubt. X1

X2

Y

0

0

0

0

1

0

1

0

0

1

1

1

NAND-Gatter

Us X1

X2 Y [015]

X1

Logiksymbol und Transistorschaltung X2

Dr. Stefan Bosse • Grundlagen der Informatik

D-4

Boolesche Logik :: Disjunktion/Oder-Verknüpfung ➤ Boolesche Grundverknüpfung mit N≥2 Eingangsvariablen X1,X2,... Boolesche Funktion Y = X1 ∨ X2 Y = X1 + X2 Y = OR(X1,X2) Wahrheitstabelle Die Schaltfunktion Y wird durch eine Wahrheitstabelle beschrieben, die eine vollständige Zuordnung der Eingangsvariablen X1 und X2 zur Ausgangsvariable Y erlaubt. X1

X2

Y

0

0

0

0

1

1

1

0

1

1

1

1

NOR-Gatter

Us

X1

X2

Logiksymbol und Transistorschaltung

Y

X1

X2 [016]

D-5

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Logik :: Antivalenz/Exklusiv-Oder-Verknüpfung ➤ Verknüpfung mit N≥2 Eingangsvariablen X1,X2,..., darstellbar mit Oder/UndVerknüpfungen Boolesche Funktion Y = X1 /≡ X2 Y = X1 ⊕ X2 ➽ 1-Bit-Addierer Y = XOR(X1,X2) Wahrheitstabelle Die Schaltfunktion Y wird durch eine Wahrheitstabelle beschrieben, die eine vollständige Zuordnung der Eingangsvariablen X1 und X2 zur Ausgangsvariable Y erlaubt. X1

X2

Y

0

0

0

0

1

1

1

0

1

1

1

0

Basisreduktion Y = X1 ⊕ X2 = ¬X1•X2+X1•¬X2

Dr. Stefan Bosse • Grundlagen der Informatik

D-6

Boolesche Logik :: Äquivalenz ➤ Verknüpfung mit N≥2 Eingangsvariablen X1,X2,..., darstellbar mit Oder/UndVerknüpfungen Boolesche Funktion Y = X1 ≡ X2 Y = X1 ↔ X2 Y = NXOR(X1,X2) Wahrheitstabelle Die Schaltfunktion Y wird durch eine Wahrheitstabelle beschrieben, die eine vollständige Zuordnung der Eingangsvariablen X1 und X2 zur Ausgangsvariable Y erlaubt. X1

X2

Y

0

0

1

0

1

0

1

0

0

1

1

1

Basisreduktion Y = X1 ⊕ X2 = ¬X1•¬X2+X1•X2

D-7

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Logik :: Bitgruppen ➤ Man kann Bitgruppen als Folgen von logischen Werten darstellen. ➤ Die logischen Verknüpfungen lassen sich auch auf Bitgruppen anwenden. ➤ Die logische Verknüpfung von Bitgruppen erfolgt dann stellen/bit-weise. ➤ Beispiele : NOT 01110110 ============= 10001001 ◆ 01110110 AND 11101011 ============= 01100010 ◆ 01110110 OR 11101011 ============= 11111111

D-8

C: int a,b,c; a=0x76; c=~a; b=0xeb; c=a&b; c=a|b;

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Algebra (I) ➤ Logische Variablen können mit logischen Funktionen und logischen Operatoren verknüpft werden. Die Boolesche Algebra beschränkt sich dabei auf zweiwertige Logik der Wertemenge {0,1}. ➤ Eine boolesche Funktion ist eine Abbildung von N booleschen Variablen a i (Ndimensionaler Vektor) mit 2N×N Eingangswerten auf M boolesche Ergebniswerte y i (Mdimensionaler Vektor): f(a1, a2, ..., aN) : a1 × a2 × ... → y (11) f(a) : BN → BM

(12)

➤ M=1 führt auf skalare boolesche Funktion. ➤ Die boolesche Algebra besteht aus drei elementaren Operationen: Disjunktion Oder-Verknüpfung von N Eingangsvariablen zu einem Ausgangswert: y=a1 +a2+a3+... Konjunktion Und-Verknüpfung von N Eingangsvariablen zu einem Ausgangswert: y=a1 •a2•a3•... Negation Invertierung eines booleschen Zustandes ¬ a D-9

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Algebra (II) ➤ Boolesche Algebra (Boole, ≈ 1848) ist Hilfsmittel beim Entwurf von digitalen Schaltungen. ▼ Eine Aufgabenstellung definiert Schaltbedingungen, ▼ diese Schaltbedingungen werden in einer Wahrheits- oder Funktionstabelle dargestellt: a1

a2

Y

0

0

1

0

1

1

1

0

1

1

1

0

▼ aus den Funktionstabellen werden boolesche Funktionen abgeleitet (äquivalente Darstellungsform): y=¬ a1•¬a2+¬ a1•a2+a1•¬ a2 ▼ Die so gewonnenen Funktionen werden mit Gesetzen der booleschen Algebra umgeformat und vereinfacht: y=¬ a1+¬ a2 ▼ Ziel: technische Realisierung mit minimalen Ressourcen-Aufwand, d.h. i.A. mit minimaler Zahl von 1. Variablen und 2. Verknüpfungen. Dr. Stefan Bosse • Grundlagen der Informatik

D-10

Boolesche Algebra (III) ➤ Gesetzte der booleschen Algebra für Termumformungen Kommutativgesetze ➽ Vertauschungsregeln a•b=b•a

(13)

a+b=b+a (14) ➥ Die Variablen sind vertauschbar ➽ die Eingänge von Gattern sind vertauschbar. Assoziativgesetze ➽ Anreihregeln

(a • b) • c = a • (b • c)

(15)

(a + b) + c = a + (b + c) (16) ➥ Reihenfolge der Berechnung ist beliebig ➽ die Zusammenfassung von Eingängen von Gattern ist beliebig. a1 a2

a1

& &

a3

Y

&

Y

a2 a3

&

[021]

D-11

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Algebra (IV) ➤ Gesetzte der booleschen Algebra für Termumformungen Distributivgesetze ➽ Mischungsregeln

(a + b) • c = a • c + b • c

(17)

(a + b) • (c + d) = a • c + a • d + b • c + b • d (18) ➥ Eine gemeinsame Variable in zwei verknüpften Termen kann ausgeklammert werden. ➥ Spezialfall: b=d (a + b) • (b + c) = a • b + c (19)

Dr. Stefan Bosse • Grundlagen der Informatik

D-12

Boolesche Algebra (V) ➤ Gesetzte der booleschen Algebra für Termumformungen Inversionsregeln ➽ De-Morgan-Regeln

(¬a • ¬b) = ¬(a + b)

(20)

(¬a + ¬b) = ¬(a • b) (21) ➥ Transformation von Konjunktion nach Disjunktion und umgekehrt ➽ Transformation von beliebigen booleschen Funktionen in entweder Und-Negation oder OderNegation-Beschreibung.

D-13

Dr. Stefan Bosse • Grundlagen der Informatik

Boolesche Algebra (VI) ➤ Gesetzte der booleschen Algebra für Termumformungen Weitere Regeln a•0=0  a•1=a

(22)

a+0=a  a+1=1

(23)

a•a=a  a+a=a

(24)

Bindungsregeln 1. Negation von Variablen oder Werten wird zuesrt evaluiert. 2. Und-Verknüpfung bindet stärker als Oder-Verknüpfung. 3. Alle anderen Verknüpfungen werden von links nach rechts evaluiert.

Dr. Stefan Bosse • Grundlagen der Informatik

D-14

Boolesche Algebra (VII) ➤ Beispiel einer Vereinfachung einer Digitallogikschaltung mit Boolescher Algebra Digitallogikschaltung

➥ Ableitung der booleschen Funktion: Boolesche Gleichung (I) y = b•(a+c)+c Boolesche Gleichung (II) ➥ Mit Distributivgesetz folgt: y = a•b+b•c+c ➥ Variable c faktorisieren und b+1=1 nutzen: y = a•b+c•(b+1) = a • b+c

D-15

C: int a,b,c,y; y=b&&(a||c)||c; y=a&&b||b&&c||c; y=a&&b||c;

Dr. Stefan Bosse • Grundlagen der Informatik

Digitallogik & Boolesche Algebra ZIELE ➤ Verständnis der booleschen Funktionen als Entwurfswerkzeug für Digitallogikschaltungen

➤ Ableitung von booleschen Funktionen in Normalform aus einer gegebenen Spezifikation

➤ Optimierung von booleschen Funktionen: Minimale Chip-Fläche und Energieverbrauch!

Dr. Stefan Bosse • Grundlagen der Informatik

E-0

Boolesche Normalformen ➤ Aus Funktionstabellen mit N Eingangsvariablen und einer Ausgangsvariable werden im ersten Entwurfsschritt sog. Normalformen von booleschen Funktionen abgeleitet. ➤ Eine Normalform setzt sich aus U logische Struktur

BLOCK 100

POS 0

write

Dateioffset

read

Speichermedium => physische Struktur Sektor 7

Sektor 0

Spur 0,1,2 Sektor 1

Blockoffset

seek BLOCK 103

POS 1792

[067]

➤ Die einzelnen Blöcke einer Datei werden einzelnen Sektoren der Festplatte nach zwei verschiedenen Methoden zugeordnet: 1. möglichst geschlossen/zusammenhängend sequenziell auf Spuren, 2. oder verstreut auf verschiedenen Sektoren von verschiedenen Spuren (nicht zusammenhängend). Block

Spur (1)

Sektor (1)

Spur (2)

Sektor (2)

100 101 102 103

1 1 1 1

3 4 5 6

2 27 10 2

0 3 4 2 Dr. Stefan Bosse • Grundlagen der Informatik

J-6

Minix-Dateisystem :: Allgemeiner Aufbau ➤ Die Strukturierung des Dateisystems ist unterteilt in folgende Funktionsblöcke: Super Block Dieser Block enthält Informationen über das Dateisystem: 1. Anzahl der Inodes 2. Anzahl der Datenblöcke 3. Blockgröße [Bytes] 4. usw. Inode Table Inodes enthalten Informationen über Dateiobjekte: 1. Dateiart 2. Größe 3. Zeitstempel 4. Zeiger auf Datenblöcke Data Datenbereich

J-7

Dr. Stefan Bosse • Grundlagen der Informatik

Minix-Dateisystem :: I-Node ➤ Eine I-Node ist eine interne Verknüpfung. Sie enthält Informationen über eine Datei, aber nicht den Namen der Datei (oder eines Verzeichnisses). Dieser wird im Datenbereich abgelegt. ➽ Inode-Format (mit Byteoffset) 0 2 MODE UID P1 P2

4 SIZE P3

P4

8 TIME P5

P6

12 13 14 G L P0 P7 P8

Mode Art des Dateninhaltes/der Inode: {FREG ➽ Regular File, FDIR: Directory, FLNK: Link, · · ·} SIZE Größe der Datei in Bytes (oder in Blockeinheiten) UID, GID, TIME Nutzer-ID & Gruppen-ID & Zeitstempel P0· · ·P6 Zeiger auf Datenblöcke P7, P8 Zeiger auf Zeigerblock, der weitere Datenblockzeiger P enthält, und doppelt indirekter Zeiger. J-8

Dr. Stefan Bosse • Grundlagen der Informatik

Minix-Dateisystem :: Beispiel einer Datei und einer I-Node

J-9

Dr. Stefan Bosse • Grundlagen der Informatik

Minix-Dateisystem :: Verzeichnis ➤ Verzeichnisse werden im Minix-Dateisystem wie normale Dateien behandelt. ➤ Ein Verzeichnis ist ein Datenblock mit einer linearen Liste von Verzeichniseinträgen. Datenblock Verzeichniseintrag 1



Datei 1

Verzeichniseintrag 2



Datei 2



Datei N

•••• Verzeichniseintrag N

➤ Ein Verzeichniseintrag enthält den Namen des Eintrages und ein zugehörge I-NodeNummer, die entweder zu einer Datei oder einem weiteren Verzeichnis gehört (Verzeichnisbaum). Verzeichniseintrag

J-10

2

14

Inode Link

Name

Dr. Stefan Bosse • Grundlagen der Informatik

Minix-Dateisystem :: Beispiel einer Datei und Verzeichnisse (I)

J-11

Dr. Stefan Bosse • Grundlagen der Informatik

Minix-Dateisystem :: Beispiel einer Datei und Verzeichnisse (II)

J-12

Dr. Stefan Bosse • Grundlagen der Informatik

Minix-Dateisystem :: Große Dateien ➤ I.A. ist die Blockgröße BLKSIZE=512 Byte. ➤ Die Blockgröße entscheidet über: 1. die maximal Anzahl von zu speichernden Blöcken, 2. die Verschwendung an Speicherplatz, da Dateien und Verzeichnisse nur in Vielfachen von Blöcken gespeichert werden können. ➤ Neben den eigentlichen Dateidaten und Inodes müssen in der Inode-Map und DataMap Tabelle die bereits verwendeten Blöcke, jeweils für den Inode- und Data-Bereich vermerkt werden. ➤ Die Anzahl von Inodes ist durch die Größe der Inode-Tabelle und der Inode-Map-Tabelle beschränkt. ➤ Die Anzahl der Datenblöcke ist durch die Data-Map-Tabelle beschränkt. ➤ Damit auch größere Dateien gespeichert werden können (N Blcke>7=3584 Bytes), kann ein weiterer Datenblock als Zeigerblock verwendet werden [P7], so daß weitere M=BLKSIZE/2 Datenblockzeiger zur Verfügung stehen ➽ indirekter Blockzeiger. ➤ Weitere Zeigerblöcke sind über einen doppelt indirekten Blockzeiger P8 erreichbar. Dieser Block enthält Zeiger auf Zeigerblöcke, die wiederum Zeiger auf Datenblöcke enthalten.

J-13

Dr. Stefan Bosse • Grundlagen der Informatik

Netzwerke und Kommunikation ZIELE ➤ Verständnis der Möglichkeiten und des Ablaufes der Kommunikation zwischen Rechnern

➤ Aufbau und Funktionsweise von Netzwerken und der Vermittlung von Nachrichten ➤ Grundlagen und Funktionen eines Protokolls und Protokollstacks eines Betriebssytems

Dr. Stefan Bosse • Grundlagen der Informatik

K-0

Vernetzung von Rechnern ➤ Physikalisch können zwei Rechner einfach über ein Kabel miteinander verbunden werden. Dabei müssen jedoch weitere Festlegungen getroffen werden: ◆ Das Kabel soll je einen Draht für Hin- und Rückleitung und einen Draht für die Masseleitung aufweisen. ◆ Die Datenbits sollen durch Spannungspegel mit +12 V für 1-Bits und -12 V für 0-Bits gekennzeichnet werden (Physikalische Beschreibung RS-232). ◆ Jeweils 8 Bits (1 Byte) werden in Gruppe hintereinander folgend mit fest vorgegebener Geschwindigkeit übertragen. ◆ Anfang einer solchen Sequenz wird durch ein längeres ”Startbit” und Ende durch ein ”Stopbit” gekennzeichnet (Protokoll und Daten Link Beschreibung RS-232). ➤ Solche einfachen Datenübertragungen besitzen jedoch einige Nachteile, wie z. B.: ◆ Die Verbindung von vielen Rechnern über solche ”Punkt zu Punkt”-Leitungen ist sehr aufwändig. ◆ Daher nicht jeden Rechner mit jedem verbinden (bei N Rechnern werden N! Verbindungen benötigt), sondern Verbindung über ein Netzwerk.

K-1

Dr. Stefan Bosse • Grundlagen der Informatik

Vernetzung von Rechnern (II) In Netzwerken sind dann u.a. Festlegungen zu treffen bzgl.:

 Art des Übertragungsmediums, wie z. B. Koax- oder twisted-pair-Kabel, Lichtwellenleiter, Funkübertragung usw.  Topologie des Netzes, wie z. B. bus-, ring- oder sternförmig.  Zugriffskontrolle auf Übertragungsmedium zum Verhindern gleichzeitiger Übertragungen; hier sind feste Zugriffszeiten mögl. oder auch ein Zugriff bei Bedarf mit einer vorherigen Prüfung auf eine bereits laufende Übertragung.  Art der Adressierung der Rechner im Netzverbund und der Adressierung einer spezifischen Anwendung die auf einem Rechner ausgeführt wird,  Sicherheitsaspekte und Identifikation von Teilnehmern.  Abfolge und Bedeutung von Befehlen und Daten.

K-2

Dr. Stefan Bosse • Grundlagen der Informatik

Vernetzung von Rechnern (III) Netzwerkverbindung ist durch 5-Tupel charakterisierbar:

 Protokoll (z.B. Transmission Control Protocol TCP)  Lokaler Host Rechner (Phys. Ethernet- oder logische IP-Adresse)  Lokaler Prozeß (Anwendung, Port Nummer)  Fremder Host Rechner (Phys. Ethernet- oder logische IP-Adresse)  Fremder Prozeß (Anwendung, Port Nummer) IP−Nummer des lokalen Host IP−Nummer des fremden Hosts | | ( TCP 196.8.79.22:1078 132.49.2.3:21 ) | | | | Portnummer lokaler Host Portnummer fremder Host Protokollfamilie

K-3

Dr. Stefan Bosse • Grundlagen der Informatik

Vernetzung von Rechnern (IV) Netzwerkadressen auf IP-Ebene:

 Jeder Rechner im Netzwerk bekommt eine weltweit eindeutige Kennung, die IPAdresse, bestehend aus vier Ziffern (Wertebereich 0-255), insgesammt 32 Bit (IP Version 4): AA.BB.CC.DD z.B. 134.102.219.4  Die Adresse wird vom Menschen vergeben und ist unabhängig von dem physischen Rechner (im Gegensatz z. B. zur MAC-Adresse der Netzwerkschnittstelle)!  Ein Netzwerk fasst Rechner in einer Gruppe zusammen. Bei IP-Adressen durch Netzmaske gekennzeichnet (H:Host, N:NET): NN.NN.NN.HH (Klasse C) NN.NN.HH.HH (Klasse B) 32 Bits NN.HH.HH.HH (Klasse A) Bereich der Host Adressen

Klasse A

0

Netzwerk

B

10

C

110

D

1110

1.0.0.0 to 127.255.255.255

Host Netzwerk

128.0.0.0 to 191.255.255.255

Host Netzwerk

Host

192.0.0.0 to 223.255.255.255 224.0.0.0 to 239.255.255.255

Multicast Adresse

240.0.0.0 to

Dr. Stefan Bosse • Grundlagen der Informatik

K-4

Klient-Server Kommunikation Arten der Kommunikation

➤ In Netzwerken können einzelne Rechner direkt und gleichberechtigt ohne Vermittler miteinander kommunizieren → Peer-to-Peer Kommunikation ➤ Im Gegensatz zur Anfrage-basierten Klient-Server Kommunikation wo ◆ ein Rechner (Klient) eine Anfrage an einen anderen Rechner (Server) stellt, ◆ der darauf eine Antwort an den Klienten zurücksendet. ◆ Klient und Server sind über ein Netzwerk verbunden, aber i. A. räumlich getrennt Client Server

Netzwerk

Client Rechner Anfrage

Server Rechner

Netzwerk Antwort

Client Prozeß

K-5

Server Prozeß

Dr. Stefan Bosse • Grundlagen der Informatik

Vermittlung in Netzwerken Routing

➤ In Netzwerken können Nachrichten von einem Quell- zu einem Ziel-Rechner indirekt durch einen Vermittler (durch Sub-Netzwerke) übertragen werden → Router ➤ Dazu müssen die Router Pfade oder Teilpfade ermitteln über die die Nachrichten an ihr Ziel transportiert werden können → Route Sub-Netzwerk

Router

Rechner

Lokales Netzwerk

Router

Sub-Netzwerk Empfänger Rechner

Sender Rechner B

D

A

E C

Sender Prozeß

Paket

Empfänger Prozeß Router C vermittelt Paket nach E und nicht nach D

K-6

Dr. Stefan Bosse • Grundlagen der Informatik

Vermittlung in Netzwerken (II) Routing :: Beispiel traceroute to www.bsslab.de (141.0.17.199), 30 hops max, 40 byte packets 1 fb3−c6500.informatik.uni−bremen.de Regionaler Internet Service Provider (ISP) (134.102.219.115) 0.575 ms 2 v6500−vl501.noc.uni−bremen.de (134.102.0.33) 0.719 ms 3 vkr−po401.x−win.uni−bremen.de POP (134.102.0.13) 0.751 ms 4 xr−bre1−pc1.x−win.dfn.de (188.1.96.9) 9.279 ms NAP Telefon 5 cr−han1−te0−0−0−8.x−win.dfn.de Client System (a) (188.1.145.241) 3.063 ms 6 cr−tub1−te0−7−0−4.x−win.dfn.de Modem (188.1.145.217) 7.753 ms (b) 7 hbg−b2−link.telia.net (213.248.69.33) 15.891 ms 8 hbg−bb1−link.telia.net (213.155.135.82) 15.647 ms 9 ffm−bb1−link.telia.net (213.155.135.144) 24.181 ms ffm−bb1−link.telia.net (213.155.135.146) 24.051 ms ffm−bb1−link.telia.net (213.155.135.134) 24.013 ms 10 mcn−b2−link.telia.net (80.91.248.29) 31.200 ms 11 ispgateway−ic−133045−mcn−b2.c.telia.net (213.248.84.38) 23.377 ms 12 te−1−0−1.sw−gate03.ispgateway.de (80.67.29.134) 22.896 ms 13 80.67.29.184 (80.67.29.184) 24.295 ms 14 m01s3−2−20da.ispgateway.de (141.0.17.199) 23.214 ms

K-7

Backbone

Server Farm

Router

Dr. Stefan Bosse • Grundlagen der Informatik

Verbindungen Netzwerkkommunikation zwischen Rechnern kann

➤ verbindungslos ad-hoc (z. B. UDP) oder ➤ mit einer zuvor zu erstellenden Verbindung erfolgen (häufig Klient-Server Kommunikation, z. B. TCP/IP). 1. Eine Verbindung wird vom anfragenden Rechner (Klient) mittels einer ConnectNachricht beantragt. Es muß auf eine Antwort (Acknowledge) gewartet werden. → Aufbau der Verbindung in einer Richtung 2. Die Verbindung wird in die andere Richtung vom Server durch Senden einer Acknowledge-Nachricht bestätigt. 3. Jetzt können Nachrichten zwischen den Rechnern ausgetauscht werden. Identifizierung für die Daten ist eine eindeutige Kennunng der Verbindung. 4. Die Verbindung muß explizit wieder von beiden Rechnern getrennt werden mit Disconnect-Nachricht (und anschließenden Acknowledge) Client Prozeß System Aufrufe Betriebssystem

Kernel

Protokoll stack

Drivers

(1) Verbindungs Anfrage (2) ACK Bestätigung

Host 1

Server Rechner

Host 2 CR

Server process

(3) Daten Anfrage (4) Antwort

CR: Connect Request ACK: Acknowledge DATA: Daten DR: Disconnect Request

ACK

DATA

Zeit

Client Rechner

DATA

(5) Trennung (6) Trennung

Protokoll

Kernel

stack

Drivers

DR

Dr. Stefan Bosse • Grundlagen der Informatik

K-8

Verbindungen (II) Verlust von Nachrichten Vier Protokollszenarien für den Fall der Auflösung einer Verbindung (Disconnect Request) a) Normaler Fall mit 3-Phasen Handshake b) ACK Nachricht geht verloren

Host 1

Host 2

DR

Send DR + start timer

Send DR + start timer

DR

Release connection

Send ACK

ACK Lost

(a)

Host 2

DR

DR

Send DR & start timer

Host 1

 Nach Ablauf des Timeouts wird die Anfrage wiederholt

Release connection

DR

DR

Send ACK

ACK

(c)

Host 2

DR

Send DR + start timer

Send DR & start timer

Lost

Lost ( Timeout) send DR + start timer

(Timeout) release connection

(b)

Host 1 Send DR + start timer

 Bei jeder Anfrage wird ein Timer gestartet

Send DR + start timer

DR

ACK

Send ACK

d) Antwort auf DR und alle folgenden DR gehen verloren

K-9

Host 2

DR

Release connection

Release connection

c) Antwort auf DR geht verloren

 Jede Anfrage und das Senden von Daten muß bestätigt werden (synchr. Protokoll)

Host 1 Send DR + start timer

Send DR & start timer

( Timeout) send DR + start timer

Release connection

(N Timeouts) release connection

Lost

(Timeout) release connection (d)

Dr. Stefan Bosse • Grundlagen der Informatik

Intranet und Internet ➤ Ein Intranet koppelt in einem lokal eng begrenzten räumlichen Umfeld Rechner und ermöglicht direkte Kommunikation zwischen den Rechner und i.A. ohne Router. ➤ Das Internet verbindet eine Vielzahl lokaler Netzwerke (Intranets) in einem global ausgedehnten Raum (Stadt, Land, Kontinent) und verwendete Router für Zwischenverbindungen. Regionaler Internet Service Provider (ISP) Backbone

POP

NAP Client

Telefon System

(a)

Server Farm

Modem

(b)

Router

Dr. Stefan Bosse • Grundlagen der Informatik

K-10

Anbindung von Heimrechnern an das Internet ➤ Heimrechner (oder Heim-Intranets) werden i.A. nicht direkt an das Internet angeschlossen. ➤ Die Anbindung erfolgt über ein Modem (Telefonie, DSL, Kabel-TV) Punkt-zu-Punkt (PPP) an einen Einwahlknoten bei einem Internet-Service-Provider, der dann eine Verbindung zum Internet herstellt.

Benutzer

Internet Service Provider Modems

PC

Kreuzungspunkt

Benutzer Prozeß mit TCP/IP

Antenne

Dial-up Telefon / DSL

Endknoten

Modem TCP/IP Verbindung mit PPP

Internet Router

K-11

Routing Prozeß

Dr. Stefan Bosse • Grundlagen der Informatik

Physikalische Ebene der Netzwerkverbindungen und Topologien ➤ Die physikalische Übertragung von Daten in einem Netzwerk oder von Rechner zu Rechner kann elektrisch, optisch, und elektro-magnetisch erfolgen. ➤ Man unterscheidet drahtgebundene und drahtlose physikalische Verbindungen (optisch kann beides darstellen!) ➤ Die Daten werden i. A. seriell übertragen. ➤ Es gibt verschiedene Netzwerktopologien: sternförmig (P2P), busartig (1:N), netzartig, ringartig ➤ Drahtlose Verbindungstopologien sind i.A. sternförmig mit einer Basisstation im Zentrum Computer

Basis Draht Netzwerk Station

Kabel

Computer

Bus-Verbindung

Punkt-zu-Punkt-Verbindung

Drahtloses Netzwerk

(a)

(b)

Dr. Stefan Bosse • Grundlagen der Informatik

K-12

Ebenen der Netzwerkkommunikation und Protokolle ➤ Es gibt verschiedene Ebenen in der Kommunikation mit unterschiedlichen Protokollen (OSI Schichtenmodell) Ebene

7

Dateneinheit

Anwendung

Anwendungs Protokoll

Anwendung

APDU

Präsentation

PPDU

Schnittstelle 6

Präsentation

5

Sitzung

4

Transport

Präsentations Protokoll

Sitzungs Protokoll

Sitzung

SPDU

Transport

TPDU

Netzwerk

Packet

Daten Link

Frame

Physik.

Bit

Transport Protokoll Kommunikation Sub-Netz Schnittstelle

OSI

3

Netzwerk

2

Daten Link

1

Physik.

Netzwerk

Netzwerk

Daten Link

Daten Link

Anwendung

7

Anwendung

6

Präsentation

5

Sitzung

4

Transport

Transport

3

Netzwerk

Internet

2

Daten Link

RechnerNetzwerk

1

Physikal.

K-13

Interne Sub-Netz Protokolle

TCP/IP

Nicht vorhanden!

Rechner A

Physik. Router

Physik. Router

Rechner B

Netzwerk Ebene Rechner-Router Protokoll Daten Link Ebene Rechner-Router Protokoll Physikalische Ebene Rechner-Routerp Protokoll

Dr. Stefan Bosse • Grundlagen der Informatik

Ebenen der Netzwerkkommunikation und Protokolle (II) ➤ Die zu übertragenden Daten werden in Nachrichten und Pakete gekapselt. ➤ Jede Protokollebene fügt einen Kopf mit protokoll-relevanten Informationen zu der Nachricht hinzu, Nachrichten (M) können fragmentiert werden (M → M1,M2,...) ➤ Unterschiedliche Protokollebenen verwenden unterschiedliche Adressierungen: HTTP: Port-Adressen, z.B. 1023 TELNET FTP HTTP DNS TCP/IP: IP-Adressen, z.B. 134.102.210.2 Ethernet: MAC-Adressen, z.B. e8:ba:70:43:07:80 Protokoll

Ebene

TCP

UDP

Ebene (OSI Bez.) Anwendung

Transport

Ebene 5 Protokoll M

5

M

IP

Netzwerk

H4

4

Ebene 4 Protokoll

M

H4

ARPANET

SATNET

Netzwerk Packet radio

LAN

Physikal. + Daten Link

M

Ebene 3 Protokoll 3

H3 H4 M1

H 3 M2

H 3 H4 M1

H3 M2

H2 H3 H4 M1 T 2

H2 H3 M2 T 2

Ebene 2 Protokoll 2 H2 H3 H4 M1 T 2

H2 H3 M2 T2

1

Quelle Rechner

Dr. Stefan Bosse • Grundlagen der Informatik

K-14

Transport-Protokoll: Beispiel (I) Service-Primitiven eines einfachen Transport-Protokolls:

 Verbindungsaufbau und Abbau, Anfragen (REQ)  Datenübertragung (REQ/DATA)  Bestätigung (ACK) Netzwerk Pakettypen und ihre Bedeutung Netzwerk Pakettyp CALL REQUEST CALL ACCEPTED CLEAR REQUEST CLEAR CONFIRMATION DATA CREDIT

K-15

Art REQ ACK REQ ACK REQ ACK

Bedeutung Aufbau einer Verbindung Antwort auf CALL REQUEST Verbindung auflösen Antwort auf CLEAR REQUEST Daten Transport Empfangsbestätigung

Dr. Stefan Bosse • Grundlagen der Informatik

Transport-Protokoll: Beispiel (II) Aufbau einer Nachricht:

 Zieladresse (IP Format) DST  Quelladresse (IP Format) SRC  Nachrichtentyp TYP  Länge des Datenblocks in Bytes LEN  Datenblock DATA

Aufteilung eines Nachrichtenpaketes und Bitlänge der einzelnen Teile

DST

SRC

TYP

LEN

DATA

32

32

4

8

8*LEN

Dr. Stefan Bosse • Grundlagen der Informatik

K-16

Transport-Protokoll: Beispiel (III) Eine Verbindung kann sich in sieben verschiedenen Zuständen befinden:

 Verbindungsaufbau und Abbau  Datenübertragung

Zustände und deren Bedeutung Zustand IDLE WAITING QUEUED ESTABLISHED SENDING RECEIVING DISCONNECTING

K-17

Bedeutung Derzeit keine Verbindung CONNECT wurde ausgeführt, CALL REQUEST wurde gesendet CALL REQUEST ist eingetroffen, aber kein LISTEN bisher Die Verbindung ist aufgebaut Daten werden gesendet Daten wrden empfangen DISCONNECT ausgeführt Dr. Stefan Bosse • Grundlagen der Informatik

Transport-Protokoll: Beispiel (IV) Ein Protokollstack

CONNECT

TIMEOUT

 regelt den Verbindungsaufbau und abbau

IDLE

 und kann mit einem endlichen Zustandsautomaten beschrieben werden,

DISCONNECT

WAITING

QUEUED

CALL ACC CREDIT,

LISTEN ESTABLISHED

RECEIVE

CLEAR REQ

SENDING

DISCONNECT

 ausgehende, eingehende, und welche die weiter vermittelt werden müßen,

CALL REQ

LISTEN, CALL REQ

CLEAR REQ

 regelt die Verarbeitung von Nachrichten,

SEND

 und stellt eine Schnittstelle zwischen Netzwerk und Anwendung dar.

DATA, RECEIVING CLEAR REQ

DISCONNECTING

Dr. Stefan Bosse • Grundlagen der Informatik

K-18

Transport-Protokoll: Beispiel (V) Ein Protokollstack

 stellt eine Schnittstelle zwischen Netzwerk und Anwendung dar.  Neben den Netzwerk Primitiven (= Funktionen) auf Paketebene gibt es Primitiven für Anwendungsprogramme.  Der Protokollstack stellt Anwendungsprogrammen definierte Operationen (Funktionen) für die Verbindungskontrolle und den Datentransfer zur Verfügung. Operation LISTEN ACCEPT CONNECT SEND RECEIVE CLOSE K-19

Bedeutung Bereitschaft für Verbindungsanfragen Warte auf eine Verbindungsanfrage Verbindungsaufbau anfragen Daten über bestehende Verbindung senden Daten über bestehende Verbindung empfangen Verbindung schliessen Dr. Stefan Bosse • Grundlagen der Informatik

Programmierschnittstelle und Betriebssystem-Abstraktion ➤ Anwendungsprogramme (Prozesse) können Netzwerkkommunikation mit abstrakten Sockets durchführen (verbindungs-orientiert). ➤ Ein Socket ist dabei ähnlich einem Dateizeiger, nur daß der Kommunikationsendpunkt ein anderes Programm auf einem fremden Rechner ist (bzw. auch auf dem lokalen Rechner), der ebenfalls einen Socket für die Kommunikation verwendet.

K-20

Dr. Stefan Bosse • Grundlagen der Informatik

Programmierschnittstelle und Betriebssystem-Abstraktion (II) ➤ Ein Socket muß erzeugt werden mit der Socket Operation ➤ Ein Server-Prozeß bietet eine Socket-Verbindung mit der Listen Operation an. ➤ Ein Klienten-Prozeß verwendet die Connect Operation um sich mit einen Server-Socket zu verbinden. ➤ Der Server muß mit der Accept Operation die Verbindung akzeptieren. ➤ Klient und Server können (rohe) Daten mittels der Send und Receive Operationen austauschen.

Server

Client

Socket

Socket

Bind Listen Accept

Connect Datentransfer

Recv

Send

Datentransfer

Recv

Send

➤ Die Socket Verbindung wird mittels der Close Operation geschlossen.

K-21

Shutdown

Shutdown

Close

Close

Dr. Stefan Bosse • Grundlagen der Informatik

Programme und Programmiersprachen ZIELE ➤ Verständnis eines Programms und dessen Funktionsweise, Zusammenhang mit Rechnerarchitektur und Programmiermodell

➤ Grundlegendes Verständnis von Programmiersprachen und deren Bedeutung für den Entwurf und die Erzeugung von Programmen

➤ Unterscheidung der Eigenschaften verschiedener Klassen von Programmiersprachen: Funktional, Imperativ/Prozedural, Objekt-Orientiert, Logisch

L-0

Dr. Stefan Bosse • Grundlagen der Informatik

Programme und Programmiersprachen (I) ➤ Programme beschreiben im einfachsten Fall die Umsetzung von Algorithmen. ➤ Diese Algorithmen beschreiben eine Abbildung f: E →A von Eingabedaten E nach Ausgabedaten A. ➤ Diese Beschreibung soll 1. für den menschlichen Leser und 2. maschinell verständlich sein. ➤ Die Eingaben E und die Ausgaben A sind Daten, die durch Folgen von Bits kodiert werden. ➤ Ein Algorithmus beschreibt ein Verfahren zur Lösung eines Problems:

L-1

Dr. Stefan Bosse • Grundlagen der Informatik

Programme und Programmiersprachen (II) ➤ Programmieren, d.h. die Erstellung eines Programms, unterteilt sich in drei Teilschritte: Spezifikation Genaue Beschreibung des zu lösenden Problems und der Ein- und Ausgabedaten (Format, Kodierung, Datenmenge usw.) Algorithmus Erarbeitung eines (schrittweisen) Lösungsweges und Verfahrens. Programm Umsetzung des Algorithmus mit einer konkreten Programmiersprache mit dem Ziel, Anweisungen für eine Maschine zu erzeugen (lineare Liste von Maschinenbefehlen). Die Programmiersprache soll möglichst von technischen Einzelheiten der Maschine und eines eventuell vorhandenen Betriebssystems abstrahieren. Beim Abstraktionsgrad wird unterschieden Low-level Maschinenahe Sprache, die nur minimal die Maschine abstrahiert ➽ Programme (Quellkode) nicht portabel zwischen verschiedenen Maschinen ➽ das Programm ist wenig strukturiert. High-level Hochsprache, die maximal die Maschine abstrahiert ➽ Programme sind portabel zwischen verschiedenen Maschinen ➽ das Programm ist strukturiert.

L-2

Dr. Stefan Bosse • Grundlagen der Informatik

Programme und Programmiersprachen :: Algorithmus ➤ Ein Algorithmus ist definiert durch: 1. Die Ausführung des Algorithmus erfolgt in einzelnen Schritten. 2. Jeder Schritt besteht aus einer einfachen Grundaktion. 3. Zu jedem Zeitpunkt ist eindeutig bestimmt, welcher Schritt als nächster auszuführen ist. 4. Ein Algoritmus muß nach endlicher Zahl von Schritten terminieren. Nur bei funktionalen Systemen nachweisbar erfüllbar. ➤ Ein Algorithmus kann von einem Menschen und von einer Maschine ausgeführt werden. ➤ Ein Programm wird hingegen nur von einer Maschine ausgeführt. ➤ Algorithmen lassen sich darstellen durch: ◆ Grafische Darstellung durch Flußdiagramme und Flußgraphen, eventuell in Datenund Kontrollpfade zerlegt. ◆ Funktionsdiagramme und Bäume ◆ Abstrakte Programmiersprache mit Pseudo-Notation, die die wesentlichen Ablaufschritte verdeutlicht, aber nicht detaliert ist. ◆ Konkrete Programmiersprachen. ➤ Elementare Aktionen in einem Algorithmus: 1. Datenpfad ➽ Datenabhängigkeiten und Verarbeitung mit Funktionseinheiten 2. Kontrollpfad ➽ Ablaufsteuerung L-3

Dr. Stefan Bosse • Grundlagen der Informatik

Programme und Programmiersprachen :: Flußdiagramm ➤ Elementare Bestandteile eines Flußdiagramms:

L-4

Dr. Stefan Bosse • Grundlagen der Informatik

Flußdiagramm :: Beispiel (I) Spezifikation Es soll der größte gemeinsame Teiler T zweier Zahlen N und M bestimmt werden. N und M sind ganze Zahlen. Das Ergebnis ist ebenfalls eine ganze Zahl. Es muß der Fall N=0 oder M=0 ausgschlossen werden. Algorithmus

L-5

Dr. Stefan Bosse • Grundlagen der Informatik

Flußdiagramm :: Beispiel (II) Programmierung (Imperative Programmiersprache C)

int ggt(int N, int M) Funktion mit Operanden { int x=n; int y=M; Variablen while (x!=y) Schleife { if (x 1). ➤ Elementare Typmengen: {nat,int,real,char,string,· · ·} M-7

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Ausdrücke & Funktionen (V) Funktionstypisierung: Definitions- und Wertebereiche Name sq pyth pi

Def.bereich

Wertebereich

int real×real

int real real

Bestandteile von Funktionsdefinitionen Name sq pyth

Parameter

Rumpf

x a,b

x*x a*a+b*b

pi

3.1415

➤ Als Grenzfall von Funktionen wurden Konstanten eingeführt. Diese besitzen einen leeren Definitionsbereich und keine Parameter!

Dr. Stefan Bosse • Grundlagen der Informatik

M-8

Programmiersprachen :: Bedingte Ausdrücke (I) Bedingte Ausdrücke Entscheidungen zu treffen ist eine der zentralen Aktivitäten bei der Lösung von Problemen. Fallunterscheidungen sind bereits aus der Mathematik bekannt:

a, f alls a ≥ b max(a, b) = b, sonst 



(1)

➤ Diese Schreibweise der Mathematik wird in Programmiersprachen ähnlich beschrieben. Dazu wird für eine dual Fallunterscheidung das IF-THEN-ELSE-Konstrukt verwendet: IF bool_expr THEN expr_true ELSE expr_false Beispiel DEF max = fun a,b

→ IF a > b THEN a ELSE b

➤ Die Bedingung ist ein boolescher Ausdruck der entweder den Wert true oder false hat. Der Typ solcher Ausdrücke ist bool. ➤ Die Ausdrücke im THEN- und ELSE-Zweig müssen Werte des gleichen Typs zurückgeben. ➤ Der Ausdruck expr_true wird ausgeführt wenn bool_expr=true, expr_false bei bool_expr=false! M-9

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Bedingte Ausdrücke (II) Bewachte Ausdrücke Häufig steht man vor der Notwendigkeit, mehr als zwei Fälle zu unterscheiden. Dazu können bedingte Ausdrücke geschachtelt werden.

➤ Beispiel DEF sign = fun x → IF x > 0 THEN +1 ELSE IF x = 0 THEN 0 ELSE -1

➤ Die Lesbarkeit von geschachtelten Fallunterscheidungen ist gerade bei einer großen Anzahl von Fällen unübersichtlich! Sinnvoller ist die gleichberechtigte Mehrfach-Fallunterscheidung: DEF sign = fun x → IF x > 0 THEN +1 IF x = 0 THEN 0 IF x < 0 THEN −1

M-10

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Bedingte Ausdrücke (III) Bewachte Ausdrücke (Forts.)

➤ Mehrere Fälle können gleichberechtigt nebeneinander formuliert werden, d.h. eine Fall-Liste. Diese Variante muß aber folgende Eigenschaften erfüllen: 1. Die Bedingungen (Wächter oder Guards genannt) sollten paarweise disjunkt sein, d.h. nicht gleichzeitig gelten, 2. die Bedingungen sollten vollständig sein; es sollte also nie vorkommen, daß keiner der Fälle/Guards gilt (undefiniertes Verhalten!) ➤ Neben dieser universellen bewachten Fallunterscheidung gibt es noch wertebasierte Fallunterscheidungen, sog. Musteranpassung (pattern matching): _: MATCH expr_cond WITH Beschreibt vollständige | val1 → expr_val1 Wertemenge eines Typs | val2 → expr_val2 ➽ anonyme Variable, | _ → expr_others Wildcard-Notation! x: Variable enthält alle son➤ Beispiel: stigen Fälle von n! DEF text = fun n → MATCH n WITH | 1 → ”one” | 2 → ”two” | x → IF x > 0 THEN ”pos” ELSE ”neg” | _ → ”others” M-11

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Bedingte Ausdrücke (IV) Bedingte Ausdrücke im Flußdiagramm

Dr. Stefan Bosse • Grundlagen der Informatik

M-12

Programmiersprachen :: Strukturieren durch Teilausdrücke ➤ Ein wichtiges Hilfsmittel, um große und unübersichtliche Ausdrücke zu strukturieren, besteht darin, abkürzende Bezeichnungen für Teilausdrücke einzuführen, ähnlich der Mathematik. ➤ Lokale Deklaration: ◆ Die abkürzenden Namen werden als lokale Deklarationen eingeführt, entweder in der Form LET · · · IN · · · vor der Anwendung oder in der Form · · · WHERE · · · nach der Anwendung. ◆ Die Definition eines Namens kann sich auf andere lokal deklarierte Namen inklusive gebundenn Funktionsparametern beziehen, die Verwendung ist nur innerhalb des lokalen Kontext der Funktion möglich! ◆ Die Reihenfolge der Deklarationen spielt i.A. keine Rolle, es dürfen aber keine zyklischen Abhängigkeiten entstehen. ➤ Beispiel: Berechnung der Fläche eines Dreiecks nach der Heron’schen Formel p F∆ = s(s − a)(s − b)(s − c) mit s = a + b + c (2) 2 FUN heron : real × real × real → real DEF heron = fun a,b,c → LET s = (a+b+c)/2 IN sqrt(s*(s a)*(s b)*(s c)) DEF heron = fun a,b,c

→ sqrt(s*(s a)*(s b)*(s c)) WHERE s = (a+b+c)/2

M-13

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Tupel von Ausdrücken ➤ Die Bildung von Tupelausdrücken oder Tupeltermen dient der anonymisierten Bindung und Strukturierung von Ausdrücken bzw. Elementen. ➤ Sie erfolgt durch Bindung von Ausdrücken in einem Klammerpaar, wobei die einzelnen Ausdrücke bzw. Elemente durch Kommas getrennt werden. ➤ Tupelausdrücke sind z.B. eine Liste von Funktionsargumenten, können aber auch von Funktionen als Wertemenge zurückgegeben werden! Wird naber nur von einigen wenige Programmiersprachen unetrstützt (OCAML). ➤ Ein Tupel ist eine Gesamtheit, und kann in einzelne Ausdrücke oder Elemente mittels Musteranpassung (pattern matching) wieder zerlegt werden: LET t = (v1,v2,v3,...) IN LET (b1,b2,b3,...) = t IN == MATCH t WITH (b1,b2,b3,...) Beispiele: FUN sqrts : real → real × real DEF sqrts = fun x → (sqrt(x), sqrt(x)) DEF (sq1,sq2) = sqrts(2.0) DEF sq12 = sqrts(2.0) ... LET (s1,s2) = sq12 IN ... FUN min : real × real → real DEF min = fun a,b → IF a > b THEN b ELSE a M-14

→ ...

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Polymorphie ➤ Sinn einer Typisierung von Ausdrücken und Funktionen ist die Erkennung von Programmierfehlern. ➤ Häufig kann es aber sinnvoll sein, Funktionen bei deren Definition noch nicht auf einen konkreten Typ zu binden, sondern dieses erst bei der Anwendung durchzuführen. ➤ Beispiel sind arithmetische Operator-Funktionen wie die Addition, die wenigstens auf den Datentyp INT und REAL anwendbar sind. ➤ Bei einer strengen und konkreten Typisierung müsste man aber zwei Funktionen definieren, jeweils für den entsprechenden Datentyp: FUN add_int : int × int → int FUN add_real : real × real → real DEF X = add_int (1,2); DEF Y = add_real (pi,2.0) ➤ Praktischer ist die Definition einer universellen Funktion, die auf verschiedene Datentypen angewendet werden kann, man spricht von polymorphen Funktionen (Polymorphie). FUN add : α × α → α DEF X = add (1,2); DEF Y = add (pi,2.0) ➤ Der polymorphe Typ α (bzw. jeder griechische Buchstabe) umfaßt eine nicht näher spezifizierte Datentypmenge, z.B. {INT,REAL}. M-15

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Rekursion ➤ Rekursion bildet das wichtigste Prinzip bei der Formulierung von Algorithmen. Dabei wird das gleiche Berechnungsmuster geschachtelt immer wieder angewendet, allerdings jedesmal auf eine reduzierterer Menge von Daten, bis nur noch ein elementares Datum vorliegt. ➤ Bei rekursiven Funktionen kann eine Funktion sich in ihrem Funktionsrumpf selbst aufrufen. ➤ Klassisches aber ”langweiliges” Beispiel: die Fakultätsfunktion, die mathematisch ausgedrückt als Iterationsgleichung lautet: Mathematisch: fac(n)=fac(n 1)*n FUN fac: nat → nat DEF fac = fun n → IF n = 0 THEN 1 ELSE n*fac(n 1)

➤ Eine rekursive Funktion bedarf eines Terminierungskriteriums, ansonsten hat man eine endlose Verschachtelung von Funktionen, die bei einer Maschine zu einem Speicherfeh-ler führen muß (endlicher Speicher, Funktionsaufrufe benötigen jedesmal Speicherplatz), im Beispiel ist es der bedingte Ausdruck mit der booleschen Bedingung n=0. ➤ Beispiel: fac(3) ⇒ fac(2) ⇒ fac(1) ⇒ M-17

3*2 2*1 1*1

⇔ fac(fac(fac(fac(0))))

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen ➤ Datenstrukturen dienen zur strukturierten Verabeitung und Handhabung von Daten. ➤ Datenstrukturen sind wie Typen reine Programmierparadigmen (∈ Programmiermodell), und finden sich im Maschinenprogramm nicht wieder! ➤ Konstruktion von Datenstrukturen setzen sich wie bei Funktionen aus elementaren Konstruktionsprinzipen zusammen: Funktionen ◆ Funktionsdefinition ◆ Funktionsapplikation ◆ Funktionskomposition ◆ Rekursion Datenstrukturen ◆ Typdefinition, Typapplikation (Objekterzeugun), Typkomposition ◆ Produktbildung ➽ Tupelbildung, Aggregation ◆ Summenbildung ➽ Variantenbildung ◆ Aufzählung ◆ Rekursion ➤ Prinzip der Programmierung: Arbeite intensiv mit Datentypen! Wo immer logisch zusammenhängende Werte im Programm auftreten, sollte man für sie einen eigenen Typ einführen! M-18

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen :: Produktbildung (I) ➤ Logisch zusammenhängende Daten werden in einer Gruppe namentlich und typisiert zusammengefaßt durch Einführung einer neuen Datenstruktur. ➤ Diesen Vorgang bezeichnet man als Aggregation. Da neue Typen, und nicht neue Datenobjekte definiert werden, wird anstelle des DEF Schlüsselwortes TYPE verwendet: TYPE typename = Constr(el1: el1type, el2: el2type,...) TYPE point = Point(x: real, y: real) TYPE circle = Circle(center:point, radius: real) TYPE datum = Datum(tag:char, monat:string, jahr:nat) ➤ Es können Daten mit verschiedenen Datentypen zusammengefaßt werden. Jedes Strukturelement ist im Gegensatz zum anonymen Tupel namentlich bezeichnet. ➤ Durch die Deklaration eines neuen Produkttyps wird implizit erzeugt: Sorte (typename) Der neue Typname, in den Beispielen point und datum. Konstruktorfunktion (Constr) Eine Funktion, die ein neues Datenobjekt von diesem Typ erzeugt, in den Beispielen gleichnamig Point und Datum: FUN Point : real × real → point FUN Datum : char × string × nat → datum Dr. Stefan Bosse • Grundlagen der Informatik

M-19

Programmiersprachen :: Datenstrukturen :: Produktbildung (II) ➤ Durch die Deklaration eines neuen Produkttyps wird implizit erzeugt (Fortsetz.): Selektorfunktionen/operatoren (el1,...) Funktionen (Operatoren), mit denen die einzelnen Strukturelemente el1, el2, ... in Ausdrücken ausgewählt werden können, in den Beispielen x,y,tag...:

FUN x: point → real FUN y: point → real FUN tag : datum → char Beispiele: DEF p = Point(x=10.0,y=20.0) DEF s = sq(x(p))+sq(y(p)) Die Verwendung von Selektorfunktionen kann durch eine isomorphe vereinfachte Darstellung ersetzt werden (z.B. ML, C):

FUN sel : typeobj → element ⇔ typeobj.sel Beispiele: DEF s = sq(p.x)+sq(p.y) DEF root = fun p → p.x=0 AND p.y=0 M-20

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen :: Produktbildung (III) ➤ Beispiele (* Typdeklaration *) TYPE color = Color(r:int,g:int,b:int) TYPE point = Point(x: real, y: real, col: color) TYPE circle = Circle(center:point, radius: real) (* Definition von Datenobjekten *) DEF p1 = Point(x=10.0,y=13.0,col=Color(100,100,100)) DEF p2 = Point(x=20.0,y=20.0,col=Color(100,100,100)) DEF c = Circle(center=p1,radius=10.0) DEF is_gray = fun col → col.r = col.g AND col.r = col.b AND col.g = col.b FUN is_gray : color → bool DEF lineto = fun p1,p2 → LET REC line = fun x,y → draw(x,y) IF x < p2.x THEN linex(x+1,y) ELSE IF y < p2.y THEN line(x,y+1) IN line(p1.x,p1.y) DEF is_circle_gray = is_gray(c.center.col) M-21

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen :: Summenbildung (I) ➤ Zusammenfassung von Elementen in einem Typ, die inhaltlich Gemeinsamkeiten besitzen (Semantik), aber strukturell verschieden aufgebaut sind. ➤ Beispiel: Zusammenfassung von Zahlen der Typen {nat,int,real} zu einem übergeordneten Typ zahl. ➤ In dieser Situation lassen sich die Elemente des Typs in verschiedenen Varianten klassifizieren (disjunkte Vereinigung im Sinne der Mengenlehre): TYPE typname = Constr1(el11:el11typ, el12:el12typ ...) | Constr2(el21:el21typ, ...) ... | ConstrN(elN1:elN1typ, ...) Beispiele: TYPE figure = Line(l1: point, l2: point) | Circle(center: point,radius: real) | Rect(c1: point, c2: point) TYPE zahl = Real(real) | Nat(nat) | Int(int) DEF r1 = Real(3.14) DEF i1 = Int(10)

M-22

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen :: Summenbildung (II) ➤ Die Angabe eines Elementnamens bei einem einzigen Typelement kann optional sein (z.B. Typ zahl). ➤ Die Anwendung solcher Summentypen in Ausdrücken erfordert explizite oder implizite musterbasierte Ausdrücke bzw. Funktionen mit dem MATCH-Konstrukt: DEF farbe = fun f → MATCH f WITH | Line (p,_) → p.col | Circle (p,_) → p.col | Rect(p,_) → p.col FUN add_real: real×real→real; FUN add_int: int×int→int FUN add_nat: nat×nat→nat DEF add = fun a,b → MATCH a WITH | Real(ra) → MATCH b WITH | Real(rb) → add_real(ra,rb) | _ → ERROR! | Int(ia) → MATCH b WITH | Int(ib) → add_int(ia,ib) | _ → ERROR! ... M-23

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen :: Aufzählungen ➤ Einführung eines neuen Aufzählungs-Typs, der aus einer (kleinen) Anzahl von symbolischen Elementen besteht. ➤ Entspricht dem Summentyp, wobei alle Typelemente vom gleichen (elementaren) Datentyp (oder abstrakt) sind, und die einzelnen Typelemente nur durch einen Werte oder Namen repräsentiert werden. ➤ Symbolische Werte können mit Mustersuche (match x with s) und direkten Vergleich (x=s) verglichen werden.

➤ Beispiel: TYPE day = montag | dienstag | mittwoch | donnerstag | freitag | samstag | sonntag TYPE nums = 1 | 2 | 3 | 4 TYPE switch = ”On” | ”Off” TYPE color = red | blue | green DEF mycol = red DEF is_red = fun col → MATCH col WITH | red → true | blue | green → false DEF is_red2 = fun col → IF col = red THEN ”Yes it0s red” ELSE ”Other color” M-24

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Datenstrukturen :: Arrays (I) ➤ Arrays sind Produkttypen, hier beschränkt auf Elemente vom gleichen Datentyp! ➤ Das Programmiermodell eines Arrays hat seinen Urpsprung im speicherbasierten (imperativen) Programmiermodell, sie sind ein Zugeständnis an die NeumannRechnerarchitektur. ➤ Ein Array ist dabei in eine Anzahl N von Datenzellen (≡Elemente gleichen Datentyps) unterteilt (wie ein Datenspeicher), die einzeln selektiert werden können. Ein Array wird daher i.A. direkt im Programmspeicher der Maschine abgebildet, und einzelne Arrayzellen können mittels einfacher Adreßrechnung erreicht werden. E1 WR ➽

➽ RD

E2

··· EN

➤ Man kann Arrays aber auch als spezielle Funktionen auffassen! Der Definitionsbereich (d.h. der Wertebereich des Funktionsparameters) setzt sich aus Intervallen der ganzen Zahlen zusammen, z.B. {1,2,3,· · ·,N}. Der Startindex kann aber beliebig sein, abhängig von der Programmiersprache (C fordert generell für I1=0!). Arrays sind aber statische Funktionen die als tabellarische Auflistung ihrer Werte vorliegen. Dr. Stefan Bosse • Grundlagen der Informatik

M-25

Programmiersprachen :: Datenstrukturen :: Arrays (II) ➤ Der Inhalt von Arrayelementen kann jederzeit verändert werden, so daß ein Array den Zustand eines Programms bestimmt, und daher imperativen Charakter, und nicht funktionalen Charakter besitzt! Arrays machen i.A. nur Sinn mit Variablen und Schleifenkonstrukten in imperativen Programmiermodellen. ➤ In funktionalen Sprachen müssen daher Arrays immer mit Werten initialisiert werden, da das Programmiermodell immer gültige Werte von Variablen und Ausdrücken verlangt! Ein nicht initialisertes Array (wie z.B. in C üblich) ist undefiniert in einem funktionalen und nicht zustandsorientierten Kontext. ➤ Definition eines Arrays: TYPE Array α ARRAY arname = artype[interval] := {INIT} interval == A TO | DOWNTO B Beispiele: ARRAY data = real[1 TO 4] := {0.0,0.0,0.0,0.0} VAL data : Array real

TYPE point = Point(x: real, y: real) DEF nilpt = Point(x=0.0,y=0.0) ARRAY points = point[0 TO 99] := ALL nilpt ➤ Elementselektion in Ausdrücken: arname.[index] == get(array,index) DEF x1 = data.[2] == get(data,2) M-26

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Variablen (I) ➤ Bisherige Ausdrücke waren konstant in ihrem Wert oder variabel mit Funktionen durch deren Funktionsparameter. ➤ Streng genommen sind wertverändernde Anwendungen auf einzelne Zellen von Arrays im funktionalen Modell keine Änderungen der Werte von Zellen, sondern jede Änderung eines Arrayelements führt zur Erzeugung eines komplett neuen Arrays: update(array,index,value) , array.[index] := value FUN update : Array α × nat × α → Array α ... LET data0 = update(data,2,3.0) IN ... ➤ Erst im Speichermodell können einzelne Elemente eines Arrays verändert werden: set(array,index,value) == array.[index] := value FUN set : Array α × nat × α → unit ... data.[2] := 3.0 ... ➤ Da in der Realität durch einen Compiler aus einem Programm das mit einem funktionalen Modell beschrieben wird ein Maschinenprogramm wird, bleibt es dem Compiler überlassen, wie er mit dieser Situtaion umgeht (Optimierung; Erzeugung von neuen Datenobjekten ist eine teure Operation: Speicher, Laufzeit)

Dr. Stefan Bosse • Grundlagen der Informatik

N-1

Programmiersprachen :: Variablen (II) ➤ Variablen können äquivalent zu Arrays auf zwei Arten modelliert werden: Referenzvariablen Durch Referenzen auf Datenobjekte bzw. Ausdrücke/Elemente, in Anlehnung an das funktionale Modell, wo Datenobjekete unveränderlich sind, und nur die Referenz variabel ist, aber immer auf ein vorhandenes Datenobjekt verweist (Zeiger):

Definition einer Ref.var. ⇒ Zuweisung einer Referenz ⇒ Dereferenzierung ⇒ DEF x = REF 1 DEF a = !x + 10 x := a ⇒ x ≡ REF a ≡ 11

DEF refvar = REF value refvar := expr !refvar

➥ Im Beispiel enthält x einen Zeiger zuerst auf den konstanten Wert 1, dann auf den Ausdruck (unveränderliche ”Variable”) a=11. ➥ Die Dereferenzierung ersetzt die Referenzvariable mit dem aktuell referenzierten Objekt (Ausdruck/Wert/Variable)

N-2

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Variablen (II) ➤ Variablen können äquivalent zu Arrays auf zwei Arten modelliert werden: Speichervariablen Durch echte veränderliche Ausdrücke/Elemente, die nur mit dem Speichermodell beschrieben werden können.

Definition einer Variablen ⇒ Zuweisung eines Wertes ⇒ Wertermittlung ⇒ DEF x = VAR 1 DEF a = x+10 x ← a; DEF b = x + 1 ⇒ x ≡ a ≡ ⇒ b ≡ 12

DEF var = VAR value var ← expr var

DEF x = VAR 1 DEF y = VAR x y ← 55; ➥ y = 55 , x = 1

11

DEF x = REF 1 DEF y = REF x !y := 2; ➥ !y = 55 ,!x = 55

N-2B

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Variablen (III)

N-3

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Schleifen und Rückwirkung ➤ Rein funktionale Modelle beschreiben Datenpfade, d.h. Abhängigkeiten und Zusammenhänge von Daten und Ausdrücken. Iterative Abarbeitung eines Problems mittels Funktionen und Funktionsrekursion. ➤ Imperative Programmierung bedeutet zusätzlich Beschreibung von Kontrollpfaden, d.h. der Ablaufsteuerung eines Programms. ➤ Imperative Programmierung kennt neben Funktionen noch Schleifen (des Kontrollflusses!) als ein Mittel, ein Programmteil (-block) wiederholt auszuführen: Zählschleife Eine Schleife mit einem Schleifenzähler, der bei jedem Durchlauf des Schleifenblocks inkrementiert oder dekrementiert wird. Der Wert des Schleifenzählers kann im Schleifenblock abgerufen werden. FOR i = a TO b DO ... DONE; Bedingte Schleife Ein Schleifenblock wird solange wiederholt ausgeführt, bis eine Abbruchbedingung (boolescher Ausdruck) erfüllt ist.

WHILE expr DO ... DONE;

Dr. Stefan Bosse • Grundlagen der Informatik

N-4

Programmiersprachen :: Bedingte Schleife (I) ➤ Eine bedingte Schleife führt Anweisungen A1,A2,· · · im Schleifenblock S wiederholt aus, solange ein boolescher Ausdruck B im Schleifenkopf den Wert wahr ergibt. WHILE B DO A1; A2; ... DONE; ➤ Beispiel: LET i = VAR 0 IN WHILE i < 3 DO i ← i + 1; DONE; ⇔ i ← i+1; (* i == 1 *) i ← i+1; (* i == 2 *) i ← i+1; (* i == 3 *)

N-5

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Bedingte Schleife (II) ➤ Eine bedingte Schleife setzt Speichervariablen und das Speichermodell voraus, da bei der Schleifeniteration eine Zustandsänderung des Schleifenausdruckes erreicht werden muß. ➤ Bisher konnten Werte von Ausdrücken nur nach deren Zuweisung abgerufen werden. Bei einer Schleife muß es aber eine Rückwirkung geben, da der Schleifenausdruck (Zeile 1) VOR der zustandsverändertenden Zuweisung (Zeilen 4,5) auftritt (man spricht auch von Seiteneffekten): 0: 1: 2: 3: 4: 5: 6:

LET i,j,k,... = VAR 0 IN exprS: bool. Ausdruck mit i,j,.. WHILE exprS(i,j,k,...) DO ... i ← exprI; exprI: neuer Wert von i j ← exprJ; DONE;

➤ Beispiel: LET i,j = VAR 0, VAR 0 IN WHILE (i+j) < 10 (* i und j werden gelesen *) DO i ← i + 1; (* i wird verändert, j nicht! *) DONE; N-6

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Bedingte Schleife (III) ➤ Das letzte Beispiel zeigt die Problematik und die Risiken von Schleifen bei der Programmierung: ◆ Die Abbruchbedingung B=false kann von einer Vielzahl von Variablen abhängen, die sich auf verschiedenste Weise durch Ausdrücke innerhalb des Schleifenkörpers än-dern können. ◆ Das Terminierungskriterium B=false ist im Gegensatz zur Funktionsrekursion nicht direkt ersichtlich, insbesondere die Frage der Erfüllbarkeit ist durch die Wertrückwirkung nicht immer beantwortbar. ◆ Das führt zur Gefahr von Endlosschleifen, bei denen das Terminierungskriterium niemals erfüllt ist: LET i,j = VAR 0, VAR 0 IN WHILE j < 10 (* j wird gelesen *) DO i ← i + 1; (* i wird verändert, j nicht! *) DONE;

N-7

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: Zählschleife (I) ➤ Eine Zählschleife führt Anweisungen A1,A2,· · · im Schleifenblock S wiederholt aus, solange sich ein Schleifenzähler I innerhalb eines vorgegebenen Intervalls befindet, d.h. es gibt indirekt einen booleschen Ausdruck B im Schleifenkopf und einen Ausdruck E am Ende des Schleifenblocks S, der den Schleifenzähler inkrementiert oder dekrementiert: FOR I = A TO | DOWNTO B hSTEP Di DO A1; A2; ... DONE; ➤ Der Schleifenzähler ist innerhalb des Schleifenblocks als lokale Variable verfügbar (kann gelesen werden). ➤ Beispiel: FOR i = 1 TO 3 DO j ← j + i; DONE; ⇔ j ← j + 1; j ← j + 2; j ← j + 3; Dr. Stefan Bosse • Grundlagen der Informatik

N-8

Programmiersprachen :: Zählschleife (II) ➤ Eine Zählschleife kann in eine bedingte Schleife transformiert werden, indem der Schleifenzähler durch eine Speichervariable (TYPE INTEGER) realisiert wird, die Schleifenvariable vor der Schleife initialisiert wird, und am Ende des Schleifenblocks ein Ausdruck zur Änderung des Schleifenzählerwertes hinzugefügt wird: FOR I = A TO | DOWNTO B STEP D DO A1; A2; ... DONE; ⇔ LET I = VAR 0 IN

I ← A; WHILE I < B DO A1; A2; ... DONE; I ← I +/− D;

N-9

(* +:TO −:DOWNTO *)

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C ZIELE ➤ Anwendung und Abbildung der bereits eingeführten Programmierparadigmen auf die imperative Programmiersprache C

➤ Verständnis des Speichermodells und Speichervariablen als zentrales Programmiermodell

➤ Praxisnahe Anwendung einer höheren Programmiersprache für die strukturierte Programmentwicklung

O-0

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C [RRZN98] ➤ Die Entwicklung der Programmiersprache C ist eng mit der Entwicklung des Betriebssystems UNIX verbunden. Die Anfänge sind in den Jahren um 1970 datiert (Dennis Ritchie). ➤ C ist eine klassische imperative Programmiersprache mit mitteleren Abstraktionsgrad bezüglich Maschine und Betriebssystem: basiert auf Speichermodell. ➤ Wichtige Elemente eines C-Programms: ◆ Funktionen ◆ Blöcke ◆ Typen ◆ Anweisungen ◆ Variablen, Arrays und Strukturen (benutzerdefinierte Typen) ➤ Zeichensatz (zulässige Zeichen): A..Z,a..z,0..9 Leerzeichen, Zeilenendzeichen (NL/CR) ()[]{} +−*/ %⊥~&|_=!?#\,.;:0 ” ➤ Bezeichner und Namen: ➥ Bezeichner dienen zur eindeutigen Identifizierung von Objekten in einem Programm. Ein Objekt ist in C ein Speicherbereich, der aus einer zusammenhängenden Folge von Bytes bestehen muß. O-1

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C (II) ➤ Für Bezeichner in C-Programmen gilt: ◆ Ein Bezeichner besteht aus einer Folge von Buchstaben, Ziffern oder dem _ Zeichen, wobei das erste Zeichen keine Ziffer sein darf. ◆ Ein Bezeichner darf beliebig lang sein, wobei aber nur eine besteimmte Länge signifikant ist (abhängig von C-Implementierung/Compiler) ◆ Schlüsselwörter dürfen nicht als Bezeichner verwendet werden. ➤ In C-Programmen sind Name Bezeichner von Variablen, Funktionen und Typen. ➤ Bei Namen unterscheidet man interne Namen die nur innerhalb einer Quellcode-Datei gültig und sichtbar sind, und externe Namen die im gesamten Programmkontext gültig und sichtbar sind. ➤ Bei internen Namen sind die ersten 31 Zeichen signifikant, es wird zwischen Klein- und Großschreibung unterschieden, bei externen Namen sind mindestens die ersten 6 Zeichen signifikant (Unterscheidung Groß- und Kleinschreibung ist abhängig von C-Implementierung). O-2

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Typen (I) ➤ C ist eine typsisierte Programmiersprache, d.h. alle in einem C-Programm verwendeten Objekte besitzen einen Typ. ➤ Die Typen von Variablen und Funktionen müssen daher deklariert werden. ➤ Elementare Datentypen: Integer-Typ int Verwendung: 1. Ganzzahlige Werte unsigned int Kodierung der natürlichen Zahlen ohne Vorzeichen signed int (default) Kodierung der ganzen Zahlen (positiv & negativ), 2-er-kompl. Darstellung! short int Integer-Zahl mit kleinem Werte-Intervall (i.A. Datenbreite 2 Byte) long int Integer-Zahl mit großem Werte-Intervall (i.A. Datenbreite 4-8 Byte) 2. Bit-Vektoren (boolesche Operationen) 3. Boolesche Werte (ersetzt nicht vorhandenen Typ bool). Nur ein Bit wird verwendet!

O-3

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Typen (II) ➤ Elementare Datentypen (Forts.): Character-Typ char ➥ Datenbreite entspricht kleinster logischer Speicherzellengröße (1 Byte) Verwendung: 1. Ganzzahlige Werte unsigned char Kodierung der natürlichen Zahlen ohne Vorzeichen, Datenbreite 1 Byte signed char Kodierung der ganzen Zahlen (positiv & negativ), 2-er-kompl. Darstellung, Datenbreite 1 Byte! 2. Textzeichen 3. Bit-Vektoren (boolesche Operationen) 4. Boolesche Werte (ersetzt nicht vorhandenen Typ bool). Nur ein Bit wird verwendet! Fließkomma-Typ float/double/long double Darstellung reeller Zahlen (positiv&negativ) mit Fließkomma-Darstellung. Datenbreite i.A. 4 Byte (float) und 8 Byte (double).

O-4

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Typen (III) ➤ Elementare Datentypen (Forts.): Leerer Typ void Der void-Typ ist ein besonderer Typ, er besitzt keinen Wert und auf ihm sind keine Operationenen definiert. Der Datentyp void steht für eine leere Menge. Er wird in folgenden Kontext verwendet: Zeiger Typ-anonyme Referenzen auf Datenobjekte, d.h. eine Speicheradresse ohne konkreten Datentyp. Funktionen Als ”Typangabe” in einer parameterlosen Funktion, d.h. es wird expliziz das Fehlen von Parametern in einer Funktionsdeklaration angegeben. Prozeduren In C gibt es nur Funktionen. Soll eine Funktion keinen Rückgabewert liefern, d.h. eine Prozedur, muß der Rückgabetyp der Funktion void sein.

O-5

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Variablen (I) ➤ Variablen sind benannte Datenkontainer, die durch das Speichermodell beschrieben werden. Eine Variable ist gekennzeichnet durch: Name oder Referenz Gültiger Bezeichner zusammengesetzt aus Buchstaben, im Speichermodell eine Speicheradresse im Hauptspeicher. Behälter Eigentlicher Datenspeicher der Variable. Wert Der Inhalt der Variable. Typ Datentyp der Variable. Der Datentyp ist zum einen ein Programmierparadigma, und dient der Unterstützung des Programmierers zur Vermeidung von Dateninkonsistenzen, zum anderen bestimmt er die Größe des Speicherbereichs. ➤ Definition und Typdeklaration einer Variablen mit dem Namen v eines bestimmten Datentyps vartype: Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ⇔ vartype v h=valuei; (Definition) DEF v = VAR value ⇔ extern vartype v; (Deklaration) VAL v : VAR type

O-6

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Variablen (IB) ➤ Die Referenz ist unveränderliches Kennzeichen im Gegensatz zum Wert einer Variablen. Die Referenz bestimmt die Identität einer Variablen. Es werden zwei Modelle von Variablen unterschieden: Wert- oder Kopiersemantik Die Referenz identifiziert umkehrbar eindeutig einer Variable. D.h. zu jeder Referenz existiert genau ein Behälter. Eine Schreiboperation ändert den Wert der Variable. Referenzsemantik Mehrere Referenzen können auf denselben Behälter zeigen. Eine Schreiboperation ändert gleichzeitig den Wert aller durch ihre Referenzen unterschiedenen Variablen, die auch zuvor den gleichen Wert besaßen. ➤ C unterstützt sowohl Wert wie Referenzsemantik! D.h. Variablen deren Namensreferenz eindeutig und einmalig einen Behälter zuordnet, und Variablen mit unterschiedlichen Namensreferenzen, aber alle auf den gleichen Behälter verweisen ➽ Zeiger (Pointer)

O-7

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Variablen (II) ➤ Da C-Variablen direkt einem Speicherbereich zugeordnet werden, gekennzeichnet durch 1. die erste Speicheradresse und 2. durch die Größe des Speicherbereichs, kann die Speicheradresse ℘(v) mittels eines Adreßoperators ermittelt werden: Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− vartype v; (Definition) ? ⇔ (Adresse) &v (Größe) sizeof(v) ➤ Variablen kann ein Wert zugewiesen werden (linke Seite eines Ausdrucks LHS) oder der Wert einer Variable kann gelesen werden (rechte Seite eines Ausdrucks RHS): Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ⇔ v = hexpri; (Wertzuweisung) v ← hexpri; x ← hv∈expri; ⇔ x = hv∈expri; (Wert lesen)

Dr. Stefan Bosse • Grundlagen der Informatik

O-8

Programmiersprachen :: C :: Variablen (III) ➤ Beispiele Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ⇔ int x=0; (Definition) DEF x = VAR 0 x ← 0; ⇔ x = 0; (Zuweisung) x ← x + 1; ⇔ x = x + 1; (Ausdruck) ➤ Neben den eigentlichen Datenvariablen gibt es explizite Referenzobjekte, die auf ein Datenobjekt zeigen (es referenzieren). In C bezeichnet man solche Referenzobjekte als Zeiger (Pointer). ➤ Ein Zeiger ist in C selbst eine Variable. Sie besitzt einen Behälter, der Speicherzellen belegt! Der Wert des Behälters ist die Speicheradresse eines Datenobjektes!

O-9

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Variablen (IV) ➤ Definition, Deklaration und Verwendung von Zeigern: Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ⇔ vartype x; x = v0; DEF x = VAR v0 ⇔ vartype *xp; (Definition Zeiger) DEF xr = REF x xp=&x; (Zuweisung Zeiger) xr := v1; ⇔ *xp = v1; (Wertzuweisung) ⇔ y = *xp; (Werterhalt) DEF y = !xr Deklaration: Bekanntgabe einer Variablen, Name und Datentyp; Definition: Deklaration mit gleichzeitiger Belegung von Speicherressourcen ➽ Erzeugung des Behälters!

➤ Beispiele: Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− float u; u=3.14; ⇔ DEF u = VAR 3.14 DEF ur = REF u ⇔ float *up; up=&u; ur := 2*3.14; ⇔ *up = 2*3.14; ⇔ y = *up; DEF y = !ur ➥ y hat jetzt den Wert 6.28!!! O-10

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Lebensdauer von Variablen ➤ Variablen können in C einen begrenzten Kontext besitzen (Lokalität), in denen Variablen sichtbar sind bzw. Speicherzellen belegen. Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− { /* Block 1 */ DEF a = vartype a=v1; LET b = VAR v2 IN (expr b) { /* Block 2 */ vartype b=v2; ... expr b... }; ... }; ➤ Ein lokaler Kontext wird in C durch ein Klammerpaar {} eingeführt. Die Variable a ist im gesamten nachfolgenden Kontext sichtbar, wird aber im ersten Block durch eine lokale Variable überdeckt, die Variable b hingegen nur innerhalb des zweiten Programmblockes! Beispiel: {int a=0; if (a==0) {int a=2;a=a+2;} else {int b=3;a=b+1;} };

O-11

Dr. Stefan Bosse • Grundlagen der Informatik

Programmiersprachen :: C :: Zusammengesetzte Datentypen (I) ➤ Einsortige Datenstrukturen: Arrays (Feldtyp) ⇔indizierte Variable. Definition und Verwendung in Ausdrücken: Pseudo−Notation ⇔ C−Notation −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− type name[size]; ARRAY name = type[size] := {v1,v2,...}; name.[i] ← expr; name[i] = expr; LHS ← expr(name.[i]); LHS = expr(name[i]); ➤ Der Typ eines Feldes ist durch seinen Elementtyp und seinen Indextyp gekennzeichnet. Der Indextyp muß ein ordinaler Typ sein, d.h. entweder ganzzahlig oder mit diesem verträglich sein, z.B. eine endliche Menge von Namen {x,y,z,· · ·}. ➥ C unterstützt nur ganzzahlige Werte. Das erste Element eines Arrays hat immer Index 0! ➥ Der Elementdatentyp kann beliebig sein, muß aber bei der Definition festgelegt sein. i=0

1

2

3

4

Speicheradresse →

5

6

7

≈ Index

Dr. Stefan Bosse • Grundlagen der Informatik

O-12

Programmiersprachen :: C :: Zusammengesetzte Datentypen (II) ➤ Einsortige Datenstrukturen: Arrays (Feldtyp) ⇔indizierte Variable. Beispiele in C: int x; float yr[10]; int ar[100]; char str[8]=”ROBOTIK”; ... ar[0] = 0; for(x=1;xs_tail=s−>s_tail−1; return x; };

Dr. Stefan Bosse • Grundlagen der Informatik

Stapel- und Schlangenspeicher (VI) B. Schlangenspeicher (Queue)

➤ Spezialfall einer Liste mit den Operationen: {Push≡PushHead,Pop≡PopTail}. ➤ Element, das zuerst in die Schlange eingefügt wurde (PushHead) (das älteste), wird auch als erstes wieder entfernt oder gelesen (PopHead). Man spricht von einem FirstInFirstOut-Speicher (FIFO). ➤ Zugriff auf FirstIn-FirstOut-Speicher (FIFO):

➤ Bekanntes Beispiel: Pufferspeicher bei der Datenübertragung zwischen zwei Geräten mit unterschiedlicher Datenverarbeitungsgeschwindigkeit. Implementierung häufig mit Arrays. R-6

Dr. Stefan Bosse • Grundlagen der Informatik

Stapel- und Schlangenspeicher (VII) B. Schlangenspeicher (Queue)

➤ Beispiel: Der Sender überträgt 1000 Byte innerhalb einer Zeitdauer von 1ms → Datenrate beträgt 1MByte/s. Der Empfänger kann aber nur eine Datenrate von 0.5 MBytes/s verarbeiten, d.h. er benötigt 2ms, um die Daten aus dem FIFO zu lesen, oder der Empfänger ist kurzzeitig mit anderen Operationen beschäftigt. Produzenten:Push Konsumenten:Pop

➤ ADT Schlangenspeicher TYPE queue = Queue( elements: ARRAY elementtype[1..N]; head: INTEGER; tail: INTEGER; )

tail: wie bei Stack für Push/Produzent head: für Pop/ Konsument

PRO Push = FUN Q,x → next ← (Q.tail MOD N)+1; (* für Bereich 1..N *) IF next = Q.head AND NOT Q.head=Q.tail THEN FEHLER Full; Q.elements[Q.tail] ← x; Q.tail ← next; Dr. Stefan Bosse • Grundlagen der Informatik

R-7

Stapel- und Schlangenspeicher (VIII) B. Schlangenspeicher (Queue)

➤ ADT Schlangenspeicher (Forts.) DEF Pop = FUN Q → IF Q.tail = Q.head THEN FEHELR Empty; x ← Q.elements[Q.head]; Q.head ← (Q.head MOD N) + 1; → x ◆ DEF Init = FUN Q → Q.head ← 1; Q.tail ← 1;

R-8

Dr. Stefan Bosse • Grundlagen der Informatik

Skip-Listen (I) ➤ Lineare Listen benötigen Θ(N) Operationen bzw. Iterationen für die Suche von Listenelementen. Der Wert Θ() gibt eine Größenordnung an, die im ungünstigsten Fall benötigt wird. Sie dient der Vergleichbarkeit der Effizienz zwischen Algorithmen. Eine Suchoperation kann Voraussetzung für Einfüge- und Löschoperationen sein. ➤ Sind die Listenelemente so angeordnet, daß der Suchschlüssel, z.B. eine Integer-Zahl, auf- oder absteigend sortiert ist, ist eine Bereichsstrukturierung der Listenelemente anhand ihres Schlüssels sinnvoll. ➤ Unterteilung einer Liste in (sortierte) Teillisten:

Dr. Stefan Bosse • Grundlagen der Informatik

R-9

Skip-Listen (II) ➤ Bereichsstrukturierung einer Liste mit Skip-Struktur. Die Arrays der Typenstrukturen sind parametrisiert. Der Parameter ist M=höhe. TYPE skipelement = Skipelement( data: datatype; key: keytype; next: ARRAY ↑skipelement[1..M]; höhe: INTEGER; ) TYPE skipliste = Skipliste ( head: ARRAY ↑skipelement[1..M]; ) ➤ Die Listenelemente werden so angeordnet, daß Bereiche des Schlüssels bei der Suche übersprungen werden können. ➤ Bereichsstrukturierung ist ein nicht vollständig bestimmtes Problem, d.h. es gibt eine Vielzahl von Anordnungsmöglichkeiten in Abhängigkeit von der Skip-Tiefe (bzw. Höhe). ➤ Bereichsstrukturierung ist ein nicht vollständig bestimmtes Problem, d.h. es gibt eine Vielzahl von Anordnungsmöglichkeiten in Abhängigkeit von der Skip-Tiefe (bzw. Höhe).

R-10

Dr. Stefan Bosse • Grundlagen der Informatik

Skip-Listen (III) ➤ Jedes Listenelement ist durch einen Zeiger auf Niveau 1 (Erste Zelle des Arrays next) mit dem nächstfolgenden Listenelement verbunden. ➤ Jedes Listenelement der höheren Stufen überspringt eine Anzahl S von Listenelementen, und besitzt in Abhängigkeit der Stufe U Zeiger auf die nächsten Elemente der Stufen 1..U. ➤ Als Kopf der Liste kann alternativ ein leeres Listenelement mit maximaler Höhe h verwendet werden. Perfekte Skip-Listen

➤ Vollständig sortierte Liste: Jedes 2i-te Element hat einen Zeiger auf das 2i-Positionen weiter rechts entfernte Element für jedes i = 0..log 2 N . N ist dabei die Anzahl der Listenelemente. ➤ Die Anzahl der Suchoperationen einer Skip-Liste reduziert sich auf die Größenordnung Θ(log2 N).

Dr. Stefan Bosse • Grundlagen der Informatik

R-11

Skip-Listen :: Perfekte Skip-Listen (I) ➤ Teil I: Operationen einer Skip-Liste. FUN Suchen : L:skipliste × k:keytype → x:skipelement DEF Suchen = FUN L,k → p ← L.kopf; FOR i = L.höhe DOWNTO 2 DO WHILE p.next[i].key < k DO p ← p.next[i]; DONE; DONE; p ← p.next[1]; IF p.key = k THEN → p ELSE → NONE

R-12

Dr. Stefan Bosse • Grundlagen der Informatik

Skip-Listen :: Perfekte Skip-Listen (II) ➤ Beispiele von Skip-Listen. (A): Skip-Liste der Höhe 2, (B): zufällige Skip-Liste der Höhe 4, (C): wie (B), aber als perfekte Skip-Liste der Höhe 4.

Dr. Stefan Bosse • Grundlagen der Informatik

R-13

Skip-Listen :: Randomisierte Skip-Listen (I) ➤ Bei perfekten Skip-Listen bedeutet das Einfügen oder Entfernen von Listenelementen eine vollständige Rekonfiguration der Liste. ➤ Abhilfe schaffen hier sog. randomisierte Skip-Listen. Bei denen findet eine Aufweichung des starren Schemas der perfekten Skip-Liste hin zu einer statistisch verteilten Gewichtung der Höhen der Skip-Elemente statt, so daß gilt: −

perfekt

(6)



perfekt

(7)

n1≈n1 n2≈n2

ω(p.hoehe = i) ≈

1 2i

(8)

➤ Die Einfüge-Operation einer randomisierten Liste beginnt mit der Suche eines Elements, daß sich in der Ordnung der Liste vor dem einzufügenden Element befindet. ➤ Die Höhe für das neue Element wird mittels eines Zufallszahlengenrators im Bereich 1..MAXHÖHE bestimmt. Das neue Element wird dann in die Skip-Liste eingefügt.

R-14

Dr. Stefan Bosse • Grundlagen der Informatik

Skip-Listen :: Randomisierte Skip-Listen (II) ➤ Teil II: Operationen einer Skip-Liste. PRO Einfügen : L:skipliste × x:skipelement ◆ DEF Einfügen = FUN L,x → p ← L.kopf; FOR i = L.höhe DOWNTO 2 DO WHILE p.next[i].key < k DO p ← p.next[i]; DONE; DONE; p ← p.next[1]; IF p.key = x.key THEN FEHLER ; neuehöhe ← randomhöhe();

R-15

IF neuehöhe > L.höhe THEN FOR i = L.höhe + 1 TO neuehöhe DO update[i] ← L.kopf; DONE; L.höhe ← neuehöhe; END IF; x.höhe ← neuehöhe; FOR i = 1 to neuehöhe DO x.next[i] ← update[i].next[i]; update[i].next[i] ← x; DONE;

Dr. Stefan Bosse • Grundlagen der Informatik

Hash-Verfahren (I) ➤ Listen erlauben eine Menge von Datensätzen so zu speichern, daß die Operationen Suchen, Einfügen und Entfernen unterstützt werden. ➤ Jeder Datensatz ist gekennzeichnet durch einen eindeutigen Schlüssel, z.B. eine Integer-Zahl oder eine Zeichenkette. ➤ Zu jedem Zeitpunkt ist lediglich eine (kleine) Teilmenge σ aller möglichen Schlüssel Σ gespeichert. ➤ Das bedeutet bei einer linearen Speicherung der Datensätze mit einer Tabelle, wo der Index der Tabelle/des Arrays gleich (bzw. die Speicheradresse proportional) dem Schlüssel ist, eine große Tabelle mit geringer Zeilenausnutzung. ➤ Lineare Speicherung von Datensätzen mit einer Array-Tabelle.

S-1

Dr. Stefan Bosse • Grundlagen der Informatik

Hash-Verfahren (II) ➤ Vorteil einer direkten Zuordnungsfunktion liegt in der Suchzeit Θ(1)!

F(k) = Speicheradresse A ∼ k

(9)

➤ Wünschenswert wäre eine indirekte Zuordnungsfunktion, die eine bessere Ausnutzung der Datentabelle ermöglicht: H(k) = Speicheradresse A , k

(10)

H:k→A

(11)

➤ Die Funktion H nennt man Hash-Funktion. Die Datensätze werden in einer linearen Tabelle (Array) abgelegt, die man Hash-Tabelle nennt. ➤ Die Größe der Hash-Tabelle ist zweckmäßigerweise m p.key THEN IF p.right , NONE THEN Einfügen (p.right,x); ELSE p.right ← x; END IF; ELSE FEHLER Schlüssel vorhanden; END IF;

PRO Einfügen : p:↑knoten × x:↑knoten;

T-9

Dr. Stefan Bosse • Grundlagen der Informatik

Bäume :: Natürliche Bäume - Binärbäume (VI) ➤ Die Struktur eines Baumes hängt von der Reihenfolge der Schlüssel beim Einfügen ab. Beispiel: K1={1,2,3,4} K2={3,4,1,2} ➤ Abhängigkeit der Baumstruktur von der Einfügereihenfolge.

T-10

Dr. Stefan Bosse • Grundlagen der Informatik

Bäume :: Natürliche Bäume - Binärbäume (VII) ➤ Für eine möglichst schnelle Suche, optimal Θ(log 2N), sollte der Baum balanziert sein, d.h. jeder Knoten hat zwei Nachfolger (außer Endknoten). ➤ Die Höhe eines Baumes ist dann minimal H=log2N: ➤ Für die Balanzierung eines Baumes benötigt man zwei Rotationsoperationen: 1. Rechte Rotation im Uhrzeigersinn von zwei benachbarten Knoten, 2. und linke Rotation gegen den Uhrzeigersinn. ➤ Rechte Rotation zweier Knoten q und p. Die weiterführenden Verzweigungen werden entsprechend der Ordnungsrelation umgeordnet (linkes Bild). Linke Rotation zweier Knoten q und p. Die weiterführenden Verzweigungen werden entsprechend der Ordnungsrelation umgeordnet (rechtes Bild).

T-11

Dr. Stefan Bosse • Grundlagen der Informatik

Bäume :: Natürliche Bäume - Binärbäume (VIII) ➤ Kombination aus Links- und Rechtsrotation führt zur Balanzierung eines linkslastigen asymmetrischen Baumes (linkes Bild). ➤ Kombination aus Rechts- und Linksrotation führt zur Balanzierung eines rechtslastigen asymmetrischen Baumes (rechtes Bild).

T-12

Dr. Stefan Bosse • Grundlagen der Informatik

Bäume :: Natürliche Bäume - Binärbäume (IX) Entfernen eines Datensatzes 1. Ist k(x) der Schlüssel des Knotens x, und hat x keine Nachfolger, kann x einfach entfernt werden. 2. Hat x einen Sohn, wird dieser an den Vater-Knoten von x anstelle von x angehängt. 3. Wenn x zwei Söhne hat, muß der rechte Sohn-Knoten den Knoten x ersetzen, und der linke wird der Sohn vom neuen Knoten. Wenn der alte rechte Sohn von x wieder zwei Söhne hat, muß dieser Vorgang solange wiederholt werden, bis Fall 1-2 eintritt.

T-13

Dr. Stefan Bosse • Grundlagen der Informatik

Systematische Reduktion logischer Funktionen :: BDD (I) Binary-Decision-Diagram (BDD)-Methode

➤ Ein Binary-Decision-Diagram (BDD) BDDs ist ein azyklischer und gerichteter Graph, der einen Algorithmus zur Berechnung einer booleschen Funktion (BF) beschreibt. ➤ Jede boolesche Funktion kann als BDD dargestellt werden. ➤ Berechnung der dargestellten Funktion für einen gegebenen Eingangsvektor { x 1,..., xn} beginnt an der Quelle (Wurzelknoten). ➤ Ein BDD besteht aus einem Startknoten (Quelle) und inneren Knoten mit dem Ausgangsgrad 2. ➤ Die inneren Knoten sind Variablen der BF zugeordnet. ➤ Die beiden ausgehenden Kanten der inneren Knoten entsprechen der booleschen Wertemenge {0,1}. ➤ Am Ende eines Pfades im BDD befindet sich eine Senke mit dem Ausgangsgrad 0. ➤ Ein Pfad (Quelle → Senke) beschreibt die Evaluierung eines Funktionswertes der BF. ➤ Die Größe eines BDD’s ist maximal O(2n/n) bei einer BF mit n Variablen. ➤ Nachteilige Eigenschaft von BDDs (wenn n groß ist): Die Tatsächliche Größe und Struktur eines BDD’s hängt von der Variablenreihenfolge bei der Erzeugung ab! (Ausnahme: symmetrische BF). T-14

Dr. Stefan Bosse • Grundlagen der Informatik

Systematische Reduktion logischer Funktionen :: BDD (II) Binary-Decision-Diagram (BDD)-Methode Beispiel: f(x1,x2)=¬x1 +¬x2

T-15

Dr. Stefan Bosse • Grundlagen der Informatik

Systematische Reduktion logischer Funktionen :: BDD (III) Shanon-Zerlegung Erzeugung eines BDD’s aus BF schrittweise durch Evaluierung der einzelnen Variablen {x1,..,x2} mit den Werten {0,1}: f = ¬ x1f|x1=0 ∨ x1 f|x1=1

(28)

Jeder innere Knoten stellt eine neue (Sub-) BF dar:

T-16

fv1 = ¬x1 + ¬ x2

(29)

fv2 = 1

(30)

fv3 = ¬x2

(31)

Dr. Stefan Bosse • Grundlagen der Informatik

Systematische Reduktion logischer Funktionen :: BDD (IV) Shanon-Zerlegung Die Tatsächliche Größe und Struktur eines BDD’s hängt von der Variablenreihenfolge bei der Erzeugung ab! (Ausnahme: symmetrische BF). Beispiel zweier BDDs erzeugt aus f(x1,x2,x3 )=x1•x2+x3

T-17

Dr. Stefan Bosse • Grundlagen der Informatik

Systematische Reduktion logischer Funktionen :: BDD (V) Reduktion von BDDs Die Reduktion eines (O)BDD’s hat das Ziel, die Anzahl der Pfade und Variablen zu minimieren, was in einer reduzierten und minimierten BF resultiert. Deletion-Rule Die beiden Kanten eines Knotens v(xi) verzweigen beide auf den gleichen Nachfolgerknoten w(xj). Der Knoten v kann entfernt werden, und alle eingehenden Kanten werden auf w umgeleitet. Merging-Rule Zwei Knoten v(xi) und w(xi) der gleichen Variable besitzen gleiche 0- und 1-Nachfolger. Die Knoten v und w können zu einem neuen Knoten v’ zusammengefaßt werden.

T-18

Dr. Stefan Bosse • Grundlagen der Informatik

Systematische Reduktion logischer Funktionen :: BDD (VI) Reduktion von BDDs (Forts.) Das folgende Beispiel zeigt eine Reduktion der BF zu

f(x1, x2, x3, x4) = x1 • x2 • x3 • x4 + x1 • ¬ x2 • x3 + x1 • x2 • x3 • ¬ x4

(32)

f(x1, x2, x3, x4) = x1 • x3

(33)

T-19

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren ZIELE ➤ Verständnis der Algorithmik von Sortierverfahren um ungeordnete Listen zu ordnen ➤ Laufzeitbetrachtungen ermöglichen qualitative Bewertung verschiedener Algorithmen und Auswahl geeigneter Sortierverfahren

➤ Anwendung von iterativen und rekursiven Verfahren

U-0

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren o → n ➤ Liste von Datensätzen bzw. Elementen a = a1, a2, ..., aN sollen wie folgt nach ihrem Schlüssel geordnet sein: a1.key ≤ a2.key ≤ ... ≤ aN.key (1) a[1].key ≤ a[2].key ≤ ... ≤ a[N].key mit Array

(2)

➤ Wenn die Liste ungeordnet ist, kann mittels eines Sortierverfahrens eine Ordnung durch Verschieben oder Tausch von Elementen in der Liste bzw. einem Array erreicht werden. ➤ Wie bei allen Listen basierten Algorithmen ist die Laufzeit des Sortierverfahrens wichtigste Eigenschaft, zusammen mit dem Speicherbedarf des Verfahrens. Verschiedene Sortierverfahren: 1. Sortieren durch Auswahl 2. Sortieren durch Einfügen 3. Shell-Sort 4. Bubble-Sort 5. Quick-Sort

U-1

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Sortieren durch Auswahl (I) ➤ Verfahren: ▼ Position j1 bestimmen, an der das Ele→ ment mit kleinsten Schlüssel aus a = n o a1, a2, ..., aN sich befindet, ▼ Vertausche a1mit a j1 ▼ Wiederhole Suche und Vertauschung für a2 mit a j2 usw. ▼ Der Reihe nach wird das i-kleinste Element a ji mit i={1,...,N-1} bestimmt.

U-2

➤ Algorithmus Auswahlsortierung. PRO AuswahlSort : a:dataarray; ◆

DEF AuswahlSort = FUN a → FOR i = 1 TO N−1 DO min ← i; ◆ Suche FOR j = i+1 TO N DO IF a[j].key < a[min].key THEN min ← j; DONE; ◆ Vertauschung t ← a[min]; a[min] ← a[i]; a[i] ← t; DONE; Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Sortieren durch Auswahl (II) ➤ Beispiel Auswahlsortierung.

Dr. Stefan Bosse • Grundlagen der Informatik

U-3

Sortierverfahren :: Sortieren durch Auswahl (III) Analyse des Laufzeitverhaltens

➤ Anzahl der Suchoperationen für gegebenes i: Ni = N − i

(3)

➤ Gesamtzahl der Suchoperationen: Smin = Smax = Ntot =

N−1 X i=1

N−1 X N(N − 1) (N − i) = i = ⇒ Θ(N2) 2 i=1

(4)

➤ Anzahl der Verschiebeoperationen: Mmin = Mmax = 3(N − 1) ⇒ Θ(N)

(5)

➤ Die Laufzeit bei der Suche überwiegt die Laufzeit der Verschiebungsoperationen. ➤ Bei der Laufzeitanalyse wird immer der minimale und maximale Aufwand von Operationen (in normierten Einheiten) angegeben. ➤ Die Größenordnung der Laufzeit Θ ist immer der ungünstigste Fall einer Operation. U-4

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Sortieren durch Einfügen (I) ➤ Die N zu sortierenden Elemente werden ➤ Algorithmus Einfügesortierung. nacheinander betrachtet und in die jeweils, bereits sortierte, anfangs leere Teilfolge an PRO EinfügeSort : der richtigen Stelle eingefügt. a:; n o ◆ ➤ Annahme: Teilfolge a1, ..., ai−1 ist bereits DEF EinfügeSort = FUN a → sortiert mit FOR i = 2 TO N DO j ← i; a1.key ≤ a2.key ≤ ... ≤ aN.key (6) t ← a[i]; k ← t.key; WHILE j > 0 AND ➤ Verfahren: a[j−1].key > k ▼ Einfügen eines neuen Elements ai DO durch absteigenden Vergleich von a j ◆ Verschieben und ai mit j=(i-1),...,1 a[j] ← a[j−1]; DECR j; ▼ Element a j wird um eine Position nach DONE; rechts verschoben, wenn a j > ai. a[j] ← t; ▼ Ist a j ≤ ai, dann wird ai an der Stelle DONE; (j+1) eingefügt. DEF DECR v == v ← v−1 DEF INCR v == v ← v + 1 Dr. Stefan Bosse • Grundlagen der Informatik

U-5

Sortierverfahren :: Sortieren durch Einfügen (II) ➤ Beispiel Einfügesortierung. a={15,2,43,17,4} I. a1=15 → bereits sortiert a0={15} II. a2=2 → j=1,i=2 a1 > a2 → a1 nach rechts verschieben < a0={2,15} III. a3=43 → j=2, i=3 a2 < a3 → a3 hinten anhängen ℘ a0={2,15,43} IV. a4=17 → j=3, i=4 a3 > a4 → a3 nach rechts verschieben < a0={2,15,17,43} usw. Analyse des Laufzeitverhaltens

➤ Gesamtzahl der Suchoperationen: Smin = N − 1 Smax =

N− 1 X

i ⇒ Θ(N2)

(7)

(8)

i=2

U-6

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Sortieren durch Einfügen (III) Analyse des Laufzeitverhaltens (Forts.)

➤ Anzahl der Verschiebeoperationen: Mmin = 2(N − 1) Mmax =

N−1 X

i + 1 ⇒ Θ(N2 )

(9)

(10)

i=2

➤ Die Laufzeit bei der Suche ist von gleicher Größenordnung wie die Laufzeit der Verschiebungsoperationen. ➽ ➽ ➽ nicht effizienter als Auswahlsortierung.

U-7

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Shell-Sort (I) ➤ Beim Sorieren durch Einfügen wird ein Element immer nur um eine Stelle nach rechts verschoben. ➤ Ziel: Verschiebung in größeren Schritten durchführen, so daß ein Element schenller an seine endgültige Position gebracht werden kann. ➤ Es wird eine abnehmende Folge von Schrittweiten gewählt:  S = ht, ht−1, ..., h1 (11) ➤ Sortieren mit abnehmenden Inkrementen ist ein Verfahren, was von D. L. Shell (ca. 1959) eingeführt wurde. ➤ Die Wahl der Schrittweiten entscheidet über die Performance des Sortiervefahrens (Laufzeit). Beispiel für eine Schrittweitenfolge: (12) {5, 3, 1}

U-8

➤ Algorithmus Shell-Sortverfahren. DEF ShellSort = FUN a → FOR EACH h ∈ S DO FOR i = h+1 TO N DO j ← i; t ← a[i]; k ← t.key; WHILE j > h AND a[j−h].key > k DO ◆ Verschieben a[j] ← a[j−h]; j ← j−h; DONE; a[j] ← t; DONE; DONE;

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Shell-Sort (II) Analyse des Laufzeitverhaltens

➤ Laufzeit: Θ(N log22 N) bei einer h-Folge mit den möglichen Inkrementen 2 p3q mit p,q als Laufindizes {p,q=0,1,2,...}. ➤ Leicht verbessertes Laufzeitverhalten im Vergleich mit Sortieren durch Einfügen und Auswahl.

U-9

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Bubble-Sort (I) ➤ Das Bubble-Sort-Verfahren ist ebenfalls ein einfaches Sortierverfahren, welches als Mischung aus Einfüge- und Auswahlsortiervefahren betrachtet werden kann. n o ➤ Eine Liste a1, a2, ..., aN wird iterativ durchlaufen. Wenn ai .key > ai+1 .key erfüllt ist, werden die (benachbarten) Elemente aiund ai+1 vertauscht. ➤ Der Listendurchlauf wird solange wiederholt, bis bei einem vollständigen Durchlauf keine Vertauschungen mehr auftreten.

U-10

➤ Algorithmus Bubble-Sortverfahren. DEF BubbleSort = FUN a → DO swap ← false; FOR i = 1 to (N−1) DO ◆ Suche IF a[i].key > a[i+1].key THEN ◆ Vertauschung t ← a[i]; a[i] ← a[i+1]; a[i+1] ← t; swap ← true; END IF; DONE; DONE WHILE swap=true;

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Bubble-Sort (II) Analyse des Laufzeitverhaltens

➤ Laufzeit: Θ(N 2) ➤ Bubble-Sort ist nur effizient bei bereits vorsortierten Listen, bei denen also die Inversionszahl der Schlüssel (Anzahl der Vertauschungen) klein ist. ➤ Beispiel Bubble-Sort

Dr. Stefan Bosse • Grundlagen der Informatik

U-11

Sortierverfahren :: Quick-Sort (I) ➤ Schnelles Sortierverfahren mit einer kürzeren Laufzeit als Θ(N 2) wird angestrebt. ➤ Verfahren: Divide-and-Conquer (Teilen und ”Erobern”), eine häufig in der Algorithmik verwendete Methodik. ➤ Laufzeit ist im schlechtesten Fall auch wieder von quadratischer Größenordnung, aber im Mittel nur noch von linear-logarithmischer Ordnung Θ(N log2 N)

(13)

➤ Bei dem Divide-and-Conquer-Verfahren (DaC) handelt sich um ein rekursives Vefharen, welches die DaC-Strategie rekursiv auf Teilfolgen anwendet. ➤ Quick-Sort ist ein In-Place-Verfahren, d.h. die Sortierung findet innerhalb des Datenfeldes statt. Der Algorithmus wird dadurch komplexer, da DaC-Verfahren auf Teilung basieren, und Datenfelder nur über ihre Indexgrenzen ”geteilt” werden können. Sortieren durch rekursives Teilen

n o ➤ Methode: Um eine Folge F = k1, k2, ..., kN von N Schlüssen und zugehörigen Datensätzen aufsteigend zu sortieren wählt man ein beliebiges Element kiF aus und benutzt dieses als Teilungspunkt, das sog. Pivot-Element.

U-12

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Quick-Sort (II) ➤ Anschließende Aufteilung der Folge F in zwei Teilfolgen F 1 und F 2 ohne ki. ➤ F 1 besteht nur aus Elementen von F, für die gilt: kj ≤ ki mit j < i

(14)

➤ F 2 besteht nur aus Elementen von F, für die gilt: kj ≥ ki mit j > i

(15)

➤ F 1 ist eine Folge aus i-1 Elementen, und F 2 besitzt N-i Elemente.

U-13

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Quick-Sort (II) ➤ Flußdiagramm des Quick-Sort Algorithmus.

U-14

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Quick-Sort (III) ➤ Algorithmus Quick-Sort mit Divide-andConquer-Methode.Das Pivot-Element ist jeweils das ganz rechte Element r eines Teilarrays mit den Indexgrenzen l und r. PRO QuickSort : f: ARRAY x l: INT x r: INT; DEF REC QuickSort = FUN f,l,r → ◆ Abbruchkriterium der Rekursion abfragen! IF r > l THEN (* ** Divide *) i ← l−1; j ← r; ◆ Pivot−Element ≡ r k ← f[r].key; do_search ← true;

U-15

WHILE do_search=true DO DO INCR i; WHILE f[i].key < k; DO DECR j; WHILE f[j].key > k; IF i ≥ j THEN ◆ i ist Pivotelement do_search ← false; ELSE ◆ Vertauschung t ← f[i]; f[i] ← f[j]; f[j] ← t; END IF; DONE; ◆ Letzte Vertauschung/ Pivot−Element platzieren t ← f[i]; f[i] ← f[r]; f[r] ← t; ◆ Conquer QuickSort (f,l,i−1); QuickSort (f,i+1,r); END IF;

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Quick-Sort (IV) ➤ Verfahren: ▼ Pivot-Element: Schlüssel des Elements k=f[r].key am rechten Ende der zu sortierenden Teilfolge. ▼ Aufteilung des Bereichs f[l] ... f[r] ▼ Element k j mit j∈{r,...,l} und k j ≤ k finden ▼ Elemente f[i] und f[j] tauschen, so daß sich beide Elementen in den richtigen Teilfolgen befinden. ▼ Solange wiederholen bis die gesamte Folge f[l]...f[r] untersucht wurde, und die beiden Teilfolgen sortiert sind. ➤ Beispiel Quick-Sort.

U-16

Dr. Stefan Bosse • Grundlagen der Informatik

Sortierverfahren :: Quick-Sort (V)

Dr. Stefan Bosse • Grundlagen der Informatik

U-17

Grundlagen der Informatik I+II Dr. Stefan Bosse Universität Bremen Fachbereich Mathematik & Informatik Fachgruppe Robotik email: [email protected] web: http://sun45.informatik.uni-bremen.de Kurs I: Vorlesung WS 2012/2013 Kurs II: Vorlesung SS 2013 V130620