Think Like a Programmer

Typische Programmieraufgaben kreativ lösen am Beispiel von C++
 
 
MITP (Verlag)
  • 1. Auflage
  • |
  • erschienen am 25. Juni 2013
  • |
  • 304 Seiten
 
E-Book | ePUB ohne DRM | Systemvoraussetzungen
E-Book | PDF ohne DRM | Systemvoraussetzungen
978-3-8266-9604-6 (ISBN)
 
Typische Programmieraufgaben kreativ lösen am Beispiel von C++
  • Von der Aufgabe zur Lösung - so gehen Sie vor
  • Probleme analysieren und schrittweise bearbeiten
  • Systematisches Vorgehen lernen und anwenden

Aus dem Inhalt:
  • Strategien zur Problemlösung
  • Eingabeverarbeitung
  • Statusverfolgung
  • Arrays
  • Zeiger und dynamische Speicherverwaltung
  • Klassen
  • Rekursion
  • Wiederverwendung von Code
  • Rekursive und iterative Programmierung
  • Denken wie ein Programmierer

Die Herausforderung beim Programmieren besteht nicht im Erlernen der Syntax einer bestimmten Sprache, sondern in der Fähigkeit, auf kreative Art Probleme zu lösen. In diesem einzigartigen Buch widmet sich der Autor V. Anton Spraul genau jenen Fähigkeiten, die in normalen Lehrbüchern eher nicht behandelt werden: die Fähigkeit, wie ein Programmierer zu denken und Aufgaben zu lösen.
In den einzelnen Kapiteln behandelt er jeweils verschiedene Programmierkonzepte wie beispielsweise Klassen, Zeiger und Rekursion, und fordert den Leser mit erweiterbaren Übungen zur praktischen Anwendung des Gelernten auf.

Sie lernen unter anderem:
  • Probleme in diskrete Einzelteile zerlegen, die sich leichter lösen lassen
  • Funktionen, Klassen und Bibliotheken möglichst effizient nutzen und wiederholt verwenden
  • die perfekte Datenstruktur für eine Aufgabenstellung auswählen
  • anspruchsvollere Programmiertechniken wie Rekursion und dynamischen Speicher einsetzen
  • Ihre Gendanken ordnen und Strategien entwickeln, um bestimmte Problemkategorien in Angriff zu nehmen

Die Beispiele im Buch werden mit C++ gelöst, die dargestellten kreativen Problemlösungskonzepte gehen aber weit über die einzelnen Programmiersprachen und oft sogar über den Bereich der Informatik hinaus.
Denn wie die fähigsten Programmierer wissen, handelt es sich beim Schreiben herausragender Quelltexte um kreative Kunst und der erste Schritt auf dem Weg zum eigenen Meisterwerk besteht darin, wie ein Programmierer zu denken.

Über den Autor:
V. Anton Spraul hat über 15 Jahre lang Vorlesungen über die Grundlagen der Programmierung und Informatik gehalten. In diesem Buch fasst er die von ihm dabei perfektionierten Verfahren zusammen. Er ist auch Autor von »Computer Science Made Simple«.
2013
  • Deutsch
  • Frechen
  • |
  • Deutschland
mitp Verlags GmbH & Co.KG
  • Programmierer
  • 2,59 MB
