Programmieren in C/C++ und MATLAB - Christian

Werbung
Programmieren in C/C++
und MATLAB
Sven Willert, Sabine Schmidt
Sebastian Bauer
Institut für Geowissenschaften
Christian-Albrechts-Universität zu Kiel
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-1
Vorlesung
Vorlesung drei-stündig, mit Übungen
Vorlesung Di, 10:30-12:45 (mit 15 Minuten Pause)
1/3 Vorlesung, 2/3 Übung
Vorlesungsunterlagen C++ über Homepage Sebastian Bauer:
http://www.geohydromodelling.uni-kiel.de/
Zwei Hauptteile:
- C++
- MatLab
-
Grundlagen
Theorie
Sprachelemente
Praktische Übungen
Ziel:
- Erstellen von kleineren Hilfsprogrammen
- Datenkonvertierung
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-2
Inhalt C++
-
Programmiersprachen, Einführung C/C++
Aufbau eines C++ Programms
Datentypen, Variablen, Konstanten, Typumwandlungen
Deklaration, Definition
Ein- und Ausgabe: Bildschirm, File-IO, Zahlen und Zeichen
Operatoren
Kontrollstrukturen: for(), while(), if() then() else(), switch()
Felder, ein- bis mehr-dimensional
Funktionen
Objektorientierte Programmierung (Übergang MATLAB)
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-3
Was ist Unix
Entwickelt im Gegensatz zu Multics, 1969; erster Name: Unics
Im Gegensatz zum Standard- Desktop-PC mit Microsoft Windows
Betriebssystem sind Unix Betriebssysteme für sog. Workstations
konzipiert, die höhere und verteilte Rechenleistungen erlauben.
Es gibt eine Reihe von Unix-Systemen: Solaris (Sun Microsystems),
AIX (IBM), HP-UX (Hewlett-Packard), Irix (Silicon Graphics), FreeBSD
und NetBSD (Freeware)
Eigenschaften:
- Multitasking: gleichzeitiges Ausführen von Prozessen
- Multiuser:
Mehrere Benutzer können gleichzeitig auf dem
Computer arbeiten und auf die Computer-Ressourcen
zugreifen
Daraus folgen drei wesentliche Konsequenzen:
- Dateien gehören einem Benutzer (Dateirechte)
- Prozesse gehören einem Benutzer (Feste Zuordnung ausführbarer
Programme zu einem User)
- benutzerspezifische Konfigurationen
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-4
Was ist Linux
Linux bezeichnet im Ursprung nur den Betriebssystemkern, den der
Finne Linus Torvalds 1991 entwickelt hat – als Lehrbetriebssystem (!)
Durch internationalen Austausch in einer Open-Source Gemeinde und
dauerhafter Weiterentwicklung durch viele Enthusiasten weltweit wurde
daraus das vollständige, sehr leistungsstarke Betriebssystem, wie es
heute bekannt ist. Linux ist kein offiziell akkreditiertes Unix.
Linux ist preisgünstig (kostenlos) und begnügt sich mit preisgünstiger
Hardware, im Gegensatz zu Unix. Alle auf Linux entwickelten
Programme lassen sich „leicht“ auf andere Unix-Systeme portieren.
So ist auch C/C++ ein standartisierte und portable
Programmiersprache.
Mit Linux einher geht eine Vielzahl an Zusatzprogrammen, die zumeist
dem GNU Open Source Projekt entstammen, das für freie, im Quellcode
verfügbare Software einsteht (Emacs, gcc, gdb, make, ..)
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-5
Grundbegriffe
Compiler:
Bei Programmiersprachen wie C/C++, Fortran, Pascal etc handelt es
sich um Hochsprachen, die durch ein spezielles Programm in
Maschinencode übersetzt werden müssen, aus dem dann die
ausführbare Datei entsteht. So ein Programm nennt man Compiler.
Der Compiler prüft beim Übersetzen (=Kompilieren) auch, ob der
Code (=Programmtext) im Einklang mit den Regeln der
Programmiersprache ist (= Syntax) steht. Compiler geben auch
Warnungen aus, die auf mögliche Inkonsistenzen oder
Mehrdeutigkeiten hinweisen. Zum erfolgreichen Compilieren muss
der Compiler fehlerfrei übersetzen. Zusätzlich sollte der
Programmtext auch warnungsfrei übersetzt werden können
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-6
Grundbegriffe
Dateiarten:
Die Datei, die den Programmtext (= Quelltext, Code, Source code)
enthält, wird mit einer Endung versehen, die die
Programmiersprache kennzeichnet. Hier: *.cpp (auch *.cc, *.cxx)
Bei C/C++ werden die Schnittstellen zu Unterprogrammen und
Datenstrukturen in eigenen Dateien vom übrigen Code getrennt.
Diese Dateien nennt man header-Dateien (*.h)
Aus den vorhandenen Source code und header Dateien erzeugt der
Compiler entweder gleich das ausführbare Programm (*.exe in
Windos, beliebige Endung bzw. Namen unter Linux) oder eine
Zwischenstufe, den sog. Objektcode (*.obj, *.o)
Aus dem fertigen Objektcode erstellt dann der Linker das fertige
Programm
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-7
Grundbegriffe
Dateiarten:
Ein Sammlung von Unterprogrammen in übersetzter Form heiss
Bibliothek (library). Diese können zu einem Programm hinzugelinkt
und damit die Unterprogramme verwendet werden.
-> Statische Bibliotheken werden zum ausführbaren Code
dazugelinkt
-> dynamische Bibliotheken (*.dll) werden erst zur Laufzeit des
Programms hinzugezogen
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-8
C und C++
C wurde 1972 von D. Ritchie an den Bell Laboratories von AT&T
(American Telefon and Telegraph Company) entwickelt. C ist
Nachfolger von B, und stellte eine Hardware-unabhängige Sprache
dar. Diese war besonders für Unix geeignet und entwickelt (Unix ist
im Wesentlichen in C implementiert). C ist eine imperative,
strukturierte Programmiersprache und hat universelle Verbreitung
gefunden. C- Programme können auf fast allen Rechnern compiliert
werden.
C++ ist eine auf C basierende Weiterentwicklung (++ ist der
Inkrementoperator in C), die in den 1980er Jahren von Bjarne
Stroustrup ebenfalls bei AT&T. C++ unterstützt prozedurale und
objektorientierte Programmierung.
Hauptunterschied ist die Einführung von Klassen, d.h. selbst zu
definierenden Konstrukten aus Daten und Funktionen. Die
objektorientierte Programmierung ist insbesondere für große
Programme und Benutzeroberflächen geeignet.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-9
Ein erstes C++ Programm
1: /* Das erste Programm:
2: Summe der Zahlen von 1 bis 10
3: */
4:
5: #include <iostream>
6:
7: int main(void)
8: {
9: // Variable deklarieren und initialisieren
10: int zahl;
11: zahl = 0;
12:
13: // Schleife durchlaufen
14: for (int i = 1; i <= 10; i++)
15: {
16:
zahl += i;
17:
cout << "Summe bis " << i << ": ";
18:
cout << zahl << "\n";
19: }
20: }
21:
Sebastian Bauer
Institut für Geowissenschaften
Normalerweise gibt
das erste Programm
„Hallo Welt“ auf den
Bildschirm aus.
Beispiel aus Wieland, 2004
Programmieren in C/C++ und MATLAB
CAU,
1-10
Ein erstes C++ Programm
Kommentar
Ein Kommentar ist eine Anmerkung, ein Text, der vom Compiler
ignoriert wird. Diese Kommentare dienen dazu, den Programmtext
besser lesbar und verständlicher zu machen. Bei etwas größeren
Programmen (wo Sie vielleicht nur einmal pro Jahr in eine bestimmte
Funktion hineinschauen) kann eine ausführliche und aussagekräftige
Kommentierung sehr wichtig sein. Auch wenn Sie ein Programm von
einer anderen Person übernehmen und weiterführen sollen, sind
Kommentare sehr wichtig.
Faustregel: Im Schnitt eine Kommentarzeile pro Codezeile
Kommentare können auf zwei Arten gekennzeichnet werden:
- Durch „//“, dann sind alle folgenden Zeichen bis zum Zeilenende
Kommentar (Zeilen 9, 13)
- Anmerkung eingeschlossen durch „/* Kommentar */. Dies kann
auch über Zeilenenden hinweg gehen (Zeile 1-3)
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-11
Ein erstes C++ Programm
Variablen
In (fast) jedem Programm muss mit irgendwelchen Daten
umgegangen werden. Dafür müssen Speicherstellen im Computer
geschaffen werden, in denen diese Daten abgelegt (gespeichert,
RAM) werden können. Eine solche Speicherstelle heißt Variable, weil
sich ihr Wert (Inhalt) im Verlauf des Programms ändern kann.
Variablen werden nach ihrem Typ unterschieden, d.h. ob sie Zahlen
(und welchen Typ) oder Buchstaben oder ... aufnehmen können.
Deklaration
Jede Variable hat einen Namen. Im Beispiel gibt es zwei Variablen,
zahl und i. Bevor eine Variable verwendet werden kann, muss sie
deklariert werden. Im Beispiel:
int zahl; (Zeile 10)
Mit dieser Zeile wird angegeben, dass eine Variable vom Typ int
(=Integer = Ganzzahl) mit Namen zahl verwendet werden soll. Das
Programm reserviert dann den benötigten Speicherplatz und ordnet
ihn der Variable zu.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-12
Ein erstes C++ Programm
Initialisierung
Variablen haben nach der Deklaration keinen definierten Wert,
sondern können alle möglichen Werte aufweisen. Grund ist, das noch
kein Wert auf dem zugeordneten Speicherplatz eingetragen wurde,
sonder gelesen wird, was da zufällig steht. Eine Initialisierung ist
dann besonders wichtig, wenn mit dieser Variable weitergearbeitet
wird, also z.B. eine weitere Zahl addiert wird. Dann ist auch das
Ergebnis der Addition undefiniert. Daher sollte jede Variable mit
einem sinnvollen Wert initialisiert werden.
Im Beispiel wird in Zeile 11 die Variable zahl mit dem Wert 0
initialisiert: zahl = 0;
Namensgebung
Der Name einer Variable muss mit einem Buchstaben oder dem
Unterstrich „_“ anfangen, darf nicht länger als 256 Zeichen lang sein.
C++ unterscheidet zwischen Groß- und Kleinschreibung.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-13
Ein erstes C++ Programm
Operator
Eine Zuweisung an eine Variable geschieht über den Operator „=“.
(Zeile 11). Einer Variablen kann ein fester Wert (wie in Zeile 11), der
Wert einer anderen Variablen oder ein Rechenergebnis zugewiesen
werden (Zeile 16):
zahl = zahl + i
Diese Zuweisung und Rechnung kann statt über zwei Operatoren „+“
und „=“ auch nur über den Operator „+=“ gemacht werden:
zahl += i
Ausgabe und Eingabe
Ein besonderer Operator wird für die Ein- und Ausgabe verwendet.
Der „<<“ Operator bedeutet dass alles was rechts von ihm steht
nach links weitergereicht wird. Im Beispiel wird also „Summe bis “
weitergereicht an „cout“, das die Ausgabe auf dem Bildschirm
durchführt.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-14
Ein erstes C++ Programm
Strukturierung
Jede Anweisung in C/C++ endet mit einem Semikolon „;“
Ausnahmen bilden Kontrollstrukturen, die durch geschweifte
Klammern gekennzeichnet sind. Diese Klammern kennzeichnen einen
Block – jede Funktion ist ein solcher Block.
Solche Blöcke können geschachtelt werden.
Übersichtlichkeit
C++-Code kann sehr verschachtelt und kurz geschrieben werden.
Das sollten Sie nicht tun. Faustregel:
- nur eine Anweisung pro Zeile
- Einrücken von Anweisungen innerhalb eines Blocks (Im Beispiel:
Zeile 15 – 19.
- Leer- und Kommentarzeilen einfügen.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-15
Ein erstes C++ Programm
Präprozessor-Anweisung
Vor der eigentlichen Compilierung wird eine Vorverarbeitung
gemacht, bei der header Dateien eingefügt oder Makros expandiert
werden. Jede Anweisung in C/C++ endet mit einem Semikolon „;“
Anweisungen für den Präprozessor sind durch „#“ gekennzeichnet.
Im Beispielprogramm wird durch Zeile 5:
#include <iostream> Die header Datei „iostream.h“ eingebunden und Funktionen aus ihr
zur Verfügung gestellt. Dabei wird die header-Datei nur in den
Standard-Verzeichnissen des Betriebssystems für Header-Dateien
gesucht. Für lokale header: 5: #include “iostream.h“ .
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-16
Ein erstes C++ Programm
Hauptfunktion (=Hauptprogramm)
Die Hauptfunktion kennzeichnet Anfang und Ende des Programms. In
C++ wird beides durch die Funktion main() festgelegt. Egal wo im
Source-Code diese Funktion steht, die Programmausführung beginnt
in der main- Funktion, und diese muss immer vorhanden sein.
Im Beispiel Zeile 7-19.
Eine Funktion ist typischerweise ein Stück Code, das eine
übersichtliche Aufgabe ausführt, der zu Zwecken der besseren
Übersichtlichkeit und Wiederverwertbarkeit gekapselt wurde und
einen eigenen Namen bekommen hat.
An eine Funktion können Variablen mit ihren Werten übergeben
werden, und die Funktion kann einen Wert zurück liefern:
int main(void){...}
Im Beispiel heißt die Funktion „main“, Ihr werden keine Variablen
übergeben und sie liefert einen int-Wert zurück.
double name(int x, double y) {double z; z=...; return z;}
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-17
Ein erstes C++ Programm
Schleifen
Im Beispiel in Zeile 14-15 wird die sog. for- Schleife verwendet.
Diese kann genutzt werden, um wiederkehrende Rechnungen
durchzuführen.
14: for (int i = 1; i <= 10; i++) 15: {
16‐18:
Do_something(i); 19: } Zeile 14 gibt an, wie oft etwas getan werden soll, Zeile 16-18 geben
an, was getan werden soll. i ist die Zählvariable, die intern
(=innerhalb der for- Schleife) deklariert und initialisiert wird.
Die Bedeutung ist: Setze i=1, führe die Anweisungen
Do_something(i) aus, erhöhe i um eins (i++) , führe Do_something(i)
aus, erhöhe i um eins (i++) , solange, wie i kleiner als 10 ist.
Es gibt noch andere Schleifen...
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-18
Ein erstes C++ Programm
Ausgabe
Im Beispiel wird in Zeile 17-18 jeweils das aktuelle Ergebnis der
Addition ausgegeben.
cout ist dabei die Standard-Bildschirmausgabe, „<<“der
Übergabeoperator.
Übergeben an die Bildschirmausgabe wird zum einen Text. Dieser ist
gekennzeichnet durch “Summe bis “ , d.h. durch obenstehende
Anführungszeichen begonnen und abgeschlossen.
Es kann auch eine Variable ausgegeben werden. Im Beispiel wird
jeweils der aktuelle Wert der Variablen i und zahl ausgegeben.
“\n“ ist das Zeilenendzeichen, damit wird in der Bildschirmausgabe
ein Zeilenumbruch erzeugt. Äquivalent kann auch cout << endl;
verwendet worden (endl = end of line)
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-19
Datentypen und Formate
Mit der Festlegung des Datentyps wird die Art bestimmt, mit der der
Computer die Informationen interpretiert und wie sie gespeichert
werden. Ebenso wird damit die Art der Operationen festgelegt, die
mit diesen Datentypen erlaubt sind.
C++ bietet einige fest eingebaute Datentypen, es können aber auch
selber welche geschaffen werden (Klassen).
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-20
Elementare Datentypen
Logische (boolsche) Wert:
Diese können die Werte „true“ oder „false“ annehmen.
bool ist_richtig;
Zeichen (character):
Damit können Zeichen dargestellt werden sowie die Ziffern 0-9
char a = ‘B‘;
Integer:
Damit können ganze Zahlen dargestellt werden
int i = ‐9;
Die Ganzzahlen gibt es in mehreren Größen:
short int
2 Byte
-32768 ... 32767
int
4 Byte
-2147483648 ... 2147483648
long int
4 oder 8 Byte -9.2 1018 ... 9.2 1018 oder wie int
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-21
Elementare Datentypen
Gleitkommazahlen:
(Zahlen mit Nachkommastellen). Diese gibt es in einfacher und
doppelter Genauigkeit:
float x; double y;
float
4 Byte
-1.2 10-38 ... 1.2 1038
double
8 Byte
-1.8 10-308 ... 1.8 10308
Auch wenn die Zahlen Gleitkommazahlen heißen, werden Sie mit
einem Dezimalpunkt angegeben!
void:
Damit ist ein nicht existierender Wert gemeint. Wird auch verwendet
um anzuzeigen, dass ein Unterprogramm keine Übergabeparameter
braucht oder Werte zurück liefert.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU,
1-22
Herunterladen