Einführung in C++
Inhalt und Lernziele des Kapitels Einführung in C++.
- Einordnung des Artikels
- Inhaltsverzeichnis
- Lernziele
- Vorgehensweise und Vorbereitungen zum Erlernen von C++
- Kennenlernen der Entwicklungsumgebung Code::Blocks
- Elementare Syntax von C++: Ein- und Ausgaben über die Konsole
- Elementare Syntax von C++: Fundamentale Datentypen
- Lösungshinweise zu den Aufgaben aus Elementare Syntax von C++: Fundamentale Datentypen
- Elementare Syntax von C++: Bedingung, Alternative und Mehrfachalternative
- Lösungshinweise zu den Aufgaben aus Elementare Syntax von C++: Bedingung, Alternative und Mehrfachalternative
- Elementare Syntax von C++: Weitere Operatoren
- Elementare Syntax von C++: Schleifen
- C++ Programmier-Aufgaben: Anwendungen aus Numerik, Finanzmathematik, Kombinatorik, Auszeichnungssprachen
Einordnung des Artikels
- Einführung in die Informatik
- Einführung in C++
Inhaltsverzeichnis
- Vorgehensweise und Vorbereitungen zum Erlernen von C++
- Kennenlernen der Entwicklungsumgebung Code::Blocks
- Elementare Syntax von C++: Ein- und Ausgaben über die Konsole
- Elementare Syntax von C++: Fundamentale Datentypen
- Lösungshinweise zu den Aufgaben aus Elementare Syntax von C++: Fundamentale Datentypen
- Elementare Syntax von C++: Bedingung, Alternative und Mehrfachalternative
- Lösungshinweise zu den Aufgaben aus Elementare Syntax von C++: Bedingung, Alternative und Mehrfachalternative
- Elementare Syntax von C++: Weitere Operatoren
- Elementare Syntax von C++: Schleifen
- C++ Programmier-Aufgaben: Anwendungen aus Numerik, Finanzmathematik, Kombinatorik, Auszeichnungssprachen
Lernziele
Im dritten Teil des Kurses, also Einführung in C++, werden diejenigen grundlegenden Sprachelemente von C++ beschrieben, die man benötigt um beliebige Algorithmen zu implementieren. Vergleicht man dies mit den Programmier-Paradigmen, die im zweiten Teil Einführung in die Programmierung beschrieben wurden, befindet man sich somit noch fast auf der Ebene der Maschinensprache — anstelle der Maschinensprache werden eben diejenigen Befehle eingesetzt, die C++ elementar anbietet. Höherwertige Konzepte wie das Bilden von Unterprogrammen (also strukturierte Programmierung) oder Klassen (also objekt-orientierte Programmierung) kommen hier noch nicht vor.
Die elementare Syntax und einige damit verbundene Spitzfindigkeiten kennenzulernen, ist aber unabdingbar, um den Einstieg in eine neue Programmiersprache zu meistern. Ein Umsteiger — wer schon eine andere Programmiersprache sicher beherrscht — wird diesen Teil sehr schnell durcharbeiten können, da die hier vorgestellten Konzepte in jeder Programmiersprache vorkommen. Für den Einsteiger steht hier eine längere Durststrecke bevor; es wird aber dringend empfohlen diesen Teil gründlich durchzuarbeiten, denn die hier besprochenen Konzepte sind einerseits wichtig für einen souveränen Umgang mit C++ und sie erleichtern andererseits den Einstieg in jede andere Programmiersprache.
Vorgehensweise und Vorbereitungen zum Erlernen von C++
- Überblick über die Arbeitstechniken, die man zum Erlernen einer objekt-orientierten Programmiersprache wie C++ erwerben muss.
- Es werden die nötigen Anweisungen gegeben, um sich eine geeignete Umgebung zu schaffen, die Voraussetzung für das Programmieren ist (auch wenn Sie später vielleicht mit einer anderen Sprache arbeiten, sind diese Vorbereitungen so ähnlich wie hier beschrieben zu treffen):
- Compiler
- Entwicklungsumgebung
- Texteditor
- Anlegen eines Arbeitsbereiches (workspace) mit einer geeigneten Ordnerstruktur.
- Für C++ wird hier die Entwicklungsumgebung Code::Blocks empfohlen. Es werden die ersten Schritte beschrieben, wie man mit ihr arbeitet:
- Projekt erstellen
- Quelltexte schreiben
- Programme compilieren
- Programme ausführen.
- Code::Blocks bietet mehrere Helferlein, deren geschickter Einsatz ein produktiveres Arbeiten ermöglicht. Manche kann schon ein Anfänger nutzen, manche wird man erst bei besserem Verständnis der Programmiersprache einsetzen können — unabhängig davon werden die wichtigsten Helferlein hier beschrieben.
Kennenlernen der Entwicklungsumgebung Code::Blocks
Ausführlich besprochen wird hier die Entwicklungsumgebung Code::Blocks. Das Kapitel zeigt de typischen Schritte, die man einmal durcharbeiten muss, um eine neue Entwicklungsumgebung kennenzulernen; dazu gehören insbesondere:
- Anlegen eines neuen Projektes
- Kennenlernen der Projektverwaltung durch die Entwicklungsumgebung
- Anlegen einer neuen Quelltext-Datei
- Kompilieren und Ausführen von Programmen
- Kennenlernen der weiteren Hilfen, die eine Entwicklungsumgebung bereitstellt.
Elementare Syntax von C++: Ein- und Ausgaben über die Konsole
Das erste Programm ist — wie üblich — HelloWorld: ein Programm, das eine Zeichenkette auf der Konsole ausgibt. Anhand dieses Programmes werden zahlreiche Konzepte eingeführt, die man zum Programmieren benötigt und die zum Großteil in der allgemein gehaltenen Einführung in die Programmierung noch nicht besprochen wurden:
- Präprozessor-Direktiven: Befehle, die vor dem eigentlichen Compilieren des Quelltextes abgearbeitet werden, etwa um andere Programme zu laden.
- Der Namensraum
std
: mit dessen Hilfe kann auf Objekte und Funktionen aus der Standardbibliothek zugegriffen werden. - Die besondere Bedeutung der main()-Methode: main steht immer für das Hauptprogramm (im Gegensatz zu Unterprogrammen) und Ausführen eines Programmes heißt, dass dessen main()-Methode aufgerufen und ausgeführt wird.
- Die Eigenschaften der main()-Methode werden beschrieben — das Wissen darüber ist unerlässlich, um zu verstehen, wie Programme ausgeführt werden.
- Es werden die verschiedenen Arten von Kommentaren vorgestellt und einige Tips gegeben, wie sie einzusetzen sind.
- Durch Formatierung des Quelltextes (Einrückungen, Abstände, Trennung von Blöcken, geeignete Anordnung der Kommentare) kann man sehr zu seiner besseren Lesbarkeit beitragen. Im Lauf der Zeit werden Sie sehen, wie wichtig es ist, Quelltexte — egal ob eigene oder fremde — zu lesen und ihren Inhalt schnell zu erfassen; eine geeignete Quelltextformatierung kann dies unterstützen.
Die Befehle, um Zeichenketten in die Konsole einzugeben, unterscheiden sich natürlich nur wenig von denen für Ausgaben. Auch sie werden hier vorgestellt, so dass Sie danach Programme schreiben können, die eine Wechselwirkung mit dem Nutzer erlauben. Auf die Programmierung von graphischen Oberflächen wird in diesem Kurs nicht eingegangen — die im Rahmen dieses Kurses vorgestellten Konzepte sind für den Einsteiger wichtiger.
Elementare Syntax von C++: Fundamentale Datentypen
In der Einführung in die Programmierung wurden bereits die unterschiedlichen fundamentalen Datentypen vorgestellt:
- Boolsche Variable
- ganzzahlige Datentypen
- Zeichen
- echte Zahlen
- Gleitkommazahlen.
Dort sollte schon das Verständnis dafür entwickelt werden, dass
- die Algorithmierung sofort die Frage aufwirft, welche Objekte benötigt werden, um den Algorithmus abzuarbeiten
- unterschiedliche Datentypen im Speicher anders abgelegt werden und daher für jedes Objekt der Datentyp bekannt sein muss.
Hier werden die in C++ bereitgestellten Datentypen besprochen — inklusive einiger damit verbundener Spitzfindigkeiten. Insbesondere bei den Typumwandlungen können sie auftreten und müssen dem Programmierer bekannt sein, um typische Fehler zu vermeiden.
Zu den Eigenschaften der Datentypen gehört auch, welche Operationen mit Variablen eines Datentyps ausgeführt werden können und wie eine Variable initialisiert wird. Zu Letzterem wird hier schon die allgemeinere Unterscheidung zwischen Deklaration und Initialisierung vorgestellt (im Zusammenhang mit selbst-definierten Datentypen und Konstruktoren wird diese Unterscheidung wieder auftreten).
Weiter hat C++ die Besonderheit, dass die Bereiche der fundamentalen Datentypen in der Spezifikation nicht eindeutig festgelegt sind — vielmehr sind sie plattformabhängig (Compiler und Rechner). Verlässt man die zulässigen Bereiche, kann ein Programm unvorhergesehenes Verhalten zeigen. Als Programmierer muss man daher die Bereiche kennen oder zumindest wissen, wie man sie schnell abfragen kann.
Lösungshinweise zu den Aufgaben aus Elementare Syntax von C++: Fundamentale Datentypen
Derartige Aufgaben sollten Sie wegen der Plattformabhängigkeit der fundamentalen Datentypen selbständig lösen können. Eine gründliche Kenntnis insbesondere der Zahlenbereiche der meist eingesetzten Datentypen vermeidet viele Fehler.
Elementare Syntax von C++: Bedingung, Alternative und Mehrfachalternative
Mit Hilfe der Strukturelemente Bedingung, Alternative und Mehrfachalternative lassen sich schon sehr komplexe Algorithmen schreiben, da man mit ihnen den Ablauf der Befehlsausführung steuern kann. Auf die hier vorgestellten Sprachelemente muss jeder Programmierer ständig zugreifen und sollte sie daher immer parat haben. Auch einige hier vorgestellte Spitzfindigkeiten sollte man kennen, da ihre Nichtbeachtung immer wieder zu Fehlern führt.
Lösungshinweise zu den Aufgaben aus Elementare Syntax von C++: Bedingung, Alternative und Mehrfachalternative
Im vorherigen Kapitel Elementare Syntax: Bedingung, Alternative und Mehrfachalternative wurden Aufgaben gestellt, die den Umgang mit den Strukturelementen Bedingung und Alternative einüben. Da diese Strukturelemente — wie oben schon gesagt — in jedem Programm vorkommen, sind derartige Übungen unabdingbar, um mit einer Programmiersprache vertraut zu werden.
Gerade Anfänger machen dabei oft den Fehler, eine Aufgabe kurz zu lesen und sich sofort an die Entwicklungsumgebung zu setzen und Quelltext zu schreiben. Sie werden sehen, dass dies bei umfangreichen Aufgaben sinnlos ist — die Entwicklungsumgebung hilft nicht beim Einstieg in ein Problem.
Wichtig ist es dagegen, die beiden Aufgaben voneinander zu trennen:
- den Algorithmus in Pseudocode zu entwickeln (also noch unabhängig von einer speziellen Programmiersprache)
- den Algorithmus syntaktisch richtig in die gewählte Sprache zu übersetzen
Mit den hier besprochenen Aufgaben sollen Sie gerade diese Arbeitsweise einüben: Sie werden sehen, dass in beiden genannten Anforderungen schneller Fortschritte machen, wenn Sie diese Aufgaben trennen.
Elementare Syntax von C++: Weitere Operatoren
Für einige Operationen gibt es in C++ Kurzschreibweisen, die man kennen und einsetzen sollte, da sie weniger Rechenzeit beanspruchen als die ausführliche Schreibweise.
Elementare Syntax von C++: Schleifen
Am Strukturelement der Schleife (oder Iteration) sieht am deutlichsten, in welcher Hinsicht ein Computer dem Menschen überlegen ist: eine Routine-Tätigkeit, die immer gleich aber sehr oft wiederholt ausgeführt werden muss, kann natürlich vom Computer sehr viel schneller und fehlerfrei bewältigt werden.
Wie im Kapitel über Pseudocode werden die drei Arten von Schleifen vorgestellt — jetzt aber mit ihrer C++-Syntax:
- kopfgesteuerte Schleife
- fußgesteuerte Schleife
- Schleife mit Zählvariable (for-Schleife).
Wie die Strukturelemente Bedingung und Alternative kommen Schleifen in nahezu jedem Programm vor und gehören somit zum Grundwissen jedes Programmierers; dies bezieht sich:
- auf die Unterscheidung der Arten von Schleifen,
- auf die Fähigkeit zu entscheiden, in welchem Fall welche Schleife eingesetzt werden soll,
- auf die Fähigkeit klar zu trennen, welche Befehle vor der Schleife, welche innerhalb der Schleife und welche nach der Schleife ausgeführt werden.
Sie sollten dieses Kapitel und die zugehörigen Aufgaben unbedingt soweit durcharbeiten, dass Ihnen diese Fähigkeiten als Selbstverständlichkeiten erscheinen — Sie werden sehen in der Praxis wird man am häufigsten mit Schleifen konfrontiert.
Weiter wird hier das Konzept des Gültigkeitsbereich einer Variable (scope) vorgestellt, das man sehr gut anhand der Schleifen erklären kann, das aber eine sehr viel weiter gehende Bedeutung hat und bei der objekt-orientierten Programmierung vertieft und verallgemeinert wird.
C++ Programmier-Aufgaben: Anwendungen aus Numerik, Finanzmathematik, Kombinatorik, Auszeichnungssprachen
In diesem Kapitel werden einige Beispiele vorgestellt, wie man die bisher erworbenen Kenntnisse anwenden kann — meist werden dabei natürlich Schleifen programmiert.
Die Liste der Anwendungen ist keineswegs vollständig; sie soll Ihnen einige Anregungen liefern, welche Probleme man jetzt lösen kann, für die man ohne Programmierkenntnisse ein Vielfaches an Zeit investieren müsste. Die Anwendungen sind mit Absicht aus sehr unterschiedlichen Bereichen gewählt — Ihnen werden sicher weitere Beispiele einfallen, wo die bisher erworbenen Programmierkenntnisse von Nutzen sind.