978-3-8266-9604-6 (9783826696046)
weitere Ausgaben werden ermittelt
V. Anton Spraul gibt seit mehr als 15 Jahren Kurse zur Einführung in die Programmierung und Computerwissenschaften. In diesem Buch vereint er die Techniken, mit denen er in zahlreichen Einzelstunden Programmierschülern geholfen hat.
1 - Cover [Seite 1]
2 - Titel [Seite 3]
3 - Impressum [Seite 4]
4 - Inhaltsverzeichnis [Seite 5]
5 - Danksagungen [Seite 11]
6 - Einführung [Seite 13]
6.1 - Über dieses Buch [Seite 15]
6.1.1 - Voraussetzungen [Seite 16]
6.1.2 - Ausgewählte Themen [Seite 16]
6.1.3 - Programmierstil [Seite 16]
6.1.4 - Übungen [Seite 17]
6.1.5 - Warum C++? [Seite 17]
7 - Strategien zur Problemlösung [Seite 19]
7.1 - 1.1 Klassische Rätsel [Seite 20]
7.1.1 - 1.1.1 Fuchs, Gans und Getreidesack [Seite 21]
7.1.1.1 - Aufgabe: Wie kann der Fluss überquert werden? [Seite 21]
7.1.2 - 1.1.2 Schiebepuzzles [Seite 25]
7.1.2.1 - Aufgabe: Verschieben der 8 [Seite 26]
7.1.2.2 - Aufgabe: Verschieben der 5 [Seite 27]
7.1.3 - 1.1.3 Sudoku [Seite 30]
7.1.3.1 - Aufgabe: Vervollständigen eines Sudoku-Quadrats [Seite 31]
7.1.4 - 1.1.4 Das Quarrasi-Schloss [Seite 33]
7.1.4.1 - Aufgabe: Öffnen des außerirdischen Schlosses [Seite 33]
7.2 - 1.2 Gängige Verfahren zur Problemlösung [Seite 36]
7.2.1 - 1.2.1 Niemals ohne Plan [Seite 37]
7.2.2 - 1.2.2 Umformulieren der Aufgabenstellung [Seite 38]
7.2.3 - 1.2.3 Zerlegung in Teilaufgaben [Seite 39]
7.2.4 - 1.2.4 Mit Bekanntem anfangen [Seite 40]
7.2.5 - 1.2.5 Reduktion der Problemstellung [Seite 41]
7.2.6 - 1.2.6 Analogien suchen [Seite 42]
7.2.7 - 1.2.7 Experimentieren [Seite 43]
7.2.8 - 1.2.8 Nicht entmutigen lassen [Seite 44]
7.3 - 1.3 Übungen [Seite 45]
8 - Wahre Rätsel [Seite 47]
8.1 - 2.1 Verwendete C++-Syntax [Seite 47]
8.2 - 2.2 Ausgabe von Mustern [Seite 48]
8.2.1 - Aufgabe: Halbiertes Quadrat [Seite 48]
8.2.2 - Aufgabe: Quadrat (Halbiertes Quadrat, Reduktion) [Seite 48]
8.2.3 - Aufgabe: Zeile (Halbiertes Quadrat, weitere Reduktion) [Seite 49]
8.2.4 - Aufgabe: Herunterzählen durch Hochzählen [Seite 50]
8.2.5 - Aufgabe: Hochkant stehendes Dreieck [Seite 51]
8.3 - 2.3 Eingabeverarbeitung [Seite 54]
8.3.1 - Aufgabe: Test einer Luhn-Prüfsumme [Seite 54]
8.3.2 - 2.3.1 Zerlegung der Aufgabenstellung [Seite 56]
8.3.2.1 - Aufgabe: Ziffer in Ganzzahl konvertieren [Seite 58]
8.3.2.2 - Aufgabe: Test einer Luhn-Prüfsumme fester Länge [Seite 60]
8.3.2.3 - Aufgabe: Test einer einfachen Prüfsumme fester Länge [Seite 60]
8.3.2.4 - Aufgabe: Positiv oder negativ [Seite 63]
8.3.3 - 2.3.2 Zusammenstellen der Teillösungen [Seite 64]
8.4 - 2.4 Statusverfolgung [Seite 66]
8.4.1 - Aufgabe: Entschlüsseln einer Botschaft [Seite 66]
8.4.2 - Aufgabe: Einlesen einer Zahl mit drei oder vier Ziffern [Seite 71]
8.4.3 - Aufgabe: Einlesen einer Zahl mit drei oder vier Ziffern, weiter vereinfacht [Seite 72]
8.5 - 2.5 Fazit [Seite 81]
8.6 - 2.6 Übungen [Seite 81]
9 - Arrays [Seite 85]
9.1 - 3.1 Array-Grundlagen [Seite 86]
9.1.1 - 3.1.1 Speichern [Seite 86]
9.1.2 - 3.1.2 Kopieren [Seite 87]
9.1.3 - 3.1.3 Zugriff und Suche [Seite 88]
9.1.4 - 3.1.4 Sortieren [Seite 89]
9.1.5 - 3.1.5 Statistische Werte [Seite 92]
9.2 - 3.2 Aufgabenstellungen mit Arrays [Seite 93]
9.2.1 - Aufgabe: Modalwert berechnen [Seite 93]
9.2.2 - 3.2.1 Refactoring [Seite 97]
9.3 - 3.3 Arrays mit fest vorgegebenen Daten [Seite 100]
9.4 - 3.4 Nicht-skalare Arrays [Seite 102]
9.5 - 3.5 Mehrdimensionale Arrays [Seite 104]
9.6 - 3.6 Wann werden Arrays verwendet? [Seite 108]
9.7 - 3.7 Übungen [Seite 113]
10 - Zeiger und dynamische Speicherverwaltung [Seite 115]
10.1 - 4.1 Zeiger-Grundlagen [Seite 115]
10.2 - 4.2 Vorteile von Zeigern [Seite 117]
10.2.1 - 4.2.1 Festlegung der Größe von Datenstrukturen zur Laufzeit [Seite 117]
10.2.2 - 4.2.2 Größenänderung von Datenstrukturen [Seite 117]
10.2.3 - 4.2.3 Gemeinsame Speichernutzung [Seite 118]
10.3 - 4.3 Wann werden Zeiger verwendet? [Seite 119]
10.4 - 4.4 Speicherverwaltung [Seite 120]
10.4.1 - 4.4.1 Stack und Heap [Seite 120]
10.4.2 - 4.4.2 Arbeitsspeicher [Seite 124]
10.4.3 - 4.4.3 Lebensdauer [Seite 125]
10.5 - 4.5 Aufgabenstellungen mit Zeigern [Seite 126]
10.5.1 - 4.5.1 Zeichenketten variabler Länge [Seite 127]
10.5.1.1 - Aufgabe: Bearbeitung von Zeichenketten variabler Länge [Seite 127]
10.5.2 - 4.5.2 Verkettete Listen [Seite 139]
10.5.2.1 - Aufgabe: Nachverfolgen einer unbekannten Zahl von Schülerdatensätzen [Seite 139]
10.6 - 4.6 Fazit und Ausblick [Seite 148]
10.7 - 4.7 Übungen [Seite 149]
11 - Klassen [Seite 151]
11.1 - 5.1 Klassen-Grundlagen [Seite 151]
11.2 - 5.2 Ziele bei der Verwendung von Klassen [Seite 153]
11.2.1 - 5.2.1 Verkapselung [Seite 154]
11.2.2 - 5.2.2 Wiederverwendung von Code [Seite 155]
11.2.3 - 5.2.3 Zerlegung in Teilaufgaben [Seite 155]
11.2.4 - 5.2.4 Information Hiding [Seite 156]
11.2.5 - 5.2.5 Verständlichkeit [Seite 158]
11.2.6 - 5.2.6 Ausdrucksfähigkeit [Seite 159]
11.3 - 5.3 Eine einfache Klasse [Seite 159]
11.3.1 - Aufgabe: Notenliste [Seite 160]
11.3.2 - 5.3.1 Grundgerüst einer Klasse [Seite 160]
11.3.3 - 5.3.2 Unterstützende Methoden [Seite 165]
11.4 - 5.4 Klassen mit dynamischen Daten [Seite 169]
11.4.1 - Aufgabe: Nachverfolgen einer unbekannten Zahl von Schülerdatensätzen [Seite 169]
11.4.2 - 5.4.1 Hinzufügen eines Knotens [Seite 172]
11.4.3 - 5.4.2 Umorganisieren einer Liste [Seite 175]
11.4.4 - 5.4.3 Destruktor [Seite 179]
11.4.5 - 5.4.4 Tiefe Kopien (Deep Copy) [Seite 180]
11.4.6 - 5.4.5 Klassen mit dynamischen Daten im Überblick [Seite 185]
11.5 - 5.5 Fehlervermeidung [Seite 186]
11.5.1 - 5.5.1 Fingierte Klassen [Seite 187]
11.5.2 - 5.5.2 Monotalente [Seite 188]
11.6 - 5.6 Übungen [Seite 188]
12 - Rekursion [Seite 191]
12.1 - 6.1 Grundlagen der Rekursion [Seite 191]
12.2 - 6.2 Start- und Endrekursion [Seite 192]
12.2.1 - Aufgabe: Wie viele Papageien? [Seite 192]
12.2.2 - 6.2.1 Lösungsweg 1 [Seite 193]
12.2.3 - 6.2.2 Lösungsweg 2 [Seite 194]
12.2.3.1 - Aufgabe: Wer ist unser bester Kunde? [Seite 196]
12.2.4 - 6.2.3 Lösungsweg 1 [Seite 198]
12.2.5 - 6.2.4 Lösungsweg 2 [Seite 199]
12.3 - 6.3 Das Hauptkonzept der Rekursion [Seite 201]
12.3.1 - Aufgabe: Berechnung der Summe eines Arrays von Ganzzahlen [Seite 202]
12.4 - 6.4 Häufige Fehler [Seite 204]
12.4.1 - 6.4.1 Zu viele Parameter [Seite 205]
12.4.2 - 6.4.2 Globale Variablen [Seite 206]
12.5 - 6.5 Rekursion bei dynamischen Datenstrukturen [Seite 208]
12.5.1 - 6.5.1 Rekursion und verkettete Listen [Seite 208]
12.5.1.1 - Aufgabe: Negative Zahlen in einer einfach verketteten Liste zählen [Seite 210]
12.5.2 - 6.5.2 Rekursion und Binärbäume [Seite 211]
12.5.2.1 - Aufgabe: Suche nach dem größten Wert in einem Binärbaum [Seite 213]
12.6 - 6.6 Wrapper-Funktionen [Seite 214]
12.6.1 - Aufgabe: Anzahl der Blätter eines Binärbaums [Seite 214]
12.7 - 6.7 Wann wird Rekursion verwendet? [Seite 217]
12.7.1 - 6.7.1 Rekursion: Gegenargumente [Seite 218]
12.7.1.1 - Aufgabe: Ausgabe einer verketteten Liste [Seite 220]
12.7.1.2 - Aufgabe: Ausgabe einer verketteten Liste in umgekehrter Reihenfolge [Seite 220]
12.8 - 6.8 Übungen [Seite 222]
13 - Wiederverwendung von Code [Seite 225]
13.1 - 7.1 Sinnvolle und nicht sinnvolle Wiederverwendung von Code [Seite 225]
13.2 - 7.2 Komponenten [Seite 227]
13.2.1 - 7.2.1 Code-Blöcke [Seite 227]
13.2.2 - 7.2.2 Algorithmen [Seite 227]
13.2.3 - 7.2.3 Entwurfsmuster [Seite 228]
13.2.4 - 7.2.4 Abstrakte Datentypen [Seite 229]
13.2.5 - 7.2.5 Bibliotheken [Seite 230]
13.3 - 7.3 Kenntnisse über Komponenten erweitern [Seite 230]
13.3.1 - 7.3.1 Forschendes Lernen [Seite 231]
13.3.1.1 - Aufgabe: Klassenvorsteher [Seite 232]
13.3.2 - 7.3.2 Lernen bei Bedarf [Seite 235]
13.3.2.1 - Aufgabe: Effizientes Durchlaufen einer Liste [Seite 236]
13.4 - 7.4 Auswahl eines Komponententyps [Seite 244]
13.4.1 - 7.4.1 Komponentenwahl in der Praxis [Seite 246]
13.4.1.1 - Aufgabe: Teilweise Sortierung [Seite 246]
13.4.2 - 7.4.2 Vergleich der Ergebnisse [Seite 251]
13.5 - 7.5 Übungen [Seite 251]
14 - Denken wie ein Programmierer [Seite 253]
14.1 - 8.1 Das Gesamtkonzept [Seite 253]
14.1.1 - 8.1.1 Stärken ausschöpfen, Schwächen lindern [Seite 254]
14.1.2 - 8.1.2 Aufbau des Gesamtkonzepts [Seite 261]
14.2 - 8.2 Beliebige Aufgabenstellungen in Angriff nehmen [Seite 262]
14.2.1 - Aufgabe: Schummeln beim Galgenmännchen [Seite 264]
14.2.2 - 8.2.1 Wie man schummelt [Seite 265]
14.2.3 - 8.2.2 Erforderliche Operationen zum Schummeln beim Galgenmännchen [Seite 267]
14.2.4 - 8.2.3 Der erste Entwurf [Seite 269]
14.2.5 - 8.2.4 Der erste Code [Seite 270]
14.2.6 - 8.2.5 Analyse der ersten Ergebnisse [Seite 281]
14.2.7 - 8.2.6 Die Kunst des Problemlösens [Seite 282]
14.3 - 8.3 Programmierkenntnisse weiterentwickeln [Seite 283]
14.3.1 - 8.3.1 Neue Programmiersprachen [Seite 284]
14.3.2 - 8.3.2 Kenntnisse in bekannten Programmiersprachen erweitern [Seite 287]
14.3.3 - 8.3.3 Zusätzliche Bibliotheken [Seite 288]
14.3.4 - 8.3.4 Besuchen Sie einen Kurs [Seite 289]
14.4 - 8.4 Fazit [Seite 289]
14.5 - 8.5 Übungen [Seite 291]
15 - Stichwortverzeichnis [Seite 293]

