Norbert Heiderich, Wolfgang Meyer
Technische Probleme lösen mit C/C++
Von der Analyse bis zur Dokumentation
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.1 Kommentare
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
235
7.7 Typumwandlungen
237
7.8 Strukturierte Programmierung vs. OOP
240
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
© 2009-2024 ciando GmbH