Programmieren in C++

Dies ist eine Seite, um gemeinsam Programmieren in C++ zu lernen. Wir nutzen dazu den Editor Geany. Linux kann auf einem USB-Stick installiert und dann überall genutzt werden. Im Menü von Geany finden wir Erstellen und darunter Compile und Build. Eine Datei mit der Endung .cpp wird als C++ Datei erkannt und Geany lädt die Kommandos zum Erstellen automatisch. Man kann unter dem gleichnamigen Menüpunkt sehen, dass der Compiler GCC (g++) geladen wurde.

Mit Compile wird der C++ Code kompiliert und mit Build eine ausführbare Datei erstellt. Danach kann diese mit Execute getestet werden. In Geany ist unter Ansicht das Häkchen bei Meldungsfenster anzeigen zu setzen, damit beim Kompilieren auftretende Fehler unten angezeigt und analysiert werden können.

Einer meiner Enkelsöhne bat mich, ihm Programmieren beizubringen, was auf Grund der räumlichen Ferne schwierig war. So entstand die Idee zu dieser Seite. Wer mitmachen will und Fragen hat kann unter Kontakt eine Nachricht senden. Gelöste Aufgaben und Programmideen werden auf Wunsch hier veröffentlicht.


Ein erstes Programm

#include <iostream>
using namespace std;

int main() {
    int Zahl;
    int Quadrat;
    cout << "Geben Sie eine Zahl ein: ";
    cin >> Zahl;
    Quadrat = Zahl * Zahl;
    cout << "Die Quadratzahl lautet " << Quadrat << endl;
}

 

Der include-Befehl in der ersten Zeile dient zum Einbinden von Programmbibliotheken, hier die Bibliothek für die Ein- und Ausgabe (iostream). Die jeweilige Funktionalität wird mit dem Compiler in Standardbibliotheken mitgeliefert.

Mit using namespace std; wird der Standard-Namensraum std in den globalen Namensraum eingebunden. Auf die Bibliothek kann nun ohne diesen Präfix zugegriffen werden (statt std::cout genügt cout).
int main() ist die Hauptfunktion des Programms.

In den geschweiften Klammern { } stehen die Anweisungen einer Funktion. Die öffnende geschweifte Klammer kann, die schließende Klammer sollte immer in einer eigenen Zeile stehen.

int Zahl; definiert eine Variable des Typs Integer (Ganzzahl). Sie hat noch keinen Wert, im Prinzip wird im Arbeitsspeicher lediglich Platz für einen Integer-Wert namens Zahl reserviert. Das Gleiche gilt für die Variable Quadrat in der nächsten Zeile.

Mit cout << "Geben Sie eine Zahl ein: "; wird der Bildschirmausgabe cout ein Text übergeben. Dabei steht cout links, es folgt der Operator für die Umleitung << und dann der Text, der in Anführungszeichen eingeschlossen werden muss. Dieser wird auf den Bildschirm im Terminal ausgegeben. In diesem Fall ist es die Aufforderung, eine Zahl eizugeben.

In der nächsten Zeile folgt das Eingabeobjekt cin. Die Daten von der Eingabe im Terminal werden mit >> in eine Variable umgeleitet. Auf diese Weise erhält die Variable Zahl den Wert, den der Benutzer mit der Tastatur eingibt. In der nächsten Zeile folgt die Anweisung:
Quadrat = Zahl * Zahl; In diesem Falle ist die Anweisung eine Berechnung. Der Operator * steht für Multiplikation, das Ergebnis wird der Variablen Quadrat zugewiesen.

Die letzte Zeile bringt das Ergebnis mit cout << "Die Quadratzahl lautet " << Quadrat << endl; auf den Bildschirm. Wieder ist der auszugebende Text in Anführungszeichen gesetzt, die Variable Quadrat jedoch nicht, weil sie sonst als Text und nicht als Variable angesehen würde. Die zweite Umleitung mit << endl; erzeugt einen Zeilenabschluss.

Erstellen und Ausführen

Terminal Bild

 

Nachdem wir das Programm in Geany eingegeben*) und als test.cpp im Ordner Dokumente gespeichert haben, muss es in zwei Schritten kompiliert werden. Im Menü Erstellen zunächst auf Compile klicken. Wenn sich keine Fehler eingeschlichen haben, erscheint im Meldungsfenster Kompilierung erfolgreich beendet, danach im Menü Erstellen noch Build ausführen. Haben wir unser Programm als test.cpp gespeichert, sind nun die Dateien test.o und die ausführbare Datei test erstellt worden.

Nun können wir in Geany unter Erstellen mit Klick auf den Eintrag Execute unser Programm starten und es sollte ein Terminal erscheinen. Wir folgen der Aufforderung, eine Zahl einzugeben und erhalten das Ergebnis. *) Code kann oben markiert u. kopiert werden

Das Beispiel stammt aus dem Buch Einstieg in C++ von Arnold Willemer und ist auf der Seite   C++ für Hektiker   ausführlich erklärt.

Aufgaben(1) Gut, wenn es funktioniert hat. Aber wir haben es nicht selbst programmiert. Die erste Aufgabe besteht nun darin, das Programm zu verändern und zu erweitern. Zum Beispiel, indem wir zur Eingabe einer weiteren Variable, (Zahl2) auffordern. Dann können wir zusätzlich zum Ergebnis Quadrat noch die Variable Produkt definieren und auch dieses Ergebnis (Zahl*Zahl2) ausgeben lassen. Wenn wir noch eine weitere Variable (Summe) anlegen, könnten wir zusätzlich Zahl und Zahl2 addieren und das als drittes Ergebnis ausgeben. Und was müssten wir tun, um schließlich Summe vom Produkt abzuziehen und als viertes Ergebnis ausgeben zu können? Wenn das Programm zwei Zahlen anfordert und vier Ergebnisse liefert sind die ersten Aufgaben erfüllt.