Einführung


Bereitet es Ihnen Mühe, Programme zu schreiben, obwohl Sie davon überzeugt sind, Programmiersprachen eigentlich verstanden zu haben? Lesen Sie manchmal ein ganzes Kapitel in einem Buch über Programmierung und nicken dabei ständig wissend, aber es fällt Ihnen dennoch schwer, das Gelesene in Ihren eigenen Programmen umzusetzen? Können Sie im Internet gefundene Beispielprogramme so gut verstehen, dass Sie anderen die Bedeutung jeder einzelnen Codezeile erklären können, aber glauben, einen Krampf im Kopf zu haben, wenn Sie einer Programmieraufgabe gegenüberstehen und den leeren Bildschirm Ihres Texteditors sehen?

So geht es nicht nur Ihnen. Ich unterrichte seit mehr als 15 Jahren Programmierung, und den meisten meiner Studenten ist es irgendwann während ihrer Ausbildung ebenfalls so ergangen. Bei der hier fehlenden Fähigkeit handelt es sich darum, Problemlösungen zu finden, also anhand der Beschreibung einer bestimmten Aufgabe ein neues Programm zu schreiben, das diese Problemstellung löst. Nicht jede Art der Programmierung erfordert umfangreiches Lösen von Problemen. Falls Sie ein bereits bestehendes Programm nur geringfügig ändern, debuggen oder um Testcode ergänzen, geschieht die Programmierung möglicherweise so „mechanisch”, dass Ihr Erfindungsreichtum gar nicht erst auf die Probe gestellt wird. Früher oder später erfordern jedoch alle Programme das Lösen von Problemstellungen, und alle guten Programmierer können das.

