1 Erste Schritte in C++ 4 Beschreibungsmöglichkeiten für Algorithmen Struktogramm Das gezeigte Struktogramm enthält die elementaren Grundstrukturen Folge, Auswahl und Schleife. Diese werden in einem der nächsten Abschnitte genauer erläutert. Pseudo-Programmiersprache Als Pseudo-Programmiersprache wird eine Sprache bezeichnet, die sich an eine bestehende Programmiersprache anlehnt. Bei der Formulierung des Algorithmus werden aber nicht so strenge Richtlinien angelegt wie bei der konkreten Programmiersprache. Beispiel: ALGORITHMUS Klassensprecherwahl-Stimmauszaehlung SOLANGE Stimmzettel in der Wahlurne TUE BEGINN Stimmzettel entnehmen Stimmzettel lesen WENN Name = A-Mann DANN Strich bei A-Mann SONST Strich bei B-Frau ENDE Striche zaehlen WENN Anzahl der Striche A-Mann = Anzahl der Striche B-Frau DANN Losentscheid SONST WENN Anzahl Striche A-Mann > Anzahl Striche B-Frau DANN A-Mann gewaehlt SONST B-Frau gewaehlt datadidact 2016 11
2 1 Aufbau einer Programmierung mit C++ 2 Kommentare und Datentypen Im folgenden Kapitel lernen Sie - wie ein C++-Programm aufgebaut ist - Kommentare im Programmcode zu schreiben - Datentypen nach Einsatzmöglichkeit und Speicherbedarf zu unterscheiden - Variablen, Konstanten, Anweisungen und Wertzuweisungen zu formulieren - implizite und explizite Typkonvertierungen sowie Inkrement- und Dekrementoperatoren kennen. 2.1 Aufbau einer Programmierung mit C++ Vom Quelltext zum lauffähigen Programm Dieses Buch arbeitet mit der integrierten Entwicklungsumgebung von Borland C++ unter Windows. Weltweit existieren ca. 10 Entwicklungssysteme für C++. Seit dem Jahr 1998 ist die Sprache nach ISO standardisiert, so dass alle Programmbeispiele mit jedem C++-System ausgeführt werden können. Im Entwicklungssystem werden die dem Menschen verständlichen C++-Quelltexte editiert (verändert), zudem werden die jeweiligen Programme compiliert (übersetzt) und gelinkt (verknüpft, verbunden mit Bibliotheken). Bei größeren Programmierprojekten arbeitet man immer mit mehreren CPP-Dateien ihre Anzahl kann sehr groß werden, wenn viele Programmierer an dem Projekt beteiligt sind. Der erzeugt aus den Quelltexten *.cpp und *.h sogenannte Objektdateien (*.obj). Der Linker bindet diese Objektdateien mit Bibliotheksdateien (*.lib) zu einem ablauffähigen EXE-Programm. Bibliotheksdateien enthalten vorgefertigte Sammlungen von Programmmodulen. ERSTPROG.CPP main() IOSTREAM.H X.CPP Y.H usw.... ERSTPROG.OBJ X.OBJ *.OBJ *.LIB Linker ERSTPROG.EXE 12 datadidact 2016
1 Erste Schritte in C++ 4 Beschreibungsmöglichkeiten für Algorithmen Programmaufbau Das hier dargestellte Beispielprogramm in C++ hat die Struktur der Sequenz. Diese Struktur wird weiter unten erläutert. Auch das EVA-Prinzip ist gut zu erkennen. // Programm Erstprog.cpp // Einbinden einer Header-Datei // iostream ist notwendig, um Ein-/Ausgabe nutzen zu koennen #includ <iostream> using namespace std; /* Definitionsteil */ // main() enthaelt das Hauptprogramm zwischen den geschweiften Klammern {} void main() { float a,b,c; // Deklaration der Variablen /* Anweisungsteil */ cout << "Programm zum Addieren von zwei Zahlen." << endl; // Startmeldung cout << "Geben Sie die erste Zahl ein: "; // Eingabeaufforderungen cin >> a; cout << "Geben Sie die zweite Zahl ein: "; cin >> b; c=a+b; /* Berechnung der Summe, Ergebnis in c ablegen */ cout << "Die Summe von " << a << " und " << b << " ist " << c << "."; // Ergebnis ausgeben cout << endl; } An diesem Beispiel soll der Aufbau eines Programms in C++ erläutert werden. Ein Programm in C++ besteht zunächst aus 2 Teilen. I. Einbinden evtl. benötigter Headerdateien (Vorspanndateien). Durch diese werden neue Befehle in C++ zugänglich. Es gibt eine Reihe von Standard-Headerdateien, die bei jeder C++- Implementierung mitgeliefert werden. Eine davon ist die Datei iostream, durch die Befehle zur Eingabe und Ausgabe verfügbar werden. II. Im Definitionsteil werden benötigte Variablen und Funktionen definiert. Im hier dargestellten einfachsten Fall wird nur die Funktion main() definiert, die das Hauptprogramm enthält. Funktionen und damit auch das Hauptprogramm main bestehen wiederum aus zwei Teilen. A. Im Variablendeklarationsteil werden die benötigten Variablen und Konstanten eingeführt (deklariert). B. Im Anweisungsteil wird der eigentliche Algorithmus in der Sprache C++ formuliert. datadidact 2016 13
2 1 Aufbau einer Programmierung mit C++ 2 Kommentare und Datentypen Grobanalyse des Beispielprogramms Erstprog.cpp Im Deklarationsteil werden drei Variablen mit den Namen a, b und c deklariert. Diese können bestimmte Datentypen ( Datentypen siehe einen der nächsten Abschnitte) speichern, hier float, also Fließkommazahlen. Im Anweisungsteil werden verschiedene Anweisungen zur Ausgabe (cout <<) und Eingabe (cin >>) verwendet. Auch eine Berechnungsvorschrift (c=a+b) ist zu finden. 2.2 Kommentare und Datentypen Um den Überblick über ein größeres Programm zu behalten ist es wichtig, Programmteile optisch voneinander trennen zu können und bestimmte Anmerkungen anbringen zu können. Dies geschieht durch Kommentare, die vom restlichen Text auf zwei Arten abgetrennt werden können. Durch // wird ein Kommentar eingeleitet, der bis zum Ende der Zeile geht. Kommentare können aber auch in /*... */ eingeschlossen werden. Der Text in Kommentarklammern unterliegt keinen Einschränkungen und ist absolut beliebig. C++ kennt verschiedene Datentypen, die jeweils einen bestimmten Platzbedarf und verschiedene Wertebereiche haben. Diese hängen von der Architektur eines Computers ab. Folgende Angaben beziehen sich auf einen handelsüblichen Laptop: Typname Bereich Platzbedarf in Bytes bool true, false 1 char -128 bis 127 bzw. Zeichen nach ASCII-Tabelle, z.b. A oder @ 1 unsigned char 0 bis 255 bzw. Zeichen nach ASCII-Tabelle, z.b. A oder @ 1 int -32768 bis +32767 4 long -2 147 483 648 bis +2 147 483 647 4 unsigned int 0 bis 65535 4 unsigned long 0 bis 4.294.967.295 4 float ±3,4*10-38 bis ±3,4*10 +38 4 double ±1,7*10-308 bis ±1,7*10 +308 8 long double ±3,4*10-4932 bis ±1,1*10 +4932 10 // Deklaration von Variablen float a,a2; // reelle Zahlen char b; // Zeichen unsigned long l; // lange vorzeichenlose Ganzzahl long double x; // sehr genaue relle Zahl mit großem Zahlenbereich Darüber hinaus können bei Bedarf weitere Typen definiert werden, z.b. Aufzählungstypen oder Verbunde. datadidact 2016 14
4 Modul (Unterprogramm, Funktion) 5 Funktionen mit Rückgabetyp 6 Verschachtelter Funktionsaufruf PotFunk.cpp Schreiben Sie ein Programm mit einer C++-Funktion, die die folgende mathematische Funktion berechnet, wobei das Funktionsergebnis vom Typ float ist. Der Wert von x soll als Parameter an die Funktion übergeben werden. Eine Zahl eingeben: 1 Das Funktionsergebnis lautet -13 Noch eine Zahl eingeben: 2 Das Funktionsergebnis lautet 16 f(x) = 3x 3 + x 2 + 5x - 22 Euklid2.cpp Schreiben Sie das Programm Euklid1.cpp so um, dass der ggt von zwei Zahlen mit Hilfe einer Funktion namens ggt(...) berechnet wird. AddBruch.cpp Der Computer soll zwei Brüche addieren, die in Form von Zähler und Nenner eingegeben werden. Die Summe soll gekürzt ausgegeben werden. Erstellen Sie ein Struktogramm und schreiben Sie das Programm unter Verwendung der Funktionen int kuerze(zahl,zaehler,nenner) und int ggt(...) (ggt = größter gemeinsamer Teiler). Addition zweier Brueche Geben Sie den Zaehler des 1. Bruchs ein: 4 Geben Sie den Nenner des 1. Bruchs ein: 6 Geben Sie den Zaehler des 2. Bruchs ein: 2 Geben Sie den Nenner des 2. Bruchs ein: 3 ggt ist: 6 ggt ist: 6 Ergebnis: 4 / 3 Kapitel.cpp Mit Hilfe der Funktionen Potenz(float basis, long exponent) und Kapital(float anfangskapital, float zinssatz, long jahre) soll ein Hauptprogramm bei einzugebendem Anfangskapital, Zinssatz und Laufzeit die Zinsen berechnen. MittelwertF.cpp Schreiben Sie eine Funktion double Mittelwert(double a), die bei jedem Aufruf den Mittelwert aus allen bisher beim Aufruf übergebenen Werten von a und dem aktuellen Wert von a berechnet und als Ergebnis zurückgibt. Dazu verwenden Sie innerhalb von Mittelwert statische Variablen für Summe und Anzahl der erfolgten Funktionsaufrufe. datadidact 2016 67