![Think Like a Programmer - Typische Programmieraufgaben kreativ lösen am Beispiel von C++ Think Like a Programmer - Typische Programmieraufgaben kreativ lösen am Beispiel von C++](/img/books/width167/3826696042_k.jpg)
Think Like a Programmer - Typische Programmieraufgaben kreativ lösen am Beispiel von C++
von: V. Anton Spraul
mitp Verlags GmbH & Co. KG, 2013
ISBN: 9783826696046
Sprache: Deutsch
304 Seiten, Download: 2652 KB
Format: EPUB, PDF, auch als Online-Lesen
Mehr zum Inhalt
![](/img/standard/library2/liniequerverlinkung.png)
Think Like a Programmer - Typische Programmieraufgaben kreativ lösen am Beispiel von C++
Cover | 1 | ||
Titel | 3 | ||
Impressum | 4 | ||
Inhaltsverzeichnis | 5 | ||
Danksagungen | 11 | ||
Einführung | 13 | ||
Über dieses Buch | 15 | ||
Voraussetzungen | 16 | ||
Ausgewählte Themen | 16 | ||
Programmierstil | 16 | ||
Übungen | 17 | ||
Warum C++? | 17 | ||
Strategien zur Problemlösung | 19 | ||
1.1 Klassische Rätsel | 20 | ||
1.1.1 Fuchs, Gans und Getreidesack | 21 | ||
Aufgabe: Wie kann der Fluss überquert werden? | 21 | ||
1.1.2 Schiebepuzzles | 25 | ||
Aufgabe: Verschieben der 8 | 26 | ||
Aufgabe: Verschieben der 5 | 27 | ||
1.1.3 Sudoku | 30 | ||
Aufgabe: Vervollständigen eines Sudoku-Quadrats | 31 | ||
1.1.4 Das Quarrasi-Schloss | 33 | ||
Aufgabe: Öffnen des außerirdischen Schlosses | 33 | ||
1.2 Gängige Verfahren zur Problemlösung | 36 | ||
1.2.1 Niemals ohne Plan | 37 | ||
1.2.2 Umformulieren der Aufgabenstellung | 38 | ||
1.2.3 Zerlegung in Teilaufgaben | 39 | ||
1.2.4 Mit Bekanntem anfangen | 40 | ||
1.2.5 Reduktion der Problemstellung | 41 | ||
1.2.6 Analogien suchen | 42 | ||
1.2.7 Experimentieren | 43 | ||
1.2.8 Nicht entmutigen lassen | 44 | ||
1.3 Übungen | 45 | ||
Wahre Rätsel | 47 | ||
2.1 Verwendete C++-Syntax | 47 | ||
2.2 Ausgabe von Mustern | 48 | ||
Aufgabe: Halbiertes Quadrat | 48 | ||
Aufgabe: Quadrat (Halbiertes Quadrat, Reduktion) | 48 | ||
Aufgabe: Zeile (Halbiertes Quadrat, weitere Reduktion) | 49 | ||
Aufgabe: Herunterzählen durch Hochzählen | 50 | ||
Aufgabe: Hochkant stehendes Dreieck | 51 | ||
2.3 Eingabeverarbeitung | 54 | ||
Aufgabe: Test einer Luhn-Prüfsumme | 54 | ||
2.3.1 Zerlegung der Aufgabenstellung | 56 | ||
Aufgabe: Ziffer in Ganzzahl konvertieren | 58 | ||
Aufgabe: Test einer Luhn-Prüfsumme fester Länge | 60 | ||
Aufgabe: Test einer einfachen Prüfsumme fester Länge | 60 | ||
Aufgabe: Positiv oder negativ | 63 | ||
2.3.2 Zusammenstellen der Teillösungen | 64 | ||
2.4 Statusverfolgung | 66 | ||
Aufgabe: Entschlüsseln einer Botschaft | 66 | ||
Aufgabe: Einlesen einer Zahl mit drei oder vier Ziffern | 71 | ||
Aufgabe: Einlesen einer Zahl mit drei oder vier Ziffern, weiter vereinfacht | 72 | ||
2.5 Fazit | 81 | ||
2.6 Übungen | 81 | ||
Arrays | 85 | ||
3.1 Array-Grundlagen | 86 | ||
3.1.1 Speichern | 86 | ||
3.1.2 Kopieren | 87 | ||
3.1.3 Zugriff und Suche | 88 | ||
3.1.4 Sortieren | 89 | ||
3.1.5 Statistische Werte | 92 | ||
3.2 Aufgabenstellungen mit Arrays | 93 | ||
Aufgabe: Modalwert berechnen | 93 | ||
3.2.1 Refactoring | 97 | ||
3.3 Arrays mit fest vorgegebenen Daten | 100 | ||
3.4 Nicht-skalare Arrays | 102 | ||
3.5 Mehrdimensionale Arrays | 104 | ||
3.6 Wann werden Arrays verwendet? | 108 | ||
3.7 Übungen | 113 | ||
Zeiger und dynamische Speicherverwaltung | 115 | ||
4.1 Zeiger-Grundlagen | 115 | ||
4.2 Vorteile von Zeigern | 117 | ||
4.2.1 Festlegung der Größe von Datenstrukturen zur Laufzeit | 117 | ||
4.2.2 Größenänderung von Datenstrukturen | 117 | ||
4.2.3 Gemeinsame Speichernutzung | 118 | ||
4.3 Wann werden Zeiger verwendet? | 119 | ||
4.4 Speicherverwaltung | 120 | ||
4.4.1 Stack und Heap | 120 | ||
4.4.2 Arbeitsspeicher | 124 | ||
4.4.3 Lebensdauer | 125 | ||
4.5 Aufgabenstellungen mit Zeigern | 126 | ||
4.5.1 Zeichenketten variabler Länge | 127 | ||
Aufgabe: Bearbeitung von Zeichenketten variabler Länge | 127 | ||
4.5.2 Verkettete Listen | 139 | ||
Aufgabe: Nachverfolgen einer unbekannten Zahl von Schülerdatensätzen | 139 | ||
4.6 Fazit und Ausblick | 148 | ||
4.7 Übungen | 149 | ||
Klassen | 151 | ||
5.1 Klassen-Grundlagen | 151 | ||
5.2 Ziele bei der Verwendung von Klassen | 153 | ||
5.2.1 Verkapselung | 154 | ||
5.2.2 Wiederverwendung von Code | 155 | ||
5.2.3 Zerlegung in Teilaufgaben | 155 | ||
5.2.4 Information Hiding | 156 | ||
5.2.5 Verständlichkeit | 158 | ||
5.2.6 Ausdrucksfähigkeit | 159 | ||
5.3 Eine einfache Klasse | 159 | ||
Aufgabe: Notenliste | 160 | ||
5.3.1 Grundgerüst einer Klasse | 160 | ||
5.3.2 Unterstützende Methoden | 165 | ||
5.4 Klassen mit dynamischen Daten | 169 | ||
Aufgabe: Nachverfolgen einer unbekannten Zahl von Schülerdatensätzen | 169 | ||
5.4.1 Hinzufügen eines Knotens | 172 | ||
5.4.2 Umorganisieren einer Liste | 175 | ||
5.4.3 Destruktor | 179 | ||
5.4.4 Tiefe Kopien (Deep Copy) | 180 | ||
5.4.5 Klassen mit dynamischen Daten im Überblick | 185 | ||
5.5 Fehlervermeidung | 186 | ||
5.5.1 Fingierte Klassen | 187 | ||
5.5.2 Monotalente | 188 | ||
5.6 Übungen | 188 | ||
Rekursion | 191 | ||
6.1 Grundlagen der Rekursion | 191 | ||
6.2 Start- und Endrekursion | 192 | ||
Aufgabe: Wie viele Papageien? | 192 | ||
6.2.1 Lösungsweg 1 | 193 | ||
6.2.2 Lösungsweg 2 | 194 | ||
Aufgabe: Wer ist unser bester Kunde? | 196 | ||
6.2.3 Lösungsweg 1 | 198 | ||
6.2.4 Lösungsweg 2 | 199 | ||
6.3 Das Hauptkonzept der Rekursion | 201 | ||
Aufgabe: Berechnung der Summe eines Arrays von Ganzzahlen | 202 | ||
6.4 Häufige Fehler | 204 | ||
6.4.1 Zu viele Parameter | 205 | ||
6.4.2 Globale Variablen | 206 | ||
6.5 Rekursion bei dynamischen Datenstrukturen | 208 | ||
6.5.1 Rekursion und verkettete Listen | 208 | ||
Aufgabe: Negative Zahlen in einer einfach verketteten Liste zählen | 210 | ||
6.5.2 Rekursion und Binärbäume | 211 | ||
Aufgabe: Suche nach dem größten Wert in einem Binärbaum | 213 | ||
6.6 Wrapper-Funktionen | 214 | ||
Aufgabe: Anzahl der Blätter eines Binärbaums | 214 | ||
6.7 Wann wird Rekursion verwendet? | 217 | ||
6.7.1 Rekursion: Gegenargumente | 218 | ||
Aufgabe: Ausgabe einer verketteten Liste | 220 | ||
Aufgabe: Ausgabe einer verketteten Liste in umgekehrter Reihenfolge | 220 | ||
6.8 Übungen | 222 | ||
Wiederverwendung von Code | 225 | ||
7.1 Sinnvolle und nicht sinnvolle Wiederverwendung von Code | 225 | ||
7.2 Komponenten | 227 | ||
7.2.1 Code-Blöcke | 227 | ||
7.2.2 Algorithmen | 227 | ||
7.2.3 Entwurfsmuster | 228 | ||
7.2.4 Abstrakte Datentypen | 229 | ||
7.2.5 Bibliotheken | 230 | ||
7.3 Kenntnisse über Komponenten erweitern | 230 | ||
7.3.1 Forschendes Lernen | 231 | ||
Aufgabe: Klassenvorsteher | 232 | ||
7.3.2 Lernen bei Bedarf | 235 | ||
Aufgabe: Effizientes Durchlaufen einer Liste | 236 | ||
7.4 Auswahl eines Komponententyps | 244 | ||
7.4.1 Komponentenwahl in der Praxis | 246 | ||
Aufgabe: Teilweise Sortierung | 246 | ||
7.4.2 Vergleich der Ergebnisse | 251 | ||
7.5 Übungen | 251 | ||
Denken wie ein Programmierer | 253 | ||
8.1 Das Gesamtkonzept | 253 | ||
8.1.1 Stärken ausschöpfen, Schwächen lindern | 254 | ||
8.1.2 Aufbau des Gesamtkonzepts | 261 | ||
8.2 Beliebige Aufgabenstellungen in Angriff nehmen | 262 | ||
Aufgabe: Schummeln beim Galgenmännchen | 264 | ||
8.2.1 Wie man schummelt | 265 | ||
8.2.2 Erforderliche Operationen zum Schummeln beim Galgenmännchen | 267 | ||
8.2.3 Der erste Entwurf | 269 | ||
8.2.4 Der erste Code | 270 | ||
8.2.5 Analyse der ersten Ergebnisse | 281 | ||
8.2.6 Die Kunst des Problemlösens | 282 | ||
8.3 Programmierkenntnisse weiterentwickeln | 283 | ||
8.3.1 Neue Programmiersprachen | 284 | ||
8.3.2 Kenntnisse in bekannten Programmiersprachen erweitern | 287 | ||
8.3.3 Zusätzliche Bibliotheken | 288 | ||
8.3.4 Besuchen Sie einen Kurs | 289 | ||
8.4 Fazit | 289 | ||
8.5 Übungen | 291 | ||
Stichwortverzeichnis | 293 |
Kategorien
Kategorien
Service
Info/Kontakt