Problemlösungen zu finden ist schwierig. Bei manchen Menschen, den „Naturtalenten” (in der Welt der Programmierung das Pendant zu begabten Athleten im Sport), scheint es so einfach zu sein. Diese wenigen Auserwählten übersetzen komplizierte Ideen wie im Schlaf in Quellcode. Wenn man ein Java-Gleichnis bemühen möchte, könnte man sagen, dass der Java-Code kompiliert im Gehirn abläuft, während wir anderen eine virtuelle Maschine verwenden müssen, die den Code nur interpretiert.

Als Programmierer kein Naturtalent zu sein, ist aber auch nicht weiter schlimm. Wäre dem so, gäbe es nur sehr wenige Programmierer auf der Welt. Dessen ungeachtet sind mir schon zu viele achtbare angehende Programmierer begegnet, die sich zu lange frustriert abmühen. Schlimmstenfalls geben sie das Programmieren komplett auf und sind davon überzeugt, ihr Ziel nie zu erreichen und dass nur Leute mit einer angeborenen Gabe gute Programmierer sind.

Warum aber ist es so schwierig, zu erlernen, Programmieraufgaben zu lösen?

Zum Teil liegt es daran, dass das Lösen von Problemen und das Erlernen der Syntax einer Programmiersprache ganz unterschiedliche Tätigkeiten sind und daher völlig andere „Muskeln” des Verstands beanspruchen. Beim Erlernen der Syntax einer Programmiersprache, dem Lesen von Quellcode und dem Auswendiglernen einer Programmierschnittstelle (API, englisch Application Programming Interface) handelt es sich um vornehmlich analytische Vorgänge in der linken Hirnhälfte. Ein originelles Programm unter Verwendung der vorher erlernten Werkzeuge und Fähigkeiten zu schreiben, ist hingegen eine Aktivität der rechten, kreativen Hirnhälfte.