Aufgaben(2) Berechnungen mit ganzen Zahlen (int) sind in der Praxis selten. Deshalb stellen wir unser erweitertes Programm nun auf Fließkommazahlen (double) um. Beginnend bei int Eingabe ändern wir alle int Definationen in double. Der restliche Code bleibt unverändert. Wir speichern das Programm als test-d.cpp und können unsere Berechnungen nach Compile und Build mit der Eingabe von Fließkommazahlen erneut testen, wobei ein Punkt als Dezimaltrenner eingegeben werden muss. Das Programm funktioniert auch, wenn ganze Zahlen eingegeben werden, sie werden als double interpretiert. Da int main() die Hauptfunktion und somit keine Variablen-Defination ist, darf dieses int nicht geändert werden. Es definiert den Rückgabewert 0 der Funktion, wenn kein Fehler auftritt, andere Werte führen zu Fehlermeldungen. Wenn wir das zweite Programm als test-d.cpp gespeichert und kompiliert haben und es nach Eingabe von zwei Zahlen die vier Ergebnisse mit entspechenden Kommastellen liefert ist auch die zweite Gruppe von Aufgaben erfüllt.


Unser zweites Programm

#include <iostream>
#include <string>
using namespace std;
int main() {
  double DM;
  double UM;
  double KF;
  const double PI {3.1415926535897932};
  string ME;
  string ME2;
  cout << "Bitte den Kreisdurchmesser eingeben: ";
  cin >> DM;
  cout << "Maßeinheit (mm, cm, m) eingeben: ";
  cin >> ME;
  ME2 = ME+"²";
  if (DM <= 0) {
    cout << "Fehler: falsche Eingabe!" << endl;
    return 0;
    }
  UM = PI * DM;
  KF = (PI/4 * (DM*DM));
  cout << "Kreis-Umfang: " << UM << " " << ME << endl;
  cout << "Kreis-Fläche: " << KF << " " << ME2 << endl;
}

 

In diesem kleinen Programm wollen wir Kreisberechnungen ausführen. Auf den include-Befehl für die Ein- und Ausgabe (iostream) folgt in der zweiten Zeile das Einbinden der Bibliothek für Strings. Bisher haben wir die Datentypen int für Ganzzahl und double für Fließkommazahl genutzt. Mit string kommt nun der Datentyp für Zeichenketten dazu. Einzelne Zeichen haben den Datentyp char und die Bibliothek string enthält die Defination von Zeichenketten aus einer Mehrzahl von char.

Mit double DM wird die Variable DM für den Durchmesser definiert, darauf folgen UM und KF für Umfang und Kreisfläche. Mit const double PI definieren wir einen double-Wert als Konstante. Es folgen die Zeichenketten (string) für die Basis-Maßeinheit ME und die Flächen-Maßeinheit ME2.

Nach der Aufforderung cout << Bitte den Kreisdurchmesser eingeben wird die Eingabe der Variable DM zugewiesen. Der Variablen ME für Maßeinheit wird im nächsten Schritt die eingegebene Zeichenkette zugewiesen, um daraus mit ME2 = ME+"²" die passenden Zeichen für den Flächeninhalt abzuleiten. Es folgt eine Prüfung der Durchmesser-Eingabe mit if, erkennt C++ keinen double-Wert gibt es 0 zurück und die Fehlermeldung erscheint, z.B. wenn man Buchstaben statt Zahlen eingibt.

Es folgen die Berechnungen, mit UM = PI * DM wird der Umfang und mit (PI/4 * (DM*DM)) die Kreisfläche berechnet. Gängiger ist die Kreisflächen-Formel A = r² * PI, aber wir verwenden die Formel mit dem Durchmesser. Die Ausgabe der Ergebnisse mit cout steht in den letzten beiden Zeilen. Dort werden zunächst die errechneten double-Werte (UM, KF), dann eine Leerstelle (" ") und als drittes die Maßeinheit (ME, ME2) nacheinander der Ausgabe zugeleitet.

Aufgaben(3)Berechnungen von Umfang und Kreisfläche sind schon sehr praxisnah. Die Erweiterung unseres dritten Programms besteht im Hinzufügen einer weiteren Variable ZH, das H steht für Höhe, was aus einem Kreis einen Zylinder macht. Wir stellen uns vor, der Durchmesser wäre der eines Topfes und wir wollen wissen, wieviel Liter da hineinpassen. Also müssen wir eine Variable ZH definieren und diese noch vor der Maßeinheit abfragen. Für die Berechnung des Rauminhaltes benötigen wir zudem die Variable ZI für Zylinderinhalt. Dann können wir die Formel zur Berechnung hinzufügen und schließlich noch eine Zeile für das Ergebnis. Und da merken wir, dass wir auch noch die String-Variable ME3 brauchen, um das Ergebnis richtig ausgeben zu können. Wer zum Schluss auch noch das Ergebnis in Litern ausgeben will, bekommt ein Problem. Je nach eingegebener Maßeinheit (Reagenzglas:mm, Topf:cm, Pool:m) wird eine andere Formel zur Umrechnung benötigt. Das kann über eine Verzweigung mit if gelöst werden. Mehr dazu in dieser ⇒⇒ PDF.    Als Empfehlung: if (ME == "mm") {Berechnung;} und dann zweimal else if verwenden. Sind diese Aufgaben alle gelöst, haben wir eine gute Grundlage zum Weitermachen.


Fortsetzung folgt