Inhalt | 8 |
Einleitung | 14 |
1 Systematik der Problemlösung | 18 |
1.1 Phasen der Programmentwicklung | 18 |
1.2 Software-Lebenszyklus | 20 |
1.3 Software-Entwicklungsverfahren | 22 |
2 Erste Gehversuche mit C/C++ | 27 |
2.1 Warum gerade C/C++? | 27 |
2.2 Compiler und Interpreter | 29 |
2.3 Übersetzen eines C/C++-Programms | 31 |
2.4 Programmstart | 32 |
3 Die Entwicklungsumgebung Visual C++ | 33 |
3.1 Installation von VC++ | 33 |
3.2 Starten von VC++ | 35 |
3.3 Erstellen eines neuen Projektes | 37 |
3.3.1 Win32-Projekte | 38 |
3.3.1.1 Variante 1 – VC++ leistet Vorarbeit | 39 |
3.3.1.2 Variante 2 – leeres Projekt | 40 |
3.3.2 CLR-Projekte | 43 |
3.4 Übersetzen eines eigenen Programms | 45 |
3.5 Ausführen eines eigenen Programms | 48 |
3.6 Paradigmen der Projektorganisation | 48 |
4 Grundlegende Sprach- und Steuerungselemente | 51 |
4.2 Datentypen und Variablen | 52 |
4.2.1 Variablennamen | 53 |
4.2.2 Ganzzahlige Variablen | 53 |
4.2.3 Fließkommazahlen | 55 |
4.2.4 Zeichen | 56 |
4.2.5 Felder | 57 |
4.2.5.1 Eindimensionale Felder | 57 |
4.2.5.2 Mehrdimensionale Felder | 58 |
4.2.5.3 Zugriff auf die Elemente eines Feldes | 60 |
4.2.5.4 Startwertzuweisung für ein- und mehrdimensionale Arrays | 62 |
4.2.6 Zeichenketten | 64 |
4.3 Konstanten | 65 |
4.4 Operatoren | 66 |
4.4.1 Vorzeichenoperatoren | 66 |
4.4.2 Arithmetische Operatoren | 66 |
4.4.2.1 Addition + | 66 |
4.4.2.2 Subtraktion ? | 66 |
4.4.2.3 Multiplikation * | 67 |
4.4.2.4 Division / | 67 |
4.4.2.5 Modulo % | 67 |
4.4.2.6 Zuweisung = | 67 |
4.4.2.7 Kombinierte Zuweisungen | 68 |
4.4.2.8 Inkrementierung ++ | 68 |
4.4.2.9 Dekrementierung -- | 69 |
4.4.3 Vergleichsoperatoren | 69 |
4.4.3.1 Gleichheit == | 69 |
4.4.3.2 Ungleichheit != | 69 |
4.4.3.3 Kleiner < | 70 |
4.4.3.4 Größer > | 70 |
4.4.3.5 Kleiner gleich <= | 70 |
4.4.3.6 Größer gleich >= | 71 |
4.4.4 Logische Operatoren | 71 |
4.4.4.1 Logisches NICHT ! | 71 |
4.4.4.2 Logisches UND && | 71 |
4.4.4.3 Logisches ODER || | 71 |
4.4.5 Typumwandlungsoperator | 72 |
4.4.6 Speicherberechnungsoperator | 72 |
4.4.7 Bedingungsoperator | 73 |
4.4.8 Indizierungsoperator | 74 |
4.4.9 Klammerungsoperator | 74 |
4.5 Anweisungen und Blöcke | 76 |
4.6 Alternationen | 76 |
4.6.1 Einfache Abfragen (if – else) | 76 |
4.6.2 Mehrfachabfragen (else – if) | 77 |
4.6.3 Die switch-case-Anweisung | 78 |
4.7 Iterationen | 80 |
4.7.1 Zählergesteuerte Schleifen (for) | 80 |
4.7.2 Kopfgesteuerte Schleifen (while) | 84 |
4.7.3 Fußgesteuerte Schleifen (do – while) | 85 |
4.7.4 Schleifenabbruch (continue) | 86 |
4.7.5 Schleifenabbruch (break) | 87 |
4.7.6 Schleifenumwandlungen | 89 |
4.8 Funktionen | 89 |
4.8.1 Formaler Aufbau einer Funktion | 90 |
4.8.1.1 Der Funktionskopf | 91 |
4.8.1.2 Der Funktionsrumpf | 92 |
4.8.2 Datentyp und Deklaration einer Funktion – Prototyping | 93 |
4.8.3 Das Prinzip der Parameterübergabe | 98 |
4.8.3.1 Aufrufverfahren call by value | 98 |
4.8.3.2 Aufrufverfahren call by reference | 100 |
4.8.3.3 Adressoperator, Zeiger und Dereferenzierung | 103 |
4.8.4 Regeln für ein erfolgreiches Prototyping | 104 |
4.8.5 Die exit()-Funktion | 105 |
4.8.6 Rekursive Funktionen | 105 |
4.9 Ein- und Ausgabe | 108 |
4.9.1 Formatierte Eingabe mit scanf() | 108 |
4.9.2 Formatierte Ausgabe mit printf() | 109 |
4.9.3 Arbeiten mit Dateien | 110 |
4.9.3.1 Öffnen der Datei | 111 |
4.9.3.2 Verarbeiten der Datensätze | 111 |
4.9.3.3 Schließen der Datei | 112 |
4.9.3.4 stdio.h | 112 |
4.9.3.5 fflush() und stdin | 114 |
5 Strukturierte Programmierung | 115 |
5.1 Problemstellung | 116 |
5.2 Problemanalyse | 117 |
5.3 Struktogramm nach Nassi-Shneiderman | 120 |
5.3.1 Sequenz | 122 |
5.3.2 Alternation | 124 |
5.3.3 Verschachtelung | 125 |
5.3.4 Verzweigung | 126 |
5.3.5 Schleifen | 128 |
5.3.5.1 Zählergesteuerte Schleife | 128 |
5.3.5.2 Kopfgesteuerte Schleife | 132 |
5.3.5.3 Fußgesteuerte Schleifen | 134 |
5.3.5.4 Endlosschleifen | 135 |
5.3.5.5 Kriterien zur Schleifenauswahl | 135 |
5.3.6 Programm- oder Funktionsaufruf | 135 |
5.3.7 Aussprung | 136 |
5.3.8 Rechnergestützte Erstellung von Struktogrammen | 137 |
5.3.8.1 StruktEd | 137 |
5.3.8.2 hus-Struktogrammer | 144 |
5.4 Flussdiagramm nach DIN 66001 | 152 |
5.5 Programmerstellung | 154 |
5.6 Programmtest | 154 |
5.7 Programmlauf | 155 |
5.8 Dokumentation nach DIN 66230 | 156 |
5.8.1 Funktion und Aufbau des Programms | 156 |
5.8.2 Programmkenndaten | 157 |
5.8.3 Betrieb des Programms | 158 |
5.8.4 Ergänzungen | 158 |
5.9 Aspekte des Qualitätsmanagements EN-ISO 9000 | 159 |
5.10 Algorithmus – was ist das? | 160 |
5.11 EVA-Prinzip | 166 |
5.12 Programmierung von Formelwerken | 167 |
6 Lösung einfacher Probleme | 172 |
6.1 Umrechnung von Temperatursystemen | 172 |
6.2 Flächenberechnung geradlinig begrenzter Flächen (Polygone) | 178 |
6.2.1 Erste Problemvariation: Berechnung der Schwerpunktkoordinaten S(xS | yS) von polygonförmig begrenzten Flächen | 185 |
6.2.2 Zweite Problemvariation: Suche nach einem „günstigen“ Treffpunkt | 186 |
6.3 Berechnung einer Brückenkonstruktion | 187 |
6.4 Schaltjahrüberprüfung | 191 |
6.5 Ein Problem aus der Energiewirtschaft | 197 |
6.6 Logarithmische Achsenteilung | 207 |
7 Objektorientierte Programmierung (OOP) | 215 |
7.1 Modellbildung mittels Abstraktion | 215 |
7.2 Klassen und Objekte | 216 |
7.3 Attribute und Methoden einer Klasse | 219 |
7.4 Bruchrechnung mit OOP | 220 |
7.5 Vererbung | 229 |
7.6 Strings | 236 |
7.7 Typumwandlungen | 237 |
7.8 Strukturierte Programmierung vs. OOP | 241 |
8 Lösung fortgeschrittener Probleme | 242 |
8.1 Grafische Darstellung funktionaler Abhängigkeiten | 242 |
8.1.1 Welt- und Screenkoordinaten | 244 |
8.1.2 Koordinatentransformationen | 246 |
8.1.3 Darstellung der Sinusfunktion | 252 |
8.1.4 Darstellung quadratischer Parabeln | 256 |
8.1.5 Spannungsteilerkennlinien | 259 |
8.2 Lösung technisch-wissenschaftlicher Probleme | 261 |
8.2.1 Widerstandsreihen E6 bis E96 | 261 |
8.2.2 Farbcodierung von Widerständen nach DIN 41429 | 264 |
8.2.3 Fourier-Synthese periodischer empirischer Funktionen | 267 |
8.2.4 Fourier-Analyse empirischer Funktionen | 275 |
8.3 Nullstellenbestimmung von Funktionen | 280 |
8.3.1 Inkrementverfahren und Intervallhalbierung | 280 |
8.3.2 Die regula falsi | 285 |
8.3.3 Das Newton-Verfahren | 287 |
8.4 Numerische Integration | 290 |
8.4.1 Riemannsche Unter- und Obersummen | 290 |
8.4.2 Trapezregel | 294 |
8.4.3 Simpsonsche Regel | 299 |
8.4.4 Effektivwertberechnungen | 304 |
8.5 Einbindung eigener Klassen | 306 |
8.5.1 Das „Platinenproblem“ als objektorientierte Konsolenanwendung | 306 |
8.5.2 Das „Platinenproblem“ in der Erweiterung mit grafischer Benutzeroberfläche | 311 |
9 Lösung komplexer Probleme | 315 |
9.1 Kurvendiskussion und Funktionsplotter am Beispiel ganzrationaler Funktionen bis 3. Ordnung | 315 |
9.2 Ausgleichsrechnung – Bestimmung der „besten“ Geraden in einer Messreihe | 318 |
9.3 Digitaltechnik | 328 |
10 Tabellen und Übersichten | 342 |
10.1 Datentypen und ihre Wertebereiche | 342 |
10.2 Vergleich der Symbole nach DIN 66 001 und der Nassi-Shneiderman-Darstellung | 343 |
10.3 Schlüsselwörter ANSI C | 344 |
10.4 Erweiterte Schlüsselwörter C++ | 346 |
10.5 ASCII-Tabelle | 349 |
10.6 Standardfunktionen und ihre Zuordnung zu den Header-Dateien (Include) | 351 |
Literatur | 355 |
Index | 356 |