Nehmen wir an, Sie möchten einen Zweig entfernen, der in die Regenrinne Ihres Hauses gelangt ist, aber Ihre Leiter ist zu kurz, um den Zweig zu erreichen. Sie begeben sich in Ihre Garage und suchen nach irgendeinem Objekt (oder einer Kombination von Objekten), das es Ihnen erlaubt, den Zweig aus der Regenrinne zu entfernen. Gibt es eine Möglichkeit, die Leiter zu verlängern? Gibt es ein Objekt, das Sie auf der Leiter stehend dazu verwenden könnten, den Zweig zu erreichen und fortzuschaffen? Vielleicht könnten Sie auch vom Inneren des Hauses aus einfach aufs Dach steigen und den Zweig von ober her zu fassen bekommen. Das ist mit Problemlösen gemeint, und es handelt sich dabei um eine kreative Tätigkeit. Ob Sie es glauben oder nicht, wenn Sie ein Programm erstmals entwerfen, sind Ihre Denkvorgänge und diejenigen der Person, die den Zweig entfernen möchte, ziemlich ähnlich und unterscheiden sich deutlich von den Denkvorgängen einer Person, die eine bereits vorhandene for-Schleife debuggt.

Allerdings legen die meisten Bücher über Programmierung ihren Schwerpunkt auf Syntax und Semantik. Nun sind Syntax und Semantik einer Programmiersprache natürlich unverzichtbar, aber sie sind nur der erste Schritt beim Lernen, wie man in der Sprache programmiert. Die meisten Bücher für Programmieranfänger führen im Wesentlichen vor, wie man ein Programm versteht, nicht, wie man eines schreibt. Diejenigen Bücher, die sich auf das Schreiben von Programmen konzentrieren, sind häufig tatsächlich „Kochbücher”, in denen „Rezepte” für bestimmte Gegebenheiten aufgeführt sind. Derartige Bücher können zwecks Zeitersparnis durchaus wertvoll sein, sind aber ungeeignet, um zu lernen, eigenständig Code zu schreiben. Denken Sie an Kochbücher im eigentlichen Sinn. Auch wenn hervorragende Köche Kochbücher besitzen, wird niemand, der sich nur auf Kochbücher verlässt, zu einem großartigen Koch. Ein exzellenter Koch kennt sich mit Zutaten, deren Vorbereitung und Garmethoden aus und weiß, wie er diese miteinander kombinieren muss, um fantastische Gerichte zuzubereiten. Um eine leckere Mahlzeit anzurichten, benötigt ein wirklich guter Koch nur eine vollständig ausgestattete Küche. In vergleichbarer Weise kennt sich ein ausgezeichneter Programmierer mit der Syntax der Sprache, Anwendungsframeworks, Algorithmen und den Prinzipien der Softwareentwicklung aus und versteht es, diese miteinander zu verbinden, um tolle Programme zu erstellen. Geben Sie einem exzellenten Programmierer eine Liste mit Vorgaben und lassen Sie ihn dann auf eine vollständig ausgerüstete Programmierumgebung los; es werden großartige Dinge geschehen!

