Grundlagen der Informatik - PearsonGrundlagen der Informatik Praktisch – Technisch – Theoretisch...

12
Helmut Herold Bruno Lurz Jürgen Wohlrab Grundlagen der Informatik Praktisch – Technisch – Theoretisch ein Imprint von Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam

Transcript of Grundlagen der Informatik - PearsonGrundlagen der Informatik Praktisch – Technisch – Theoretisch...

  • Helmut Herold • Bruno Lurz • Jürgen Wohlrab

    Grundlagen der Informatik

    Praktisch – Technisch – Theoretisch

    ein Imprint von Pearson EducationMünchen • Boston • San Francisco • Harlow, England

    Don Mills, Ontario • Sydney • Mexico CityMadrid • Amsterdam

  • Inhaltsverzeichnis

    Kapitel 1 Einleitung 5

    1.1 Idee dieses Buches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    1.2 Beispiele, Übungen und Rätsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.3 Begleitmaterial zu diesem Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4 Benutzung der mitgelieferten CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.5 Danksagung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6 Hinweis in eigener Sache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    Teil I Einführung in die Informatik 11

    Kapitel 2 Die Historie und die Teilgebiete der Informatik 13

    2.1 Rätsel: Streichholzprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 Der Begriff Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Historische Entwicklung der Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2.3.1 Der Abakus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.2 Der Begriff Algorithmus und Ibn Musa Al-Chwarismi . . . . . . . . . . . . 172.3.3 Wichtige Stationen von 1500 bis 1930 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.3.4 Konrad Zuse und der erste funktionstüchtige Computer . . . . . . . . . 202.3.5 Howard H. Aiken und die Mark I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3.6 John von Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3.7 Generationen der elektronischen Datenverarbeitung . . . . . . . . . . . . . 23

    2.4 Einordnung und Einteilung der Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4.1 Verschiedene Einsatzgebiete von Computern (Informatik) . . . . . . . . 272.4.2 Die Teilgebiete der Informatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.4.3 Die Informatik und unsere Abhängigkeit von ihr . . . . . . . . . . . . . . . . . 31

    Kapitel 3 Speicherung und Interpretation von Information 33

    3.1 Rätsel: Umfüllprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2 Unterschiedliche Zahlensysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.2.1 Das römische Zahlensystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2.2 Positionssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.3 Positionssysteme bei natürlichen Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.4 Positionssysteme bei gebrochenen Zahlen . . . . . . . . . . . . . . . . . . . . . . . 41

    3.3 Dual-, Oktal- und Hexadezimalsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.1 Das Dualsystem und das Bit im Rechner . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.2 Konvertieren zwischen Dual- und Oktalsystem . . . . . . . . . . . . . . . . . . 433.3.3 Konvertieren zwischen Dual- und Hexadezimalsystem . . . . . . . . . . 43

    3.4 Konvertierungsalgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.4.1 Konvertieren von anderen Systemen in das Dezimalsystem . . . . . . 45

  • INHALTSVERZEICHNIS

    3.4.2 Konvertieren vom Dezimalsystem in andere Positionssysteme . . . 453.4.3 Konvertieren echt gebrochener Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.4.4 Konvertieren unecht gebrochener Zahlen . . . . . . . . . . . . . . . . . . . . . . . . 48

    3.5 Rechenoperationen im Dualsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.5.1 Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.5.2 Subtraktion und Darstellung negativer Zahlen . . . . . . . . . . . . . . . . . . . 493.5.3 Multiplikation und Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.5.4 Konvertieren durch sukzessive Multiplikation und Addition . . . . 53

    3.6 Reelle Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.6.1 Festpunktzahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.6.2 Gleitpunktzahlen und das IEEE-Format . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    3.7 Codes zur Darstellung von Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.7.1 ASCII-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.7.2 Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    3.8 Weitere Codes für Zahlen und Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.8.1 BCD-Code für Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.8.2 Gray-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.8.3 Barcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    3.9 Duale Größenangaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.10 Die Grunddatentypen in der Programmiersprache C/C++ . . . . . . . . . . . . . . . . 63

    Kapitel 4 Boolesche Algebra 79

    4.1 Analytische Rätsel (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.2 George Boole und seine Algebra mit nur zwei Werten . . . . . . . . . . . . . . . . . . . . 804.3 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.4 Boolesche Schaltungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834.5 Axiome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834.6 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    Kapitel 5 Hardware-Komponenten eines Computers 89

    5.1 Analytische Rätsel (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.2 Aufbau von Computersystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    5.2.1 Zentraleinheit und Peripheriegeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.2.2 EVA und das von-Neumann’sche-Rechnermodell . . . . . . . . . . . . . . . . 91

    5.3 Die heutigen Personal Computer (PCs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935.4 Die Zentraleinheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    5.4.1 Der Prozessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955.4.2 Der Arbeitsspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.4.3 ROMs zur Speicherung von Programmen und konstanten Daten . 1075.4.4 Das BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.4.5 Busse und Schnittstellen (Anschlüsse) . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    5.5 Die Peripherie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.5.1 Massenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.5.2 Eingabegeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205.5.3 Ausgabegeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    6

  • Inhaltsverzeichnis

    5.6 Modell eines einfachen Prozessorsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1255.7 Alternative Rechnerarchitekturen (Neuronale Netze) . . . . . . . . . . . . . . . . . . . . 130

    Kapitel 6 Vom Programm zum Maschinenprogramm 131

    6.1 Analytische Rätsel (3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326.2 Entwicklung eines Programms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326.3 Programmierwerkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    6.3.1 Unterschiedliche Arten der Übersetzung . . . . . . . . . . . . . . . . . . . . . . . . . 1336.3.2 Der Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346.3.3 Der Linker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356.3.4 Der Lader (und Locator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.3.5 Der Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

    Teil II Praktische Informatik 141

    Kapitel 7 Programmiersprachen 143

    7.1 Analytische Rätsel (4) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447.2 Höhere Programmiersprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447.3 Grundlagen der Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

    7.3.1 Spezifikation einer Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1477.3.2 Der Begriff Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487.3.3 Formulierung und Darstellung eines Algorithmus . . . . . . . . . . . . . . . 1487.3.4 Programm = Daten + Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

    7.4 Datentypen und Operatoren in C/C++ und Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567.4.1 Datentypen und Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567.4.2 Bezeichner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587.4.3 Grundlegende Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587.4.4 Die logischen Operatoren &&, || und ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597.4.5 Die Shift-Operatoren > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597.4.6 Die Postfix- und Präfixoperatoren ++ und −− . . . . . . . . . . . . . . . . . . . 1607.4.7 Die Bit-Operatoren &, |, ^ und ∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617.4.8 Prioritäten und Assoziativitäten der Operatoren . . . . . . . . . . . . . . . . . 162

    7.5 Formulierung von Algorithmen in C/C++ und Java . . . . . . . . . . . . . . . . . . . . . . . 1647.5.1 Sequenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1647.5.2 Verzweigungen mit if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1647.5.3 Verzweigungen mit switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707.5.4 for-Schleife (Schleife mit der Abfrage am Anfang) . . . . . . . . . . . . . . . 1717.5.5 while-Schleife (Schleife mit der Abfrage am Anfang) . . . . . . . . . . . . 1787.5.6 do… while-Schleife (Schleife mit der Abfrage am Ende) . . . . . . . . . 1817.5.7 Abbruch von Schleifen mit break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827.5.8 Abbruch eines einzelnen Schleifendurchlaufs mit continue . . . . . 1847.5.9 Abbruch mehrerer geschachtelter Schleifen mit goto . . . . . . . . . . . . . 1847.5.10 Programmabbruch mit exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1857.5.11 Allgemeines zu Funktionen bzw. Methoden . . . . . . . . . . . . . . . . . . . . . . 1857.5.12 Rekursive Funktionen bzw. rekursive Methoden . . . . . . . . . . . . . . . . . 195

    7

  • INHALTSVERZEICHNIS

    7.5.13 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2047.5.14 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2097.5.15 Zufallszahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2127.5.16 Argumente auf der Kommandozeile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2147.5.17 Ausnahmen (Exceptions) in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2157.5.18 Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2167.5.19 Strukturen in C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    7.6 Objektorientierte Programmierung mit Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2277.6.1 Meilensteine in der Softwareentwicklung . . . . . . . . . . . . . . . . . . . . . . . . 2277.6.2 Einführung in die Objektorientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2357.6.3 Klassen und Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2427.6.4 Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2487.6.5 Vererbung und Polymorphismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2497.6.6 GUI-Programmierung in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

    Kapitel 8 Datenstrukturen und Algorithmen 271

    8.1 Analytische Rätsel (5) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2728.2 Grundlegende Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

    8.2.1 Allgemeine Eigenschaften von Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2738.2.2 Basis-Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2738.2.3 Datenstruktur = Daten + Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2738.2.4 Verkettete Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2748.2.5 Stack (Stapel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2878.2.6 Queue (Warteschlange) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

    8.3 Bäume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3008.3.1 Grundlegendes zu Bäumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3008.3.2 Binäre Bäume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3028.3.3 Baumrekursion bei Bäumen mit mehr als zwei Zweigen . . . . . . . . . 317

    8.4 Komplexität von Algorithmen und O-Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . 3288.4.1 Zeitaufwand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3288.4.2 Speicherplatzbedarf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3318.4.3 Klassifikation von Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3328.4.4 Die O-Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3348.4.5 Wahl eines Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3408.4.6 Einfache Optimierungen bei der Implementierung . . . . . . . . . . . . . . . 341

    8.5 Elementare Sortieralgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3448.5.1 Grundsätzliches zu Sortieralgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . 3448.5.2 Bubble-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3458.5.3 Insert-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3478.5.4 Select-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3488.5.5 Zeitmessungen für Bubble-, Insert- und Select-Sort . . . . . . . . . . . . . . 3498.5.6 Distribution Count-Sort (Bucket-Sort) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

    8.6 Shell-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3538.7 Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3558.8 Mergesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

    8.8.1 Rekursiver Mergesort für Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

    8

  • Inhaltsverzeichnis

    8.8.2 Nicht-rekursiver Mergesort für Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3598.8.3 Analyse des Mergesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3608.8.4 Mischen von zwei sortierten Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

    8.9 Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3618.9.1 Finden in einem Labyrinth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3618.9.2 Das Achtdamen-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3638.9.3 Rekursives Füllen von Figuren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3658.9.4 Sudoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3658.9.5 Branch-and-Bound-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

    Kapitel 9 Betriebssysteme 367

    9.1 Rätsel: Überquerung einer Hängebrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3689.2 Der Begriff Betriebssystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3689.3 Die Geschichte von Betriebssystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3689.4 Grundaufgaben von Betriebssystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3719.5 Aufbau und Dienste von Betriebssystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

    9.5.1 Schichtenaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3739.5.2 Prozesse, Threads, Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3749.5.3 Synchronisations-Mechanismen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3779.5.4 Zeitdienste (Timer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3809.5.5 Speicherverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3829.5.6 Dateiverwaltung und Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3839.5.7 Geräteverwaltung und Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3869.5.8 Benutzerschnittstelle (Kommandozeile bzw. GUI) . . . . . . . . . . . . . . . . 3889.5.9 Programmierschnittstelle (API) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

    9.6 Besonderheiten bei Embedded Systemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

    Kapitel 10 Rechnernetze und das Internet 397

    10.1 Synthetische Rätsel (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39810.2 Grundlagen der Vernetzung von Rechnern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39810.3 Das ISO/OSI-Modell und Internet-Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39910.4 Internet-Protokolle in Rechnernetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

    10.4.1 Grundbegriffe zu TCP/IP-Netzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40110.4.2 TCP/IP-Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

    10.5 Hubs, Switches, Router und Gateways . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40910.6 Grundlagen der Socket-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40910.7 Verteilte Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40910.8 Das World Wide Web (WWW) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

    10.8.1 Wichtige Komponenten und Konzepte des WWW . . . . . . . . . . . . . . . 41110.8.2 Kurze Einführung in HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41310.8.3 Cascading Style Sheets (CSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42610.8.4 Eine kurze Einführung in XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42810.8.5 XHTML – das neue, XML-basierte HTML . . . . . . . . . . . . . . . . . . . . . . . . 43110.8.6 Web-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

    9

  • INHALTSVERZEICHNIS

    Kapitel 11 Datenbanksysteme 439

    11.1 Synthetische Rätsel (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44011.2 Grundlegendes zu Datenbanksystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

    11.2.1 Aufgaben einer Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44011.2.2 Vorteile von Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44111.2.3 Datenunabhängigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

    11.3 Datenmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44311.3.1 Das Entity-Relationship-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44311.3.2 Das relationale Datenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44411.3.3 Die relationale Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

    11.4 Die Datenbanksprache SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44711.4.1 Datendefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44811.4.2 Einfügen, Ändern und Löschen von Datensätzen . . . . . . . . . . . . . . . . . 44911.4.3 Anfragen mit select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

    Kapitel 12 Software Engineering 453

    12.1 Synthetische Rätsel (3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45412.2 Die Software-Krise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45412.3 Eine geeignete Software-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45612.4 UML-Diagramme für die Modellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

    12.4.1 Statische Modellierung in UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45712.4.2 Dynamische Modellierung in UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

    12.5 Modellierungsmöglichkeiten für die Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46112.6 Notwendigkeit von Prozessen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46112.7 Der wichtige Prozess „Requirement Engineering“ . . . . . . . . . . . . . . . . . . . . . . . . . 462

    12.7.1 Das UML-Anwendungsfalldiagramm (Use Case Diagram) . . . . . . . . 46312.7.2 Das UML-Aktivitätsdiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46412.7.3 Genaue Klärung der Kundenanforderungen . . . . . . . . . . . . . . . . . . . . . . 466

    12.8 Prozessmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46712.8.1 Schwer- und leichtgewichtige Prozessmodelle . . . . . . . . . . . . . . . . . . . 46712.8.2 Das Wasserfall-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46712.8.3 Das V-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46912.8.4 Inkrementelle und iterative Prozessmodelle . . . . . . . . . . . . . . . . . . . . . . 47012.8.5 Agiles Vorgehen mit eXtreme Programming (XP) . . . . . . . . . . . . . . . . . 472

    12.9 Qualität eines Software-Produktes aus Kundensicht . . . . . . . . . . . . . . . . . . . . . . 474

    Teil III Technische Informatik 477

    Kapitel 13 Transistoren, Chips und logische Bausteine 479

    13.1 Synthetische Rätsel (4) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48013.2 Transistoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

    13.2.1 Funktionsweise und Aufbau von Transistoren . . . . . . . . . . . . . . . . . . . 48013.2.2 Realisierung boolescher Funktionen mit Transistoren . . . . . . . . . . . . 482

    10

  • Inhaltsverzeichnis

    13.3 Chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48313.3.1 Geschichtliche Entwicklung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48313.3.2 Herstellungsprozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484

    13.4 Logische Bausteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48513.4.1 Gatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48513.4.2 Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48613.4.3 Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48713.4.4 Multiplexer (Selektor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48713.4.5 Demultiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

    Kapitel 14 Schaltnetze 493

    14.1 Ein dialektisches Rätsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49414.2 Normalformen von Schaltfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

    14.2.1 Disjunktive Normalform (DNF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49414.2.2 Konjunktive Normalform (KNF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49514.2.3 Allgemeines Verfahren beim Erstellen einer Schaltung . . . . . . . . . . . 49614.2.4 Schaltkreisrealisierung durch PLAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497

    14.3 Entwurf von Schaltnetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50014.4 Minimierung logischer Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

    14.4.1 Karnaugh-Veitch-Diagramme (KV-Diagramme) . . . . . . . . . . . . . . . . . . . 50114.4.2 Don’t Care Argumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50514.4.3 Quine-McCluskey-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508

    14.5 Addiernetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51414.5.1 Paralleladdierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51414.5.2 Paralleladdierer und -subtrahierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51614.5.3 Carry-Select-Addiernetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51714.5.4 Carry-Save-Addiernetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51914.5.5 Multiplizierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520

    14.6 Prinzipieller Aufbau einer ALU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522

    Kapitel 15 Schaltwerke 525

    15.1 Rätsel: Waldlauf, Schnapsgläser und mehr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52615.2 Synchrone und asynchrone Schaltwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52715.3 Schaltungen mit Delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528

    15.3.1 4-Bit-Ringzähler als synchrones Schaltwerk . . . . . . . . . . . . . . . . . . . . . . 52815.3.2 Delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52915.3.3 Realisierung von Delays mit Flipflops . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

    15.4 Zähler und Frequenzteiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53915.4.1 Synchroner 4-Bit-Ringzähler mit JK-Flipflops . . . . . . . . . . . . . . . . . . . . 53915.4.2 Asynchroner 4-Bit-Ringzähler mit T-Flipflops . . . . . . . . . . . . . . . . . . . . 54115.4.3 Synchroner BCD-Zähler (Mod-10) mit T-Flipflops . . . . . . . . . . . . . . . . 54215.4.4 Asynchroner BCD-Zähler (Mod-10) mit JK-Flipflops . . . . . . . . . . . . . 542

    15.5 Schieberegister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54315.6 Entwurf synchroner Schaltwerke mittels Automaten . . . . . . . . . . . . . . . . . . . . . 545

    15.6.1 Kurze Einführung in die Automatentheorie . . . . . . . . . . . . . . . . . . . . . . 54515.6.2 Entwurf von Schaltwerken mit Moore- und Mealy-Automaten . . . 548

    11

  • INHALTSVERZEICHNIS

    Kapitel 16 Realisierung eines einfachen Mikroprozessors 559

    16.1 Rätsel: Hautfarbe, Fahrstuhl, Bienen und Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . 56016.2 Komponenten und Phasen eines Prozessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56016.3 Grunddaten zum Mikroprozessor MikroOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56216.4 Die Datenregister des Mikroprozessors MikroOne . . . . . . . . . . . . . . . . . . . . . . . . 56216.5 Die ALU des Mikroprozessors MikroOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56516.6 Die Spezialregister des Mikroprozessors MikroOne . . . . . . . . . . . . . . . . . . . . . . . 56516.7 Der Mikroprozessor MikroOne als Gesamtsystem . . . . . . . . . . . . . . . . . . . . . . . . . 56716.8 Die Maschinenbefehle von MikroOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568

    16.8.1 Initialisierung von MikroOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56816.8.2 Die Befehlsstruktur des MikroOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56816.8.3 Der Befehlssatz von MikroOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

    16.9 Arten der Adressierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58416.10 Das Steuerwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586

    Kapitel 17 Prozessorarchitekturen, Speicher und Caches 591

    17.1 Rätsel: Schachbrett-Quadrate, Flickenmuster, Kreuzformfirma . . . . . . . . . . . 59217.2 CISC und RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59317.3 Pipelining (Fließbandverarbeitung) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595

    17.3.1 Unterschiedliche Phasen beim Pipelining . . . . . . . . . . . . . . . . . . . . . . . . 59517.3.2 Geschwindigkeitsgewinn beim Pipelining . . . . . . . . . . . . . . . . . . . . . . . 59717.3.3 Hazards beim Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599

    17.4 Speicher für Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60217.5 Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605

    17.5.1 Das Lokalitätsprinzip und der Cache-Controller . . . . . . . . . . . . . . . . . . 60617.5.2 Der Lesezugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60717.5.3 Vollassoziative und direktabgebildete Caches . . . . . . . . . . . . . . . . . . . . 60917.5.4 Der Schreibzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612

    17.6 Virtueller Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61417.6.1 Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61517.6.2 Segmentierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617

    Teil IV Theoretische Informatik 619

    Kapitel 18 Automatentheorie und formale Sprachen 621

    18.1 Rätsel: Weg durch ein Labyrinth und um die Ecke gedacht . . . . . . . . . . . . . . . 62218.2 Lexikalische und syntaktische Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62218.3 Reguläre Sprachen und endliche Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624

    18.3.1 Alphabet, Wort und Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62418.3.2 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62518.3.3 Endliche Automaten und reguläre Sprachen . . . . . . . . . . . . . . . . . . . . . 62718.3.4 Realisierung endlicher Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62918.3.5 lex – Ein Werkzeug für die lexikalische Analyse . . . . . . . . . . . . . . . . . 630

    12

  • Inhaltsverzeichnis

    18.4 Kontextfreie Sprachen und Kellerautomaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63418.4.1 Kontextfreie Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63418.4.2 Kellerautomaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63718.4.3 yacc – Ein Werkzeug für die Syntaxanalyse . . . . . . . . . . . . . . . . . . . . . . 64018.4.4 lex und yacc im Zusammenspiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64418.4.5 Rekursion bei der Syntaxanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645

    18.5 Die unterschiedlichen Phasen eines Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . 645

    Kapitel 19 Berechenbarkeitstheorie 649

    19.1 Rätsel: Kneipen, Ei, stehen gebliebene Uhr und Alter . . . . . . . . . . . . . . . . . . . . . 65019.2 Berechenbare Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65119.3 Nicht berechenbare Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652

    19.3.1 Das Diagonalverfahren von Cantor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65219.3.2 Nicht durch einen Algorithmus berechenbare Funktionen . . . . . . . 65319.3.3 Die Church’sche Algorithmus-Definition . . . . . . . . . . . . . . . . . . . . . . . . . 653

    19.4 Berechenbarkeitskonzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65419.4.1 Turingmaschinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65419.4.2 Turing-berechenbare Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65719.4.3 Registermaschinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65719.4.4 GOTO- und WHILE-Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65819.4.5 LOOP-Programme (FOR-Programme) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66019.4.6 Primitive Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66119.4.7 µ-Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66319.4.8 Die Ackermann-Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66519.4.9 Die Church’sche These und die Chomsky-Hierarchie . . . . . . . . . . . . 667

    19.5 Prinzipiell unlösbare Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66819.5.1 Entscheidbare Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66819.5.2 Semi-entscheidbare Mengen (Game of Life und Halteproblem) . . 66919.5.3 Unberechenbarkeit (Fleißiger Biber) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673

    Kapitel 20 Komplexitätstheorie 677

    20.1 Rätsel: Falsche Uhrzeit, Kalenderrechnen und mehr . . . . . . . . . . . . . . . . . . . . . . 67820.2 Die Klasse P für praktisch lösbare Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67820.3 Nichtdeterminismus und die Klasse NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

    20.3.1 Das SAT-Problem als erstes NP-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . 67920.3.2 Reduzierung auf ja/nein-Probleme mit zugehörigen Sprachen . . . 68020.3.3 Nichtdeterminismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68020.3.4 Die Klasse NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681

    20.4 Der Satz von Cook und NP-Vollständigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68320.4.1 Das Dreifarbenproblem als Spezialfall des SAT-Problems . . . . . . . . 68320.4.2 NP-Vollständigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68420.4.3 P = NP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68520.4.4 Das 3SAT-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68520.4.5 Das Cliquenproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68620.4.6 Das Rucksack- und Teilsummen-Problem . . . . . . . . . . . . . . . . . . . . . . . . 68820.4.7 Das Hamilton-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693

    13

  • INHALTSVERZEICHNIS

    20.4.8 Das Problem des Handlungsreisenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69320.4.9 Hierarchie der NP-vollständigen Probleme . . . . . . . . . . . . . . . . . . . . . . . 696

    20.5 Approximationsalgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696

    Teil V Codes, Kompression, Kryptografie 701

    Kapitel 21 Fehlertolerante Codes 703

    21.1 Rätsel: Auf der Demo mit Bruder und Schwester . . . . . . . . . . . . . . . . . . . . . . . . . 70421.2 Motivation für fehlertolerante Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70421.3 „k aus n“-Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70421.4 Der Hammingabstand eines Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70521.5 Eindimensionale Parity-Prüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70721.6 Zweidimensionale Parity-Prüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70821.7 Hamming-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71321.8 CRC-Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715

    Kapitel 22 Datenkompression 719

    22.1 Rätsel: Tierseuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72022.2 Verlustbehaftete und verlustlose Kompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72022.3 Codes mit variabel langen Codewörtern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72022.4 Fano-Bedingung für Dekodierbarkeit eines Codes . . . . . . . . . . . . . . . . . . . . . . . . . 72122.5 Lauflängenkodierung („run-length encoding“) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72222.6 Shannon-Fano-Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72322.7 Huffman-Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72322.8 Arithmetische Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72722.9 Lempel-Ziv-Kodierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730

    22.9.1 Der LZ77-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73222.9.2 Der LZSS-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73322.9.3 Der LZ78-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73422.9.4 Der LZW-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73522.9.5 Varianten der Lempel-Ziv-Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739

    Kapitel 23 Kryptografie 741

    23.1 Rätsel: Weinflasche und Erben von Weinfässern . . . . . . . . . . . . . . . . . . . . . . . . . . 74223.2 Allgemeines zu Kryptosystemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74223.3 Einfache Verschlüsselungsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742

    23.3.1 Cäsar-Chiffre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74223.3.2 Chiffre mit eigener Zuordnungstabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 743

    23.4 Vigenère-Verschlüsselungsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74323.5 Verschlüsselung mittels Zufallsfolgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74423.6 Kryptosysteme mit öffentlichen Schlüsseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746

    23.6.1 Eigenschaften von Public-Key-Systemen . . . . . . . . . . . . . . . . . . . . . . . . . 74623.6.2 Der Satz von Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747

    14

  • Inhaltsverzeichnis

    23.6.3 Schlüsselerzeugung beim RSA-Algorithmus . . . . . . . . . . . . . . . . . . . . . 74723.6.4 Ver- und Entschlüsselung mit dem RSA-Algorithmus . . . . . . . . . . . . 750

    23.7 Quantenkryptografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752

    Weiterführende Literatur 755

    Sachregister 761

    Demonstrationsprogramme und HTML-/XML-Dateien 773

    Simulationsprogramme 777

    15

    Grundlagen der Informatik - Praktisch – Technisch – TheoretischInhaltsverzeichnisKapitel 1 EinleitungTeil I Einführung in die InformatikKapitel 2 Die Historie und die Teilgebiete der InformatikKapitel 3 Speicherung und Interpretation von InformationKapitel 4 Boolesche AlgebraKapitel 5 Hardware-Komponenten eines ComputersKapitel 6 Vom Programm zum Maschinenprogramm

    Teil II Praktische InformatikKapitel 7 ProgrammiersprachenKapitel 8 Datenstrukturen und AlgorithmenKapitel 9 BetriebssystemeKapitel 10 Rechnernetze und das InternetKapitel 11 DatenbanksystemeKapitel 12 Software Engineering

    Teil III Technische InformatikKapitel 13 Transistoren, Chips und logische BausteineKapitel 14 SchaltnetzeKapitel 15 SchaltwerkeKapitel 16 Realisierung eines einfachen MikroprozessorsKapitel 17 Prozessorarchitekturen, Speicher und Caches

    Teil IV Theoretische InformatikKapitel 18 Automatentheorie und formale SprachenKapitel 19 BerechenbarkeitstheorieKapitel 20 Komplexitätstheorie

    Teil V Codes, Kompression, KryptografieKapitel 21 Fehlertolerante CodesKapitel 22 DatenkompressionKapitel 23 Kryptografie

    Weiterführende LiteraturSachregisterDemonstrationsprogramme und HTML-/XML-DateienSimulationsprogramme

    Ins Internet: Weitere Infos zum Buch, Downloads, etc.