Aufbau von Programmen/Dateien Typen von Dateien Header-Dateien (.h): enthalten Deklarationen (auch Signatur, Prototyp, Rumpf) von Funktionen, Variablen, Konstanten und in C++ auch Klassendefinitionen eines Programms oder einer Bibliothek, welche in anderen Programm(datei)en genutzt werden können, in der Regel jedoch nicht deren Definition (Implementierung) /* Deklaration einer Funktion */ int sum(int x, int y); Code-Dateien (.cpp,.c,.c, etc.): enthalten die Definition von Funktionen (oder Methoden in C++) und ggf. die spezielle Funktion main als Einstiegspunkt für ein ausführbares Programm /* Definition einer Funktion */ int sum(int x, int y) { return x+y }; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 5
Aufbau von Programmen/Dateien /2 Programme können aus zahlreichen Code- und Header-Dateien bestehen Header-Dateien als Schnittstelle zwischen verschiedenen Code Dateien: in einer inkludierten Datei deklarierte Funktionen können benutzt werden, sind aber in einer anderen Code-Datei implementiert Code-Dateien werden zuerst separat übersetzt Ergebnis: Objektdateien.obj oder.o Linker: statische Verbindung verschiedener Objektdateien zu einer Programmbibliothek oder zu einem ausführbaren Programm Standardbibliotheken der Programmiersprache oder des Betriebssystems sowie Teile komplexer Programme werden meist dynamisch (zur Laufzeit) gelinkt/geladen Windows: Dynamic Load Libraries (DLL) Unix: zum BeispielShared Objects (.so) Vermeidet Aufblähung ausführbarer Programme und ständige Neuübersetzung immer wieder verwendeter Programmteile Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 6
C++ Übersetzungsprozeß gif.h stdio.h math.h prog.cpp gif.cpp prog.obj Compiler gif.obj Als Teil des Betriebsystems oder der Laufzeitumgebung der Programmiersprache implementiert und vorübersetzt Linker prog.exe msvcrtxxx.dll system32.dll...... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 7
Struktur der Hauptdatei Im folgenden Fokus auf einfache Programme bestehend aus einer Hauptdatei: #include <...> /* Einzubettende Programmbibliotheken */ #define... /* Definitionen und Makros */ /* Globale Variablen */ int i; char c[] =...; /* Funktionen */ int f1(int a, int b) {... }; void f2() {...}; /* Hauptprogramm */ int main() {... } Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 8
Der Präprozessor Mit#beginnende Zeilen sind Anweisungen für den Präprozessor (Teilprogramm des Compilers) zur Durchführung einfacher Transformationen des Quelltextes vor der eigentlichen Übersetzung, z.b. #include-statements: Einbettung anderer Quelltextdateien (vor allem Header-Dateien von Programmteilen oder Standardbibliotheken) #include <...> /* Datei im INCLUDE-Pfad */ #include... /* relativer Pfad */ #define-statements: Festlegung von Werten für Ausdrücke, die z.b. im Quelltext in der Folge ersetzt werden können oder für die Steuerung des Präprozessors verwendet werden können #define PI 3.14159265 Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 9
Programmblöcke Inhaltlich zusammengehörige Befehlsfolgen werden durch geschweifte Klammern {... } zu Programmblöcken zusammengefaßt Verwendung zum Beispiel für Definition von Funktionen int f(int x, int y) {...}; Steueranweisungen wie Schleifen while (<bedingung>) {...}; Innerhalb eines Programmblocks definierte Variablen, können nur dort verwendet werden Verwendung geschweifter Klammern auch zur Definition zusammengesetzter Datentypen ( z.b.struct,enum,union) sowie zur Definition von Klassen in C++ Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 10
Sequenzen Sequenzen von Befehlen (entsprechend imperativem Programmierparadigma) werden durch Verkettung mit Semikolon ; gebildet Dabei können einzelne Befehle Definition/Deklaration von Variablen Steueranweisungen (Schleifen, Bedingungen, Fehlerbehandlung, etc.) Ausdrücke (haben immer ein Ergebnis und einen Ergebnistyp) sein Literale Werte Variablen Funktionsaufrufe Komplexe Ausdrücke: Verknüpfung von Teilausdrücken durch Operatoren Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 11
Beispiel: Mittelwert (C) #include <stdio.h> float mittelwert(float a, float b) { return (a+b)/2; } int main() { float x,y,m; printf( x = ); scanf( %f,&x); printf( y = ); scanf( %f,&y); m = mittelwert(x,y); printf( Mittelwert = %f \n, m); return 0; } Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 12
Beispiel: Mittelwert (C++) #include <iostream> using namespace std; float mittelwert(float a, float b) { return (a+b)/2; } int main() { float x,y,m; cout << x = ; cin >> x; cout << y = ; cin >> y; m = mittelwert(x,y); cout << Mittelwert = << m << endl; return 0; } Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 13
Variablendeklarationen Grundlegender Syntax: <datentyp> <variablennamen> [, <variablenname>...]; Datentyp ist: Basisdatentyp wieint,float, etc. (siehe Abschnitt Kodierung) Feld von Variablen eines Datentyps ( ) Zusammengesetzter, nutzerdefinierter Datentyp ( ) Nutzerdefinierter Objekttyp (C++ ) Zeiger auf Adresse eines Objektes oder Wertes von Datentyp ( ) Erlaubt Deklaration mehrerer Variablen eines Typs in einem Statement, z.b. int x, y, z; Erlaubt Zuweisung initialer Werte, z.b. int solution=42; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 14
Ausdrücke Zusammengesetzt aus Variablen, literalen Werten und Funktionsaufrufen Verbunden durch Operatoren Beispiele: x=1; /* Zuweisung eines literalen Wertes */ x++; /* Inkrementierung (postfix) */ x=x+1; /* Zuweisung und arithemtische Verknüpfung */ x=(x==4); /* Zuweisung und geklammerter Vergleich */ x=quadrat(x+1); /* Zuweisung und Funktionsaufruf */ x & 1; /* Logische Operation, Ergebnis ignoriert */ Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 15
Ausdrücke /2 Können durch Kombination und Klammerung beliebig komplex werden VORSICHT: Lesbarkeit! VORSICHT: Typ-Kompatibilität der Operanden Implizite Konvertierung manchmal unproblematisch, z.b.int float Teilweise Verlust von Information, z.b.float int durch Abschneiden der Nachkommastellen Nur zum Teil Fehlermeldungen oder Warnungen bei inkompatiblen Typen Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 16
Ausdrücke: Arithmetische Operatoren Operator Beispiel Bedeutung + x+y Addition - x-y Subtraktion * x*y Multiplikation / x/y Division % x%y Rest bei ganzzahliger Division ++ y=x++ Inkrementierung (postfix) x um eins erhöht y hat alten Wert von x y=++x Inkrementierung (prefix) x um eins erhöht y hat neuen Wert von x x Dekrementierung entsprechend x als pre- und postfix anwendbar......... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 17
Ausdrücke: Zuweisungsoperatoren Operator Beispiel Bedeutung = x=7 Standardzuweisungsoperator += x+=7 Selbstzuweisung mit Addition entsprichtx=x+7 (prefix Variante) =+ x=+7 Selbstzuweisung mit Addition (postfix Variante) -= x-=7 Selbstzuweisung mit Subtraktion *= x*=7 Selbstzuweisung mit Multiplikation /= x/=7 Selbstzuweisung mit Division %= x%=7 Selbstzuweisung des Divisionsrestes......... Ergebnis einer Zuweisung ist immer der neue Wert des linken Operanden Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 18
Ausdrücke: Vergleichsoperatoren Da in C lange einboolean-datentyp fehlte, ist Ergebnis ganzzahliger Wert 1, wenn Vergleich erfolgreich (TRUE) 0, andernfalls (FALSE) Operator Beispiel Bedeutung == x==y Test auf Wertegleichheit!= x==y Test auf Ungleichheit > x>y... größer als... < x<y... kleiner als... >= x>=y... größer als oder gleich... <= x<=y... kleiner als oder gleich............ Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 19
Ausdrücke: Logische Operatoren /1 Zwei Sichtweisen für logische Operationen 1 Bitweises Verknüpfen für Bytes 2 Logische Verknüpfungen von 1 (TRUE) und 0 (FALSE) kann auf 1. zurückgeführt werden Bei Operatoren für logische Verknüpfung: Abbruch (short cut) der Auswertung, wenn möglich Bei AND: Abbruch, wenn erste Bedingung FALSE, da Ergebnis nur FALSE sein kann Bei OR: Abbruch, wenn erste Bedingung TRUE, da Ergebnis nur TRUE sein kann Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 20
Ausdrücke: Logische Operatoren /2 Operator Beispiel Bedeutung!!x Logische Negation (NOT) && x&&y Logische Konjunktion (AND) x y Logische Disjunktion (OR) & x&y Bitweises AND x y Bitweises OR x y Bitweises XOR x Bitweise Negation......... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 21
Ausdrücke: Sonstige Operatoren Zur Arbeit mit speziellen Datentypen wie zum Beispiel Feldern, Zeigern, Strukturen und Objekten ( ) Operator Beispiel Bedeutung [] a[7] Zugriff auf Position in Feld. window.size Zugriff auf Komponente einer Struktur oder eines Objektes * *i Dereferenzierung eines Zeigers & &i Bildung der Referenz (Zeiger) -> window->size Zugriff auf Komponente über Zeiger () (int)myfloat Explizite Typumwandlung (Casting) new w = new Window() Erzeugen eines neuen Objektes......... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 22
Ein-/Ausgabe C-style: printf() Grundlegende Ein-/Ausgabe für C definiert instdio.h als Funktionen Ausgabe: Funktionprintf() printf(<formatstring>[,<ausgabeliste>]) Formatstring besteht aus literalem Augabetext und typspezischen Platzhaltern beginnend mit % für formatierte Ausgabe von Werten Ausgabeliste besteht aus freier Anzahl von kommaseparierten Parametern welche auszugebende Variablenwerte darstellen und mit Anzahl und Typ der Platzhalter übereinstimmen muss Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 23
Ein-/Ausgabe C-style: printf()-formatstring Einige wichtige Formatplatzhalter: Platzhalter entsprechendes Parameter %c char: ein einzelnes Zeichen %d und %i decimal,integer: Ganzahlwert in Dezimaldarstellung %f, %e, %g float,exponential: Gleitkommazahhlen in unterschiedlichen Darstellungsweisen %lf long float: zum Beispieldouble %s string: eine Zeichenkette %x hex: eine Hexadezimalzahl %% Prozentzeichen Beispiel printf( Name: %s Alter: %i, name, alter); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 24
Ein-/Ausgabe C-style: printf()-steuerzeichen Außerdem ASCII-Steuerzeichen kodiert mit führendem \ zur weiteren Formatierung der Textausgabe Einige wichtige Steuerzeichen: Steuerzeichen Bedeutung \ Einfacher Anführungsstrich \ Doppelter Anführungsstrich \n Zeilenumbruch (newline) \t Tabulatorvorschub (horizontal) \\ Backslash...... Beispiel: printf( Zeile 1 \n \ Zeile 2\ \n \t Zeile 3 \n ); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 25
Ein-/Ausgabe C-style: scanf() Eingabe: Funktionscanf() printf(<formatstring>[,<eingabeliste]]) Erlaubt Erfassen komplex strukturierter Eingaben mit Textmustern und Platzhaltern entsprechendprintf(), aber im folgenden einfache Eingabe meist einzelner Werte scanf( %i, &meineinteger); scanf( %f, &meinefloat); Vorsicht: Eingabeliste besteht aus Adressen der Variablen (vorgestelltes &), da Werte durch Funktion modifiziert werden müssen (pass by reference Funktionen) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 26
Ein-/Ausgabe C++-style C++ definiert für Ein-/Ausgabe eigene Bibliothekiostream.h Verwendet außerdem Namensräume (iostream im Standardnamensraumstd, d.h. für Verwendung #include <iostream> using namespace std; Basiert auf Datenströmen (Streams) Eingehende Datenströme: Input Streams Ausgehende Datenströme: Output Streams und deren Auswertung bzw. Manipulation Beliebige Datenströme sowie deren Operatoren und Funktionen sind als Klassen definiert Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 27
Ein-/Ausgabe C++-style:cin undcout iostream definiert Standardobjekte der Stream-Klassen für Standardeingabe (Tastatur) und Standardausgabe (Konsole) cout - Standardausgabe cin - Standardeingabe Arbeit mit Datenströmen vor allem über Shift-Operatoren, d.h. Verschieben von Daten auf oder aus Strömen >> - Verschieben von Daten aus dem Strom (Lesen) << - Verschieben von Daten auf den Strom (Schreiben) Ergebnis ist der Stream selbst, d.h. Operatoren können verkettet werden Beispiel cout << Eingabe << endl << x: ; cin >> x; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 28
Ein-/Ausgabe C++-style: Stream-Manipulatoren Kontrolle der Streams bzgl. Darstellung von Werten und Formatierung über definierte Konstanten (Stream-Manipulatoren), z.b. Manipulator Bedeutung dec Integer als Dezimalzahl hex Integer als Hexadezimal fixed Float als Festkommazahl scientific Float als Halblogarithmisch endl Zeilenende flush Sofortige Buffer-Entleerung..... Beispiel: cout << Alter << dec << alter << endl; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 29
Kommentare Natürlichsprachliche Beschreibung/Erklärung des Quelltextes oft hilfreich und erforderlich Werden vom Compiler bei der Übersetzung vollständig ignoriert /* Kommentar, gerne auch mal über mehrere Textzeilen */ x=x+1; // Kommentar bis zum Zeilenende Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 30