Bei der Ausbildung von Programmierern gibt es gegenwärtig im Bereich des Problemlösens kaum Orientierungshilfen. Stattdessen geht man davon aus, dass Programmierer, die Zugriff auf alle erforderlichen Programmierwerkzeuge besitzen, irgendwann schon lernen werden, gute Programme zu schreiben, wenn sie dazu aufgefordert werden. Das lässt sich auch nicht völlig von der Hand weisen, aber von jetzt bis „irgendwann” kann ein ziemlich langer Zeitraum sein. Vom Programmieranfänger bis zum abgeklärten Programmierer ist es ein langer und steiniger Weg, und zu viele der Leute, die sich auf den Weg gemacht haben, erreichen ihr Ziel nie.

Anstatt durch Versuch und Irrtum zu lernen, können Sie sich das Lösen von Problemen auch systematisch aneignen. Darum geht es in diesem Buch. Sie können Techniken zum Ordnen Ihrer Gedanken und Verfahren zum Auffinden von Lösungen und Strategien für bestimmte Arten von Problemen erlernen. Lassen Sie Ihrer Kreativität beim Studieren der verschiedenen Ansätze freien Lauf. Geben Sie sich hier keiner Täuschung hin: Programmieren und insbesondere das Lösen von Problemen sind kreative Tätigkeiten. Kreativität bleibt rätselhaft und niemand vermag genau zu sagen, wie ein kreativer Kopf funktioniert. Wenn wir aber imstande sind, das Komponieren von Musik zu erlernen und Ratschläge zum kreativen Schreiben zu befolgen, oder uns zeigen lassen können, wie man malt, dann können wir auch lernen, Aufgabenstellungen beim Programmieren kreativ zu lösen. Dieses Buch möchte Ihnen nicht vorschreiben, was genau Sie tun sollen. Es soll Ihnen vielmehr dabei helfen, Ihre verborgenen Problemlösungsfähigkeiten weiterzuentwickeln, sodass Sie dann schon wissen werden, was zu tun ist. Es geht hier vor allem darum, Ihnen dabei zu helfen, ein Programmierer zu werden, wie er im Buche steht.

