Table Of ContentPraktische Informatik – Eine Einführung
Gregor Büchel
Praktische Informatik –
Eine Einführung
Lehr- und Arbeitsbuch mit Tafelbildern
Mit 65 Abbildungen und 13 Tabellen
Prof. Dr. Gregor Büchel
Fachhochschule Köln
Fakultät für Informations-,
Medien- und Elektrotechnik
Lehrgebiet: Datenbanken und Algorithmen
Köln, Deutschland
ISBN 978-3-8348-1874-4 ISBN 978-3-8348-2283-3 (eBook)
DOI 10.1007/978-3-8348-2283-3
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;
detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Springer Vieweg
© Vieweg+Teubner Verlag | Springer Fachmedien Wiesbaden 2012
Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht aus-
drücklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags. Das
gilt insbesondere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikroverfilmungen und die Ein-
speicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk be-
rechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der
Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann
benutzt werden dürften.
Einbandentwurf: KünkelLopka GmbH, Heidelberg
Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier
Springer Vieweg ist eine Marke von Springer DE. Springer DE ist Teil der Fachverlagsgruppe Springer
Science+Business Media.
www.springer-vieweg.de
Vorwort
Das Buch „Praktische Informatik – Eine Einführung | Lehr- und Arbeitsbuch mit
Tafelbildern“ ist aus meiner Vorlesung entstanden, die ich seit 2002 als Einführung
in die Praktische Informatik für Studierende der Nachrichtentechnik und der
Technischen Informatik an der Fachhochschule Köln anbiete. Mit der Vorlesung ist
ein Programmierpraktikum verbunden, das auf Grundlage der Programmierspra-
chen Java und teilweise C stattfindet. Die Vorlesung wird jährlich im Mittel von ca.
60 Studierenden besucht.
Im akademischen Jahr 2009/10 hatte ich eine sehr engagierte Diskussion mit mei-
nen Studierenden, ob ich zu meiner Vorlesung einen Lehr- bzw. Lerntext als Ar-
beitsbuch verfassen soll. Bis dahin hatte ich eine negative Meinung dazu, da es
viele Lehrbücher der Informatik und eine Reihe einführender Bücher in Java gibt,
auf die ich unter anderem mit einem Literaturverzeichnis zur Vorlesung hinweise.
Darüber hinaus hat die FH Köln eine sehr schöne und gut bestückte Hochschul-
bibliothek. Mein Argument, dass eine Vorlesung eine besondere Art der Wissens-
vermittlung ist, die mit der Deutlichkeit des gesprochenen Worts und der Klarheit
des mit dem Auditorium entwickelten Tafelbildes lebt und deshalb keiner Abfas-
sung in Buchform bedarf, konnte meine Studierenden nicht überzeugen. Sie ver-
langten die Abfassung als Buch mit dem Argument der besseren Möglichkeit der
Vorbereitung der nächsten Vorlesungen und Prüfungen. Dieses Argument über-
zeugte mich letztlich.
Kern des Buches sind meine Tafelbilder, die aus strukturierten Texten und Abbil-
dungen bestehen. Das Layout ist mit einem etwas größeren unteren Rand gestaltet,
damit das Buch tatsächlich ein Arbeitsbuch ist, so dass die Studierenden auf dem
Rand die Möglichkeit haben, die Tafelbilder und Texte des Buches durch eigene
Marginalien zu ergänzen, um sich selber den Stoff zu verdeutlichen, oder ergän-
zende Ausführungen der Vorlesungen zu notieren. Am Ende jedes Kapitels sind
Lernziele notiert, die jeder Leser nach dem Durcharbeiten des Kapitels erreichen
soll.
Das Buch ist wie die Vorlesung an Studierende der ersten beiden Semester gerich-
tet, die ein Interesse an Informatik haben, aber weder über Programmierkenntnisse
noch über Vorkenntnisse auf dem Gebiet der Informatik verfügen. Es ist ein Ein-
führungsbuch, das sich ebenso an Studierende anderer Studiengänge richten kann,
die im Grundstudium ein Pflichtfach Informatik haben (zum Beispiel in wirt-
schaftswissenschaftlichen Studiengängen) oder die Informatik mit einem Program-
mierpraktikum als Nebenfach studieren.
VI Vorwort
Der Ansatz des Buches ist elementar. Im Zentrum steht die Frage der Programmie-
rung, das heißt, es steht die Frage, was getan werden muss und was man wissen
muss, wenn man den Computer veranlassen möchte, formalisierbare Operationen
menschlichen Denkens, wie zum Beispiel die Ausführung der vier Grundrechen-
arten, an Stelle des Menschen maschinell zu erledigen. Die Programmierung setzt
die genaue Beschreibung der Arbeitsschritte zur „logischen“ Lösung des gestellten
Problems voraus, bevor auch nur die erste Zeile Kode in einer Programmierspra-
che wie C oder Java geschrieben ist. Daher wird Wert auf die Vorstellung von Be-
schreibungsmitteln für Algorithmen, für das Programmdesign und für die Spezi-
fikation von Klassen gelegt.
In Jahrzehnten, in denen einerseits komfortable Computer zu wohlfeilen Preisen
angeboten werden, in denen aber andererseits das persönliche schriftliche Dividie-
ren beginnt eine aussterbende Kulturtechnik zu werden, ist es nicht sicher, ob das
Programmieren „einfacher“ wird. Sicher ist, dass die „logische“ Lösung von Pro-
blemen erfordert, „die Anstrengung des Begriffs auf sich zu nehmen“1. Das Buch
stellt eine Hilfe dar, Probleme mit gut durchdachter Abstraktion zu vereinfachen,
den Digitalrechner mit seinen Stärken zu nutzen und die angehenden Program-
miererinnen und Programmierer in der Position zu stärken, dass der Mensch über
der Maschine steht.
Das Buch ist meiner geliebten Frau Gabriela Isabelle gewidmet, die alle Phasen der
Erstellung mit großem Interesse und vielen schönen Gestaltungs- und Formulie-
rungsvorschlägen unterstützte.
Bonn, im Frühjahr 2012 Gregor Büchel
1 Georg W. F. Hegel: „Phänomenologie des Geistes“, Vorrede, Theorie Werkausgabe,
Bd. 3, Frankfurt am Main 1970, S. 56.
Inhalt
Vorwort ........................................................................................................................ V
1 Was ist Informatik? ............................................................................................ 1
1.1 Datenflusspläne ........................................................................................ 2
1.1.1 Symbole eines Datenflussplans ................................................ 2
1.1.2 Beispiel: DFP eines Kinokartenreservierungsystems
(CINRES) ...................................................................................... 3
1.2 Übung ........................................................................................................ 4
1.3 Lernziele zu Kapitel 1 .............................................................................. 4
2 Der Aufbau eines programmierbaren Digitalrechners ............................... 5
2.1 Übungen .................................................................................................... 6
2.2 Allgemeines Schichtenmodell eines programmierbaren
Digitalrechners ......................................................................................... 7
2.2.1 Erläuterungen zur Hardware .................................................... 8
2.2.2 Erläuterungen zur Betriebssoftware ........................................ 10
2.3 Umrechnung von Dezimalzahlen in Binär- und Hexadezimalzahlen 11
2.4 Übungen .................................................................................................... 15
2.5 Lernziele zu Kapitel 2 .............................................................................. 15
3 Vom Problem zum Programm .......................................................................... 17
3.1 Übungen .................................................................................................... 22
3.2 Lernziele zu Kapitel 3 .............................................................................. 22
4 Einführung in die Java-Programmierung ...................................................... 23
4.1 Die Entwicklung eines Java-Programms .............................................. 23
4.1.1 Übungen ...................................................................................... 25
4.2 Allgemeiner Aufbau eines Java-Programms ....................................... 25
4.2.1 Übung ........................................................................................... 29
4.3 Ein Datentyp für ganze Zahlen (int) und arithmetische Ausdrücke 29
4.3.1 Übungen ...................................................................................... 33
4.4 Numerische Vergleichsausdrücke und eine Schleife
für die Programmierung von Wiederholungen ................................... 34
4.4.1 Übungen ...................................................................................... 36
4.5 Lernziele zu Kapitel 4 .............................................................................. 37
VIII Inhalt
5 Steueranweisungen und Struktogramme ...................................................... 39
5.1 Eine Methode zum Einlesen einer Integer-Zahl von der Tastatur .... 39
5.2 Die If-Anweisung ..................................................................................... 40
5.3 Kopfgesteuerte Schleifen ......................................................................... 42
5.4 Fußgesteuerte Schleifen ........................................................................... 43
5.5 Die Mehrfachverzweigung (switch-Anweisung) ................................ 44
5.6 Kontrollierte Abbrüche ........................................................................... 46
5.7 Logische Ausdrücke und der Datentyp boolean ................................. 47
5.7.1 Übung ........................................................................................... 51
5.7.2 Übung ........................................................................................... 52
5.8 Struktogramme ......................................................................................... 53
5.8.1 Übungen ...................................................................................... 56
5.9 Der Euklidische Algorithmus zur Berechnung des größten
gemeinsamen Teilers zweier ganzer Zahlen ........................................ 56
5.9.1 Übungen ...................................................................................... 64
5.10 Lernziele zu Kapitel 5 .............................................................................. 65
6 Gleitpunktzahlen, mathematische Funktionen, weitere ganzzahlige
Datentypen .......................................................................................................... 67
6.1 Gleitpunktzahlen, die Datentypen float und double .......................... 67
6.2 Konvertierung: int-Variablen (cid:316) float-/double-Variablen .................. 72
6.2.1 Explizite Konvertierung ............................................................. 72
6.2.2 Implizite Konvertierung ............................................................ 73
6.3 Mathematische Funktionen .................................................................... 74
6.3.1 Mathematische Konstanten ....................................................... 75
6.3.2 Potenzfunktionen ....................................................................... 75
6.3.3 Trigonometrische Funktionen ................................................... 76
6.3.4 Die Logarithmusfunktion .......................................................... 77
6.3.5 Betrag, Minimum und Maximum ............................................ 78
6.3.6 Abschneiden und Runden ......................................................... 78
6.3.7 Arcusfunktionen ......................................................................... 79
6.3.8 Pseudozufallszahlen ................................................................... 81
6.4 Weitere ganzzahlige Datentypen ........................................................... 83
6.4.1 Übung ........................................................................................... 83
6.5 Lernziele zu Kapitel 6 .............................................................................. 85
7 Felder (Arrays) .................................................................................................... 87
7.1 Grundlegende Eigenschaften ................................................................. 87
7.2 Arbeitsschritte zur Verarbeitung von Feldern ..................................... 87
7.2.1 (S1) Deklaration eines Feldes .................................................... 88
7.2.2 (S2) Speicherplatzbeschaffung für ein Feld ............................. 89
7.2.3 (S3) Wertzuweisung an eine Feldkomponente ....................... 89
Inhalt IX
7.3 Mehrfach indizierte Felder ...................................................................... 93
7.3.1 (S1) Deklaration eines mehrfach indizierten Feldes .............. 94
7.3.2 (S2) Speicherplatzbeschaffung für ein mehrfach
indiziertes Feld ............................................................................ 94
7.3.3 (S3) Wertzuweisung an eine Feldkomponente ....................... 94
7.4 Feldbasierte Algorithmen ....................................................................... 95
7.4.1 Das Horner Schema .................................................................... 96
7.4.2 Erläuterung zum Struktogramm des Horner Schemas ......... 97
7.5 Übungen .................................................................................................... 98
7.6 Lernziele zu Kapitel 7 .............................................................................. 98
8 Statische Methoden ............................................................................................ 99
8.1 Grundlagen ............................................................................................... 99
8.1.1 Übung ........................................................................................... 103
8.2 Modulübersichtsdiagramme .................................................................. 104
8.3 Felder und Methoden .............................................................................. 105
8.3.1 Übungen ...................................................................................... 106
8.4 Der Bubble Sortieralgorithmus .............................................................. 107
8.4.1 Übung ........................................................................................... 109
8.5 Das Sieb des Eratosthenes zur Bestimmung von Primzahlen ............ 110
8.6 Aufrufprinzipien für Methoden: Call by Value,
Call by Reference ...................................................................................... 116
8.7 Lernziele zu Kapitel 8 .............................................................................. 121
9 Zeichen und Zeichenketten .............................................................................. 123
9.1 Zeichen: Der Datentyp char .................................................................... 123
9.2 Die Klasse String als Datentyp für Zeichenketten ............................... 131
9.2.1 Vergleichen von Zeichenketten ................................................ 133
9.2.2 Felder von Zeichenketten .......................................................... 135
9.2.3 Zeichenketten und Zeichenfelder ............................................. 140
9.2.4 Verketten und Zerschneiden von Zeichenketten ................... 142
9.2.5 Konvertierung: Zeichenketten <-> Zahlen ............................... 145
9.3 Lernziele zu Kapitel 9 .............................................................................. 149
10 Das Klassenkonzept einer objektorientierten Programmiersprache ........ 151
10.1 Klassen mit Attributen ............................................................................ 151
10.1.1 Anwendung von Klassen mit Attributen ................................ 154
10.2 Klassen mit Attributen und Methoden ................................................. 159
10.3 Konstruktoren ........................................................................................... 162
10.4 Kapselung .................................................................................................. 166
X Inhalt
10.5 Vererbung ................................................................................................. 169
10.6 Überladen und Überschreiben von Methoden .................................... 175
10.7 Lernziele zu Kapitel 10 ............................................................................ 178
11 Zeichenorientierte Dateiverarbeitung ............................................................ 181
11.1 Allgemeine Vorbereitungen ................................................................... 182
11.2 Schreibender zeichenorientierter Zugriff .............................................. 182
11.2.1 Öffnen einer Datei zum Schreiben ........................................... 182
11.2.2 Öffnen einer Datei zum Schreiben mit Anhängen
am Dateiende .............................................................................. 183
11.2.3 Zuordnung eines Methodeninventars für
das zeichenorientierte Schreiben .............................................. 183
11.2.4 Schreiben eines Datensatzes ...................................................... 184
11.2.5 Schließen des schreibenden Zugriffs ....................................... 184
11.3 Lesender zeichenorientierter Zugriff ..................................................... 185
11.3.1 Öffnen einer Datei zum Lesen .................................................. 185
11.3.2 Zuordnung eines Methodeninventars für
das zeichenorientierte Lesen ..................................................... 186
11.3.3 Lesen eines Datensatzes als Zeichenkette ............................... 186
11.3.4 End of File (=: EOF) Steuerung beim Lesen einer Datei ........ 186
11.3.5 Schließen des lesenden Zugriffs ............................................... 187
11.4 Lernziele zu Kapitel 11 ............................................................................ 188
12 Listen .................................................................................................................... 189
12.1 Deklaration einer Liste ............................................................................ 191
12.2 Speicherplatzbeschaffung für eine Liste ............................................... 192
12.3 Einfügen von Knoten an das aktuelle Listenende ............................... 193
12.4 Die Länge einer Liste ermitteln .............................................................. 193
12.5 Lesender Zugriff auf einen Knoten der Liste ....................................... 193
12.6 Löschen eines Knotens aus der Liste ..................................................... 194
12.7 Überschreiben eines Knotens mit einem neuen Inhalt ........................ 194
12.8 Hinzufügen eines Knotens an eine i. Position ...................................... 195
12.9 Eine Liste in ein Feld konvertieren ........................................................ 195
12.10 Lesen einer Liste mit einem Iterator ...................................................... 196
12.11 Lernziele zu Kapitel 12 ............................................................................ 197
13 Formale Spezifikation syntaktischer Strukturen ......................................... 199
13.1 Zur Syntax von natürlichen und formalen Sprachen .......................... 199
13.2 Beschreibung einer Grammatik durch eine BNF ................................. 203
13.2.1 Beschreibung von Nichtterminalsymbolen ............................. 203
Inhalt XI
13.2.2 Beschreibung von Produktionsregeln ...................................... 204
13.2.3 Operatoren im REGELAUSDRUCK einer BNF ...................... 204
13.3 Lernziele zu Kapitel 13 ............................................................................ 207
14 Byteorientierte Dateiverarbeitung/Serialisierung von Klassen ................ 209
14.1 Schreibender serialisierter Zugriff ......................................................... 211
14.1.1 Öffnen einer Datei zum Schreiben ........................................... 211
14.1.2 Zuordnung eines Methodeninventars für
das serialiserte Schreiben ........................................................... 212
14.1.3 Schreiben eines Datensatzes ...................................................... 212
14.1.4 Schließen des schreibenden Zugriffs ....................................... 213
14.2 Lesender serialisierter Zugriff ................................................................ 213
14.2.1 Öffnen einer Datei zum Lesen .................................................. 213
14.2.2 Zuordnung eines Methodeninventars für
das serialisierte Lesen ................................................................. 213
14.2.3 Lesen einer Instanz ..................................................................... 213
14.2.4 End of File (=: EOF) Steuerung beim serialisierten Lesen
einer Datei .................................................................................... 214
14.2.5 Schließen des lesenden Zugriffs ............................................... 215
14.3 Lernziele zu Kapitel 14 ............................................................................ 220
15 Mengen ................................................................................................................. 221
15.1 Deklaration einer Menge ......................................................................... 222
15.2 Speicherplatzbeschaffung für eine Menge ............................................ 222
15.3 Einfügen von Elementen in eine Menge ............................................... 223
15.4 Die Mächtigkeit (Anzahl der Elemente) einer Menge ermitteln ........ 225
15.5 Löschen eines Elements aus der Menge ................................................ 225
15.6 Prüfen, ob die Menge leer ist .................................................................. 226
15.7 Lesen einer Menge mit einem Iterator .................................................. 226
15.8 Lernziele zu Kapitel 15 ............................................................................ 233
16 Graphen, Rekursion, Binärbäume .................................................................. 235
16.1 Graphen ..................................................................................................... 235
16.2 Rekursion .................................................................................................. 243
16.3 Binärbäume ............................................................................................... 248
16.4 Lernziele zu Kapitel 16 ............................................................................ 258
Sachwortverzeichnis .................................................................................................. 259
Description:Im Zentrum der Praktischen Informatik steht die Programmierung eines Rechners. Programmierung bedeutet im Wesentlichen die Übertragung von Funktionen des menschlichen Denkens auf einen Digitalrechner. Damit dieses gelingt, benötigt man Vorstellungen, wie ein Rechner aufgebaut ist, wie Daten unters