Mein Ziel ist es, dass Sie (und alle anderen Leser des Buchs) es lernen, beliebige Programmieraufgaben systematisch in Angriff zu nehmen und dabei zuversichtlich sind, die jeweilige Aufgabe schließlich lösen zu können. Ich wünsche mir, dass Sie nach der Lektüre des Buchs wie ein Programmierer denken und dass Sie sich für einen Programmierer halten.

Über dieses Buch


Nachdem die Notwendigkeit dieses Buches erläutert wurde, sind noch einige Bemerkungen dazu nötig, um was es sich beim vorliegenden Buch eigentlich handelt – und um was nicht.

Voraussetzungen


In diesem Buch wird davon ausgegangen, dass Ihnen die grundlegende Syntax und die Semantik der Programmiersprache C++ geläufig sind und Sie bereits damit begonnen haben, Programme zu schreiben. In den meisten Kapiteln wird von Ihnen erwartet, dass Sie bestimmte C++-Grundlagen kennen. In diesen Kapiteln finden Sie eingangs einen Überblick über diese Grundlagen. Machen Sie sich keine Sorgen, falls Sie noch im Begriff sind, die Sprache zu erlernen. Es gibt eine Vielzahl ausgezeichneter Bücher über C++ und Sie können das Lösen von Problemen und die Syntax gleichzeitig erlernen. Sie müssen jedoch die jeweils relevante Syntax erlernt haben, bevor Sie versuchen, die Aufgabenstellungen eines Kapitels in Angriff zu nehmen.

Ausgewählte Themen


Die im Buch behandelten Themen decken die Bereiche ab, bei denen ich Programmieranfänger am häufigsten mit Schwierigkeiten habe kämpfen sehen. Diese Bereiche stellen gleichzeitig einen umfassenden Querschnitt der für Anfänger und fortgeschrittene Anfänger maßgeblichen Themengebiete dar.

Ich muss jedoch betonen, dass es sich hier nicht um ein „Kochbuch” mit Algorithmen oder...

Dateiformat: ePUB
Kopierschutz: ohne DRM (Digital Rights Management)

Systemvoraussetzungen:

Computer (Windows; MacOS X; Linux): Verwenden Sie eine Lese-Software, die das Dateiformat EPUB verarbeiten kann: z.B. Adobe Digital Editions oder FBReader - beide kostenlos (siehe E-Book Hilfe).

Tablet/Smartphone (Android; iOS): Installieren Sie bereits vor dem Download die kostenlose App Adobe Digital Editions oder die App PocketBook (siehe E-Book Hilfe).

E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m. (nicht Kindle)

Das Dateiformat ePUB ist sehr gut für Romane und Sachbücher geeignet - also für "glatten" Text ohne komplexes Layout. Bei E-Readern oder Smartphones passt sich der Zeilen- und Seitenumbruch automatisch den kleinen Displays an. Ein Kopierschutz bzw. Digital Rights Management wird bei diesem E-Book nicht eingesetzt.

Weitere Informationen finden Sie in unserer E-Book Hilfe.


Dateiformat: PDF
Kopierschutz: ohne DRM (Digital Rights Management)

Systemvoraussetzungen:

Computer (Windows; MacOS X; Linux): Verwenden Sie zum Lesen die kostenlose Software Adobe Reader, Adobe Digital Editions oder einen anderen PDF-Viewer Ihrer Wahl (siehe E-Book Hilfe).

Tablet/Smartphone (Android; iOS): Installieren Sie die kostenlose App Adobe Digital Editions oder eine andere Lese-App für E-Books, z.B. PocketBook (siehe E-Book Hilfe).

E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m. (nur bedingt: Kindle)

Das Dateiformat PDF zeigt auf jeder Hardware eine Buchseite stets identisch an. Daher ist eine PDF auch für ein komplexes Layout geeignet, wie es bei Lehr- und Fachbüchern verwendet wird (Bilder, Tabellen, Spalten, Fußnoten). Bei kleinen Displays von E-Readern oder Smartphones sind PDF leider eher nervig, weil zu viel Scrollen notwendig ist. Ein Kopierschutz bzw. Digital Rights Management wird bei diesem E-Book nicht eingesetzt.

Weitere Informationen finden Sie in unserer E-Book Hilfe.


Als Download verfügbar

3,99 €
inkl. 7% MwSt.
E-Book Einzellizenz
ePUB ohne DRM
siehe Systemvoraussetzungen
PDF ohne DRM
siehe Systemvoraussetzungen
Hinweis: Die Auswahl des von Ihnen gewünschten Dateiformats und des Kopierschutzes erfolgt erst im System des E-Book Anbieters
E-Book bestellen