Teil IV. Grundlagen der Programmierung

Größe: px
Ab Seite anzeigen:

Download "Teil IV. Grundlagen der Programmierung"

Transkript

1 Teil IV Grundlagen der Programmierung

2 Überblick 1 Die Programmiersprachen C/C++ Einleitung zu C und C++ Aufbau von Programmen/Dateien Steueranweisungen Funktionen Mehr zu Datentypen: Felder, Zeiger und Strukturen Arbeit mit Dateien 2 Objektorientierung in C++ Einführung Objektorientierung Objekte und Klassen in C++ Vererbung in C++ Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 143/378

3 Einleitung C und C++ C als Weiterentwicklung der Programmiersprache B Anfang 1971 für Unix entwickelt C++ als objektorientierte Erweiterung aus dem Jahr 1983 Andere populäre Sprachen wie Java, C#, Perl, PHP, etc. orientieren sich am Syntax von C/C++ C/C++ Heutzutage verbreitetste Sprachen zur Entwicklung von Anwendungsprogrammen und Betriebssystemen Compiler und Entwicklungsumgebungen existieren für alle Plattformen Beide Sprachen sind offiziell standardisiert, wobei Abweichungen vom Standard bei C++ häufiger (C-Programme deshalb besser portierbar zwischen verschiedenen Compilern oder Plattformen) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 144/378

4 Eigenschaften von C und C++ C ist eine imperative Programmiersprache: ein Algorithmus ist dargestellt als Sequenz von hintereinander auszuführenden Befehlen C ist eine prozedurale Programmiersprache: zur Strukturierung des Quelltextes kann der Gesamtalgorithmus in inhaltlich zusammenhängende und an verschiedenen Stellen (durch Aufruf) verwendbare Prozeduren (in C Funktionen) zerlegt werden C++ ist eine objekt-orientierte Programmiersprache: zur weiteren Strukturierung können Daten von Objekten (Anwendungsobjekte wie Zeichenketten, Postadressen etc., aber auch z.b. Fenster der GUI oder Programmkomponenten) sowie die zugehörige Funktionalität als Methoden (objekt-spezifische Funktionen) in Klassen zusammengefaßt werden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 145/378

5 Verhältnis/Unterschiede von C und C++ C++ konzipiert als kompatible Erweiterung (Obermenge) von C Eigentlich sollte jedes C-Programm auch von einem C++-Compiler übersetzt werden können Im Detail jedoch problematisch, z.b. Variablennamen in C-Programmen können Schüsselwörter in C++ sein, z.b. class, new, etc. Typkonvertierung wegen Objekt-orientierung unterschiedlich Standards entwickeln sich parallel weiter, aber gegenseitige Berücksichtigung C++ bietet alternative, objekt-orientierte Bibliotheken für Standardaufgaben, z.b. stdio vs. iostream Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 146/378

6 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 (auch Source- oder Quelldateien,.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, FIN/ITI Grundlagen der Informatik für Ingenieure 147/378

7 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 Beispiel Shared Objects (.so) Vermeidet Aufblähung ausführbarer Programme und ständige Neuübersetzung immer wieder verwendeter Programmteile Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 148/378

8 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.dlll system32.dll Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 149/378

9 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, FIN/ITI Grundlagen der Informatik für Ingenieure 150/378

10 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 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 151/378

11 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, FIN/ITI Grundlagen der Informatik für Ingenieure 152/378

12 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, FIN/ITI Grundlagen der Informatik für Ingenieure 153/378

13 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, FIN/ITI Grundlagen der Informatik für Ingenieure 154/378

14 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, FIN/ITI Grundlagen der Informatik für Ingenieure 155/378

15 Variablendeklarationen Grundlegender Syntax: <datentyp> <variablennamen> [, <variablenname>...]; Datentyp ist: Basisdatentyp wie int, 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, FIN/ITI Grundlagen der Informatik für Ingenieure 156/378

16 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, FIN/ITI Grundlagen der Informatik für Ingenieure 157/378

17 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, FIN/ITI Grundlagen der Informatik für Ingenieure 158/378

18 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, FIN/ITI Grundlagen der Informatik für Ingenieure 159/378

19 Ausdrücke: Zuweisungsoperatoren Operator Beispiel Bedeutung = x=7 Standardzuweisungsoperator += x+=7 Selbstzuweisung mit Addition entspricht x=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 normalen oder prefix-zuweisung ist der neue Wert des linken Operanden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 160/378

20 Ausdrücke: Vergleichsoperatoren Da in C lange ein boolean-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, FIN/ITI Grundlagen der Informatik für Ingenieure 161/378

21 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, FIN/ITI Grundlagen der Informatik für Ingenieure 162/378

22 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, FIN/ITI Grundlagen der Informatik für Ingenieure 163/378

23 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, FIN/ITI Grundlagen der Informatik für Ingenieure 164/378

24 Ein-/Ausgabe C++-style C++ definiert für Ein-/Ausgabe eigene Bibliothek iostream.h Verwendet außerdem Namensräume (iostream im Standardnamensraum std, 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, FIN/ITI Grundlagen der Informatik für Ingenieure 165/378

25 Ein-/Ausgabe C++-style: cin und cout 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, FIN/ITI Grundlagen der Informatik für Ingenieure 166/378

26 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, FIN/ITI Grundlagen der Informatik für Ingenieure 167/378

27 Ein-/Ausgabe C-style: printf() Grundlegende Ein-/Ausgabe für C definiert in stdio.h als Funktionen Ausgabe: Funktion printf() 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, FIN/ITI Grundlagen der Informatik für Ingenieure 168/378

28 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 Beispiel double %s string: eine Zeichenkette %x hex: eine Hexadezimalzahl %% Prozentzeichen Beispiel printf( Name: %s Alter: %i, name, alter); Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 169/378

29 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, FIN/ITI Grundlagen der Informatik für Ingenieure 170/378

30 Ein-/Ausgabe C-style: scanf() Eingabe: Funktion scanf() scanf(<formatstring>[,<eingabeliste]]) Erlaubt Erfassen komplex strukturierter Eingaben mit Textmustern und Platzhaltern entsprechend printf(), 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, FIN/ITI Grundlagen der Informatik für Ingenieure 171/378

31 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, FIN/ITI Grundlagen der Informatik für Ingenieure 172/378

32 Zusammenfassung: Aufbau von Programmen Programme können aus zahlreichen Dateien bestehen Header-Dateien als Definition der Schnittstelle von Bibliotheken aus Funktionen, Variablen und Konstanten Code-Dateien enthalten Implementierung von Funtkionen aus Bibliotheken und/oder main-funktion Programmblöcke, z.b. Implementierung einer Funktionen, bestehenaus Sequenz von Befehlen Befehle sind Deklarationen, Steueranweisungen oder Ausdrücke Einfache Ausdrücke sind Funktionsaufrufe, Variablen oder literale Werte Komplexe Ausdrücke können durch Verknüpfung von Ausdrücken über Operatoren gebildet werden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 173/378

33 Steueranweisungen Bisher Programme mit Funktionen als einfache Folge von Befehlen Ablauf von Programmen darüber hinaus steuerbar über Bedingte Ausführung: Ausführung von Programmteilen (Befehlen oder Programmblöcken) nur wenn eine bestimmte Bedingung erfüllt ist Selektion, Verzweigung Programmschleifen: mehrfache Wiederholung von Programmteilen so lange oder bis eine bestimmte Bedingung erfüllt bzw. nicht mehr erfüllt ist Iteration, Schleife Fehlerbehandlung: Ausführung spezieller Programmteile im Fall eines Fehlers Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 174/378

34 Einfache Bedingte Ausführung if-anweisung gefolgt von geklammerter Bedingung als Einführung für einen einzelnen Befehl oder einen Programmblock if (<Bedingung>) <Befehl>; if (<Bedingung>) { <Befehlssequenz> ; Bedingung kann über logische Operatoren verknüpft werden und evaluiert entsprechend zu 0 (FALSE) oder andernfalls TRUE ( logische Operatoren) Ausführung entsprechend Ergebnis: TRUE: Ausführung des von if eingeleiteten Befehls oder Programmblocks FALSE: Programmteil der zum if-block gehört wird nicht ausgeführt und Ausführung danach fortgesetzt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 175/378

35 Einfache Bedingte Ausführung: Beispiel (C++) #include <iostream> using namespace std; int main() { int x; cout << x = ; cin >> x; if (x >= 0) cout << Zahl ist positiv oder gleich 0. << endl; if (x == 42) { cout << Die Zahl ist 42. << endl; cout << Das ist hexadezimal << hex << 42 << endl; ; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 176/378

36 Einfache Bedingte Ausführung: Beispiel (C) #include <stdio.h> int main() { int x; printf( x = ); scanf( %i,&x); if (x >= 0) printf( Zahl ist positiv oder gleich 0. \n ); if (x == 42) { printf( Die Zahl ist 42. \n ); printf( Das ist hexadezimal %X \n,42); ; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 177/378

37 Darstellung von Programmabläufen Zum Entwurf und zur Illustration von Algorithmen verschiedene formale und informale Beschreibungsmittel: Pseudocode: informale, textuelle Darstellung des Algorithmus zum Teil mit Mitteln der natürlichen Sprache Struktogramme: formale Darstellung von Programmabläufen als Blockdiagramm Programmablaufpläne (PAP): Beschreibung des Programmablaufs durch spezielle Notation für generische Anweisungsklassen Im folgenden beide letztgenannte Diagrammtypen gemischt mit Pseudocode zur Illustration Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 178/378

38 Einfache Bedingte Ausführung: Struktogramm START Test42 Eingabe: x x >=0? ja Ausgabe Text % x = 42? ja Ausgabe Text Ausgabe Hex STOP % nein nein Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 179/378

39 Einfache Bedingte Ausführung: PAP START Eingabe: x x >= 0? ja nein Ausgabe Text x = 42? ja nein Ausgabe Text Ausgabe Hex STOP Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 180/378

40 Bedingte Ausführung mit Alternative Erweiterter Syntax der if-anweisung um else-klausel: Ausführung eines alternativen Programmteils, falls Bedingung nicht erfüllt if (<Bedingung>) <Befehl oder Programmblock> else <Befehl oder Programmblock>; In Abhängigkeit von der Bedingung wird nur ein Zweig der Anweisung ausgeführt (Verzweigung) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 181/378

41 Bedingte Ausführung mit Alternative: Beispiel (C++) #include <iostream> #include <cmath> using namespace std; int main() { float x; cout << x = ; cin >> x; if (x >= 0) { float w = sqrt(x); cout << Wurzel ist << w << endl; else cout << Wurzelberechnung unmöglich! << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 182/378

42 Bedingte Ausführung mit Alternative: Beispiel (C) #include <stdio.h> #include <math.h> int main() { float x; printf( x = ); scanf( %f,&x); if (x >= 0) { float w = sqrt(x); printf( Wurzel ist %f \n,w); else printf( Wurzelberechnung nicht möglich! \n ); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 183/378

43 Bedingte Ausführung mit Alternative: Struktogramm START Wurzel Eingabe: x x >=0? ja w:=sqrt(x) Ausgabe w STOP nein Ausgabe Text Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 184/378

44 Bedingte Ausführung mit Alternative: PAP START Eingabe: x x >= 0? ja nein w := sqrt(x) Ausgabe Text Ausgabe w STOP Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 185/378

45 Schachtelung von if-anweisungen Verzweigungen können beliebig geschachtelt werden if (alter >= 0) if (alter < 120) cout << Alter korrekt... << endl; Können durch Zusammenfassen der Bedingungen oft vereinfacht werden: Sequenz von if-bedingungen entspricht logischer Konjunktion if (alter >= 0 && alter < 120) cout << Alter korrekt... << endl; Aber nicht immer: Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 186/378

46 Schachtelung von if-anweisungen /2 Schachtelung erlaubt separate Behandlung der logischen Alternativen im else-zweig if (alter >= 0) if (alter < 120) cout << Alter korrekt... << endl; else cout << Alter zu hoch! << endl; else cout << Alter zu gering! << endl; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 187/378

47 Sequenz von if/else if-anweisungen Sequenz von if/else if-anweisungen erlaubt Mehrfachverzweigung if (alter < 1) cout << Baby. << endl; else if (alter < 4) cout << Kleinkind. << endl; else if (alter < 6) cout << Vorschulkind. << endl; else if (alter < 18) cout << Schulkind. << endl; else cout << Führerschein. << endl; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 188/378

48 Mehrfachverzweigung mit switch switch-steueranweisung und case-sprungmarken setzen einfache Sprungtabelle um switch(<variable>) { case <Wert1> : <Befehlssequenz>; case <Wert2> : <Befehlssequenz>; case <Wert3> : <Befehlssequenz>;... default: <Befehlssequenz>; switch-variable muss ordinalen Wert haben, d.h. Integer (inklusive char) case-marken sind Sprungmarken, d.h. Ausführung ab da bis zum Ende des switch-statements sollen nur einzelne Fälle ausgeführt werden, muss der switch-block mit break verlassen werden Falls kein Wert in der Liste, wird zur optionalen default-marke gesprungen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 189/378

49 Mehrfachverzweigung mit switch: Beispiel /1 #include <iostream> #define PI using namespace std; int main() { int auswahl; float radius,durchmesser,umfang,flaeche; cout << Radius des Kreises = ; cin >> radius; cout << 1) Berechnung des Durchmessers << endl; cout << 2) Berechnung des Umfangs << endl; cout << 3) Berechnung der Fläche << endl; cout << Auswahl: ; cin >> auswahl;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 190/378

50 Mehrfachverzweigung mit switch: Beispiel /2... switch(auswahl) { case 1: durchmesser = 2*radius; cout << Durchmesser ist: << durchmesser << endl; break; case 2: umfang = 2*radius*PI; cout << Umfang ist: << umfang << endl; break; case 3: flaeche = radius*radius*pi; cout << Fläche ist: << flaeche << endl; break; default: cout << Keine Berechnung durchgeführt. << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 191/378

51 Mehrfachverzweigung mit switch: Beispiel /3 Vorsicht bei fehlenden break-steueranweisungen: switch(auswahl) { case 1: cout << Durchmesser ist: << 2*radius; << endl; case 2: cout << Umfang ist: << 2*radius*PI << endl; case 3: cout << Fläche ist: << radius*radius*pi << endl; Radius des Kreises = 23 1) Berechnung des Durchmessers 2) Berechnung des Umfangs 3) Berechnung der Fläche Auswahl: 1 Durchmesser ist: Umfang ist: Fläche ist: Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 192/378

52 Programmschleifen Auch Iteration oder Zyklen: Wiederholung von Programmteilen (Blöcken oder einzelnen Befehlen) entsprechend bestimmten Bedingungen for-schleife: Zählschleife zum Durchlaufen von Wertebereichen für eine Variable while-schleife: kopfgesteuerte Schleife mit beliebiger Bedingung für Wiederholung, die vor dem Porgrammteil ausgwertet wird do-while-schleife: fußgesteuerte Schleife mit beliebiger Bedingung für Wiederholung, die am Ende des Porgrammteils ausgwertet wird Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 193/378

53 for-schleife Zählschleife for ([<Initialisierung>];[<Bedingung>];[<Schrittanweisung>]) <Befehl oder Programmblock> Initialisierung: Deklaration (oder kommaseparierte Folge von Deklarationen) und Defintion der Laufvariable(n), die einmalig vor Beginn der Iteration ausgeführt wird Bedingung: logischer Ausdruck, der am Anfang jeden Iterationsschritts erfüllt sein muss Schrittanweisung: Modifikation der Laufvariablen am Ende jeden Iterationsschrittes, bei mehreren auch kommaseparierte Liste von Modifikationen Alle drei Teile sind optional Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 194/378

54 for-schleife: PAP Initialisierung Bedingung ja nein Anweisungen Schrittanweisung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 195/378

55 for-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int max; cout << Maximalwert = ; cin >> max; int sum = 0; for (int i=1; i <= max; i++) { sum = sum + i; cout << Summe der natürlichen Zahlen bis << i << : << sum << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 196/378

56 for-schleife: Beispiel (C) #include <stdio.h> int main() { int max; printf( Maximalwert = ); scanf( %i, &max); int sum = 0; for (int i=1; i <= max; i++) { sum = sum + i; printf( Summe der natürlichen Zahlen bis %i : %i \n, i, sum); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 197/378

57 for-schleife: Beispiele möglicher Schleifenköpfe Weitere Beispiele for (int i=1; i <= 10; i++)... // for (int i=10; i > 0; i )... // for (int i=1; i <= 256; i*=2)... // for (int i=1, int j=10; i < j; i++,j )... // (1,10) (2,9)... (5,6) for (;;)... // Endlosschleife for (;!gefunden;)... // entspricht while(!gefunden)... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 198/378

58 while-schleife Kopfgesteuerte Schleife while (<Bedingung>) <Befehl oder Programmblock> Bedingung wird jeweils vor Ausführung des folgenden Befehls/Programmblocks ausgewertet Abweisende Schleife: wird die Bedingung vor der ersten Ausführung nicht erfüllt, wird der Schleifentext gar nicht ausgeführt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 199/378

59 while-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int min,max; int sum = 0; cout << Kleinere Zahl = ; cin >> min; cout << Größere Zahl = ; cin >> max; cout << Summe aller Zahlen von << min << bis << max << ist ; while(min <= max) { sum = sum + min; min++; cout << sum <<. << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 200/378

60 while-schleife: Beispiel (C) #include <stdio.h> int main() { int min,max; int sum = 0; printf( Kleinere Zahl = ); scanf( %i, &min); printf( Größere Zahl = ); scanf( %i, &max); printf( Summe aller Zahlen von %i bis %i ist, min,max); while(min <= max) { sum = sum + min; min++; printf( %i. \n, sum); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 201/378

61 while-schleife: PAP Bedingung ja nein Anweisungen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 202/378

62 while-schleife: Struktogramm solange Bedingung wahr Anweisunge(n) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 203/378

63 do-while-schleife Fußgesteuerte Schleife do <Befehl oder Programmblock> while (<Bedingung>); Bedingung wird jeweils nach Ausführung des Schleifenteils überprüft Nicht-abweisende Schleife: der Schleifentext wird mindestens immer einmal ausgeführt, bevor die Bedingung am Ende überprüft wird Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 204/378

64 do-while-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int summand; int sum = 0; do { cout << Aktuelle Zwischensumme : << sum << endl; cout << Nächster Summand (0 für Abbruch) = ; cin >> summand; sum = sum + summand; while (summand!= 0); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 205/378

65 do-while-schleife: Beispiel (C) #include <stdio.h> int main() { int summand; int sum = 0; do { printf( Aktuelle Zwischensumme : %i \n, sum); printf( Nächster Summand (0 für Abbruch) = ); scanf( %i, &summand); sum = sum + summand; while (summand!= 0); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 206/378

66 do-while-schleife: PAP Anweisungen ja Bedingung nein Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 207/378

67 do-while-schleife: Struktogramm Anweisunge(n) solange Bedingung wahr Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 208/378

68 Schachtelung von Schleifen Schleifen gleicher oder unterschiedlicher Art können beliebig geschachtelt werden #include <iostream> using namespace std; int main() { int hoehe; cout << Höhe des Weihnachtsbaums = ; cin >> hoehe; for (int i=hoehe; i > 0; i-) { for (int j=i/2+1;j>0;j-) cout << ; for (int j=hoehe-i+1;j>0;j-) cout << * ; cout << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 209/378

69 Steueranweisung in Schleifen Spezielle Steueranweisung zur Kontrolle des Schleifenablaufs break: Abbruch der Schleifenausführung, Programm wird nach dem Schleifentext fortgesetzt (entsprechend schon bei Mehrfachverzweigung mit switch verwendet) continue: Abbruch des aktuellen Schleifendurchlaufs, d.h. Code bis zum Ende des Schleifenblocks wird ignoriert, und mit dem nächsten Iterationsschritt (Anfang der Schleife) fortgesetzt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 210/378

70 Schleifen mit break: Beispiel (C++) #include <iostream> #include <cstdlib> #include <ctime> #define MIN 1 #define MAX 100 #define MAX_VERSUCHE 20 using namespace std; int main() { srand(time(null)); int gesucht = MIN+rand()%(MAX-MIN+1); cout << Zahlenraten zwischen << MIN << und << MAX << endl; cout << Gesuchte Zahl = << gesucht << endl; int versuch = 0;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 211/378

71 Schleifen mit break: Beispiel (C++) /2... while(versuch < MAX_VERSUCHE) { versuch++; int test = MIN+rand()%(MAX-MIN+1); cout << Versuch << versuch << : << test << endl; if (test == gesucht) { cout << Gefunden! << endl ; break; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 212/378

72 Schleifen mit break: Beispiel (C) #include <stdio.h> #include <stdlib.h> #include <time.h> #define MIN 1 #define MAX 100 #define MAX_VERSUCHE 20 int main() { srand(time(null)); // Initialisierung Zufallszahlen int gesucht = MIN+rand()%(MAX-MIN+1); printf( Zahlenraten zwischen %i und %i \n,min,max); printf( Gesuchte Zahl = %i \n,gesucht); int versuch = 0;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 213/378

73 Schleifen mit break: Beispiel (C) /2... while(versuch < MAX_VERSUCHE) { versuch++; int test = MIN+rand()%(MAX-MIN+1); printf( Versuch %i : %i \n, versuch,test); if (test == gesucht) { printf( Gefunden! \n ); break; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 214/378

74 Schleifen mit continue: Beispiel (C++) #include <iostream> #include <cstdlib> #include <ctime> #define MIN 1 #define MAX 10 using namespace std; int main() { srand(time(null)); int gesucht = MIN+rand()%(MAX-MIN+1); cout << Zahlenraten zwischen << MIN << und << MAX «endl; int test;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 215/378

75 Schleifen mit continue: Beispiel (C++) /2... bool gefunden=false; while(!gefunden) { cout << Geratene Zahl = ; cin >> test; if (test < MIN test > MAX) { cout << Zahl ist außerhalb des Bereichs! << endl; continue; if (test == gesucht) break; cout << Leider falsch geraten. << endl; cout << Gefunden! << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 216/378

76 Schleifen mit continue: Beispiel (C) #include <stdio.h> #include <stdlib.h> #include <time.h> #define MIN 1 #define MAX 10 int main() { srand(time(null)); int gesucht = MIN+rand()%(MAX-MIN+1); printf( Zahlenraten zwischen %i und %i \n,min,max); int test;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 217/378

77 Schleifen mit continue: Beispiel (C) /2... bool gefunden=false; while(!gefunden) { printf( Geratene Zahl = ); scanf( %i,&test); if (test < MIN test > MAX) { printf( Zahl ist außerhalb des Bereichs! \n ); continue; if (test == gesucht) break; printf( Leider falsch geraten. \n ); printf( Gefunden! \n ); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 218/378

78 Ausnamebehandlung in C++ In C++ (nicht in C) spezieller Mechanismus zur Ausnahmehandlung (Exception Handling) über Steueranweisungen try { <Befehlssequenz> catch (<Ausnahmedeklaration>) { <Fehlerbehandlung> Wird im try-block direkt oder indirekt, d.h. in einer aufgerufenen Funktion, eine Ausnahme signalisiert, wird die Programmausführung automatisch unterbrochen Passt die Ausnahme zur Aussnahmedeklaration der catch-anweisung, wird zur Fehlerbehandlung der Code im catch-block ausgeführt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 219/378

79 Ausnamebehandlung in C++ /2 Erfordert explizites Signalisieren ( werfen throw) der Ausnahme als Ausdruck typisierter Wert throw <Ausdruck>; Im einfachsten Fall literaler Wert throw 42; Ausnahme kann z.b. im Code einer Bibliothek geworfen werden, deren Quelltext bei Verwendung der Funktionalität nicht vorliegt trotzdem Behandlung des Problems möglich, ohne dass das Programm beendet werden muss Besondere Bedeutung in C++ : Ausnahmen als Objekte von speziellen Exception-Klassen signalisert Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 220/378

80 try-catch Ausnahmebehandlung: Beispiel #include <iostream> using namespace std; float kehrwert(float zahl) { if (zahl == 0) throw (char*) Division durch null! ; return 1/zahl;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 221/378

81 try-catch Ausnahmebehandlung: Beispiel /2... int main() { try { float x; cout << x = ; cin >> x; float y = kehrwert(x); cout << Kehrwert ist << y << endl; catch (char* ausnahme) { cout << Fehler aufgetreten: << endl; cout << ausnahme << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 222/378

82 try-catch Ausnahmebehandlung: Beispiel /2 Ausnahmen verschiedenen Typs können durch Sequenz verschiedener catch-blöcke abgefangen werden catch (...) fängt beliebige Fehler ab try {... catch (char* ausnahme) { cout << Fehler aufgetreten: << endl; cout << ausnahme << endl; catch (int i) { cout << Fehler aufgetreten, Nr: << i << endl; catch (...) { cout << Sontiger Fehler. << endl; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 223/378

83 Zusammenfassung: Steueranweisung Bedingte Ausführung if: einfache bedingte Ausführung if-else: mit Alternative Schachtelung und Sequenz von Verzweigungen switch-case: Sprungtabelle für Mehrfachverzweigung Schleifen for: Zählschleife while: kopfgesteuerte Schleife do-while: fußgesteuerte Schleife Steuerung mit break und continue Ausnahmebehandlung try und catch: Behandeln ( Fangen ) von Ausnahmen throw: Signalisieren ( Werfen ) von Ausnahmen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 224/378

84 Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt Dekomposition komplexer Probleme Im Folgenden: Definition von Funktionen Deklaration vs. Definition Parameterübergabe Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Rekursion Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 225/378

85 Funktionen: Definition Syntax zur Definition einer Methode [<Speicherklasse>] <Typ> <Funktionsname>(<Parameterliste>) { <Anweisungen> Wichtigste Speicherklassen static: Funktion kann nur innerhalb dieser Quelldatei benutzt werden extern (Default): Funktion kann aus anderen Quelldateien benutzt werden, speziell extern C und extern C++ für Benutzung aus C- bzw. C++-Programmen inline: Quelltext der Funktion kann als Optimierung an aufrufender Stelle direkt eingesetzt werden, Empfehlung für den Compiler Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 226/378

86 Funktionen: Rückgabetyp Funktionen haben einzelnen typisierten Rückgabewert, da Funktionsaufrufe dadurch einfach Ausdrücke sind Bisher: Rückgabewerte von einfachen Basisdatentypen Alternativen zur Modifikation von mehreren Variablen bzw. komplexerer Ergebnisdaten Pass by Reference (Veränderung der Parametervariablen ) Ergebnis als Feld oder selbstdefinierter komplexer Typ (z.b. struct ) Zeiger auf Feld oder komplexen Datentyp ( ) oder class ) Wenn kein sinnvoller Rückgabewert existieren kann, spezieller Typ void, zum Beispiel void ausgabe(char* text) { printf( %s, text); wobei entsprechende Methoden kein return benötigen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 227/378

87 Funktionen: Deklaration Deklaration einer Funktion entspricht deren Bekanntmachung, d.h. Funktion existiert, Implementierung ist aber an einer anderen Stelle [<Speicherklasse>] <Typ> <Funktionsname>(<Parameterliste>); Auch Signatur bzw. Prototyp der Funktion Erlaubt Verwendung der Funktion im Quelltext, auch wenn noch keine Implementierung angegeben wurde Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 228/378

88 Funktionen: Deklaration /2 Gebräuchliche Anwendungen Vorab-Deklaration einer Funktion, die schon im Quelltext benutzt wird, deren Implementierung aber erst an späterer Stelle folgt (zwingend erforderlich z.b. wenn Funktionen sich gegenseitig aufrufen, aber in einer bestimmten Reihenfolge im Quelltext definiert werden müssen) Deklaration von Methoden in Header-Dateien, deren Implementierung aus anderen Quelldateien erst später vom Linker hinzugefügt wird Deklaration von Methoden (Klassenfunktionen) in einer Klassendefinition (in der Regel auch in Header-Dateien) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 229/378

89 Vorab-Deklaration: Beispiel (C++) /1 #include <iostream> using namespace std; void ungerade(int z); void gerade(int z) { if (z%2==0) cout << Zahl ist gerade. << endl; else ungerade(z); void ungerade(int z) { if (z%2!=0) cout << Zahl ist ungerade. << endl; else gerade(z);... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 230/378

90 Vorab-Deklaration: Beispiel (C++) /2... int main() { int x; cout << x = ; cin >> x; gerade(x); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 231/378

91 Vorab-Deklaration: Beispiel (C) /1 Vorab-Deklaration notwendig, damit Programm übersetzbar: #include <stdio.h> void ungerade(int z); void gerade(int z) { if (z%2==0) printf( Zahl ist gerade. \n ); else ungerade(z); void ungerade(int z) { if (z%2!=0) printf( Zahl ist ungerade. \n ); else gerade(z);... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 232/378

92 Vorab-Deklaration: Beispiel (C) /2... int main() { int x; printf( x = ); scanf( %i,&x); gerade(x); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 233/378

93 Funktionen: Übergabe von Parametern Bisher: Parameter können an eine Funktion als literale Werte oder Werte einer Variable übergeben werden float add(float a, float b) { return a+b;... float x,y,z;... x = add(32.3,9.7); // literale Werte x = add(y,z); // Variablenwerte Werte werden dazu in die Speicherbereiche der lokalen Variablen der Funktion kopiert 1. Aufruf: a erhält Wert 32.3, b erhält Wert Aufruf: a erhält Wert von y, b erhält Wert von z Werte von y und z bleiben unverändert Pass by Value (auch Call by Value) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 234/378

94 Funktionen: Pass by Value oder by Reference Pass by Value: Übergabe der Parameter durch Kopieren der Werte, wodurch eine Modifikation der ursprünglichen Variablen ausgeschlossen wird Pass by Reference: Übergabe einer Referenz auf die Ursprungsvariable, wodurch deren Wert in der Funktion manipuliert werden kann C und C++ bieten unterschiedliche Möglichkeiten zur Umsetzung von Pass by Reference, welche in C++ beide verwendet werden können C und C++: Übergabe von referenzierter Variable als Zeiger auf Speicherbereich der Variable nur C++: Übergabe als spezielles Referenzparameter, d.h. lokale Parametervariable der Funktion ist anderer Name der Ursprungsvariablen vom Funktionsaufruf Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 235/378

95 Pass by Reference: C-style Basiert auf der Übergabe von Zeigerwerten statt eigentlichen Datenwerten Zeiger ( ) oder auch Pointer von einem bestimmten Typ entsprechen Speicheradresse an dem ein Wert von diesem Typ steht Entsprechende Deklaration der Methode mit Zeigerparametern, z.b. void tausche(int* x, int* y) {... Beim Aufruf mit normalen Variablen muss vorher die Adresse jeder Variable berechnet werden tausche(&a,&b); Technik bisher schon verwendet, z.b. bei scanf() aus stdio zum Einlesen von Werten für Variablen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 236/378

96 Einschub: Beispiel für Arbeit mit Zeigern int i = 13; i ist normale Variable mit Wert 13 an Adresse x int* p; p ist undefinierter (!) Zeiger (Pointer) auf int-wert p = &i; Referenzierung (Bildung eines Zeigers auf Adresse der dahinter stehenden Variable) mit &, p zeigt jetzt auf Adresse x *p = 7; Dereferenzierung mit *, Wert an Adresse x ist jetzt 7 *p==7 && i==7; Ist jetzt wahr... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 237/378

97 Pass by Reference: C-Style Beispiel (C++)... void tausche(int* x, int* y) { int hilfe = *x; *x = *y; *y = hilfe; int main() { int a=4; int b=7; cout << Vorher: a= << a << b= << b << endl; tausche(&a,&b); cout << Nachher: a= << a << b= << b << endl; return 0; Vorher: a=4 b=7 Nachher: a=7 b=4 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 238/378

98 Pass by Reference: C-Style Beispiel (C) #include <stdio.h> void tausche(int* x, int* y) { int hilfe = *x; *x = *y; *y = hilfe; int main() { int a=4; int b=7; printf( Vorher: a=%i b=%i \n,a,b); tausche(&a,&b); printf( Nachher: a=%i b=%i \n,a,b); return 0; Vorher: a=4 b=7 Nachher: a=7 b=4 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 239/378

99 Pass by Reference: C++-style C++ führt Konzept der Referenzvariablen und Referenzparameter durch speziellen Syntax bei der Deklaration mit & ein: entsprechend deklarierte Variablen sind anderer Name für eine zuvor definierte Variable Entsprechende Deklaration der Methode mit Referenzparametern, z.b. void tausche(int& x, int& y) {... Erlaubt einfache Übergabe von Variablen ohne weitere Transformation tausche(a,b); Kritik an C++-Lösung: beim Aufruf einer Funktion ist im Quelltext an dieser Stelle nicht mehr ersichtlich, ob die übergebenen Variablen verändert werden könnten erfordert Kenntnis über Funktionsdefinition/-deklaration Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 240/378

100 Pass by Reference: Beispiel (C++) #include <iostream> using namespace std; void tausche(int& x, int& y) { int hilfe = x; x = y; y = hilfe; int main() { int a=4; int b=7; cout << Vorher: a= << a << b= << b << endl; tausche(a,b); cout << Nachher: a= << a << b= << b << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 241/378

101 Funktionen: mehr zu Parametern Defaultwerte für Parameter können bei Funktionsdefinition angegeben werden Parameter kann beim Aufruf weggelassen werden char* zahl_als_string(int zahl, basis b=10) {... Overloading (Überladen) erlaubt Funktionen mit gleichem Namen aber unterschiedlichen Parametern (passende Implementierung wird vom Compiler nach Typ der Parameter beim Aufruf ausgewählt) char* zahl_als_string(int zahl) {... char* zahl_als_string(float zahl) {... Variable Parameterzahl in einer Funktionsdefinition durch... umsetzbar (erfordert aber spezielle Behandlung der Liste von Parametern mit beliebigen Datentypen), verwendet z.b. bei printf(char* format,...); Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 242/378

102 Funktionen: Rekursion Definition (Rekursion) Rekursion (vom lateinischen recurrere: zurückführen, zurücklaufen) bezeichnet die Technik, eine Funktion durch sich selbst zu definieren. In der Programmierung: Funktionen können direkt oder indirekt (über eine weitere Funktion) sich selbst aufrufen Konzept entliehen aus der funktionalen Programmierung, im Gegensatz zu imperativer Programmierung als nur Folge von Befehlen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 243/378

103 Funktionen: Rekursion Anwendbar für viele Aufgaben: Berechnungsmöglichkeiten äquivalent zu Schleifen Rekursion kann Schleifen immer ersetzen bzw. von diesen ersetzt werden Vorteile: Oft einfache, elegante Lösungen möglich Praktisch zum Beispiel bei komplexeren Datenstrukturen (z.b. wenn diese rekursiv definiert sind: Hierarchien, Bäume), Optimierung, etc. Nachteile: Funktionsaufrufe verursachen erhöhten Aufwand bei der Programmausführung Performance Führt mitunter zu komplexeren Programmstrukturen, die schwerer verständlich bzw. deren Korrektheit schwerer verifizierbar ist Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 244/378

104 Rekursion: Beispiel Fakultätsberechnung Mathematische Funktion für natürlich Zahlen n n! = n = n i Kann so als Schleife (Zählschleife mit Produktbildung) umgesetzt werden Aber auch rekursive Definition möglich: { 1 n = 0 n! = n (n 1)! n > 0 Umsetzbar als rekursive Funktion i=1 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 245/378

105 Rekursion: Beispiel (C++) #include <iostream> using namespace std; int fakultaet(int i) { if (i<=1) return 1; else return i*fakultaet(i-1); int main() { int x,f; cout << x = ; cin >> x; f = fakultaet(x); cout << x! = << f << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 246/378

106 Rekursion: Beispiel (C) #include <stdio.h> int fakultaet(int i) { if (i<=1) return 1; else return i*fakultaet(i-1); int main() { int x,f; printf( x = ); scanf( %i,&x); f = fakultaet(x); printf( x! = %i \n,f); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 247/378

107 Rekursion: Beispiel - Ablauf Ergebnis: 4*6=24 Aufruf fakultaet( 4) Ergebnis: 3*2=6 Aufruf fakultaet( 3) Aufruf Ergebnis: 2*1=2 fakultaet( 2) Ergebnis: 1 Aufruf fakultaet( 1) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 248/378

108 Zusammenfassung: Funktionen Funktionen als wiederverwendbare, zusammenhängende Folge von Anweisungen zur Strukturierung des Quelltextes Definition einer Funktion mit Speicherklasse, Rückgabetyp, Name, Parameter und deren Typen sowie eigentlicher Implementierung als Programmblock Deklaration einer Funktion als Bekanntmachung der Schnittstelle erlaubt Benutzung im Quelltext, ohne dass Implementierung bis dahin gegeben Parameterübergabe als kopierte Werte (Pass by Value) oder modifizierbare Variablen (Pass by Reference) Rekursion als spezielles Programmierparadigma für Funktionen erlaubt direkten oder indirekten Aufruf der Methode durch sich selbst Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 249/378

109 Mehr zu Datentypen: Felder, Zeiger und Strukturen Arbeiten allein mit einzelnen Variablen jeweils eines Basisdatentyps wird für komplexere Aufgaben schnell unpraktisch Verminderte Verständlichkeit und erhöhter Umfang des Codes Deshalb Zusammenfassung nach ihrer Bedeutung zusammenhängender Daten möglich: Felder (Arrays): Zusammenfassung von Variablen des gleichen Typs in einer Sequenz mit Zugriff über deren Position Strukturen (Structures, kurz Structs): Zusammenfassung von Variablen unterschiedlichen Typs mit Zugriff über separate Namen Außerdem flexibles Arbeiten mit Daten im Hauptspeicher über Zeiger (Pointer): typisierte Zeiger verweisen auf beliebige Eike Schallehn, FIN/ITI Stellen im Speicher Grundlagen und erlauben der Informatik für Ingenieure so Arbeit mit 250/378

110 Felder (Arrays) Zusammenfassung von Variablen des gleichen Typs in einer ein- oder mehrdimensionalen Anordnung fester Größe Anwendungsbeispiele: Folge von Messwerten Spalte einer Tabelle Koeffizienten einer Gleichung/Funktion Vektoren (eindimensionale Felder) Matrizen (zweidimensionale Felder)... Im Folgenden: Eindimensionale Felder Mehrdimensionale Felder Zeichenketten als Felder von char Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 251/378

111 Eindimensionale Felder: Aufbau und Zugriff float f[7]; f[0] f[1] f[2] f[3] f[4] f[5] f[6] Syntax für Deklaration: datentyp feldname[elementanzahl]; Bei einer Feldgröße von n sind die Feldelemente über ihren Index (Position) von 0 bis n 1 in eckigen Klammern wie eine normale Variable zugreifbar f[0]=42; f[6]=f[0]+24; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 252/378

112 Eindimensionale Felder: Beispiel (C++) #include <iostream> using namespace std; int main() { float messwert[5]; for (int i=0; i < 5; i++) { cout << Messwert[ << i << ] = ; cin >> messwert[i]; float sum = 0; cout << Die Messwerte sind: ; for (int i=0; i < 5; i++) { cout << messwert[i] << ; sum = sum + messwert[i]; cout << endl << Der Mittelwert ist: << sum/5 << endl; return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 253/378

113 Eindimensionale Felder: Beispiel (C) #include <stdio.h> int main() { float messwert[5]; for (int i=0; i < 5; i++) { printf( Messwert[%i] =,i); scanf( %f, &messwert[i]); float sum = 0; printf( Die Messwerte sind: ); for (int i=0; i < 5; i++) { printf( %g,, messwert[i]); sum = sum + messwert[i]; printf( \nder Mittelwert ist: %g \n, sum/5); return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 254/378

Einfache Bedingte Ausführung

Einfache Bedingte Ausführung Kontrollstrukturen Bisher Programme mit Funktionen als einfache Folge von Befehlen Ablauf von Programmen darüber hinaus steuerbar über Bedingte Ausführung: Ausführung von Programmteilen (Befehlen oder

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 32

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 32 Steueranweisungen Bisher Programme mit Funktionen als einfache Folge von Befehlen Ablauf von Programmen darüber hinaus steuerbar über Bedingte Ausführung: Ausführung von Programmteilen (Befehlen oder Programmblöcken)

Mehr

Teil IV. Grundlagen der Programmierung

Teil IV. Grundlagen der Programmierung Teil IV Grundlagen der Programmierung Überblick 1 Einleitung zu C und C++ Aufbau von Programmen/Dateien Steueranweisungen Funktionen Mehr zu Datentypen: Felder, Zeiger und Strukturen Arbeit mit Dateien

Mehr

Aufbau von Programmen/Dateien

Aufbau von Programmen/Dateien 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

Mehr

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden Funktionen in Matlab Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Einführung in C. Computer Systeme Wintersemester

Einführung in C. Computer Systeme Wintersemester Einführung in C Computer Systeme Wintersemester 2018-2019 Einführung Warum C im Rahmen dieser Vorlesung? Relevante Betriebssysteme (Unix, GNU/Linux) sowie Systemtools (z. B. GNU Core Utilities) sind in

Mehr

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe Informatik Vorlesung 03b Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe 12. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15 Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case

Mehr

4.2 Programmiersprache C

4.2 Programmiersprache C 4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

Java Anweisungen und Ablaufsteuerung

Java Anweisungen und Ablaufsteuerung Informatik 1 für Nebenfachstudierende Grundmodul Java Anweisungen und Ablaufsteuerung Kai-Steffen Hielscher Folienversion: 24. Januar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht

Mehr

Grundlagen der Informatik für Ingenieure

Grundlagen der Informatik für Ingenieure Grundlagen der Informatik für Ingenieure Dr.-Ing. Eike Schallehn OvG Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme 2017/2018 Eike Schallehn,

Mehr

Grundlagen der Informatik für Ingenieure

Grundlagen der Informatik für Ingenieure Grundlagen der Informatik für Ingenieure Dr.-Ing. Eike Schallehn OvG Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme 2016/2017 Eike Schallehn,

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr

Grundlagen der Informatik für Ingenieure

Grundlagen der Informatik für Ingenieure Grundlagen der Informatik für Ingenieure Dr.-Ing. Eike Schallehn OvG Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme 2017/2018 Eike Schallehn,

Mehr

Grundlagen der Informatik für Ingenieure

Grundlagen der Informatik für Ingenieure Grundlagen der Informatik für Ingenieure Dr.-Ing. Eike Schallehn OvG Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme 2018/2019 Eike Schallehn,

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1 Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing. Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP I. Aufbau eines Java-Programmes JAVA 1 Escape-Sequenzen zur

Mehr

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A 2.4.6. Kontrollstrukturen if-anweisung: Bedingte Ausführung (Verzweigung) 2 Varianten: if (Bedingung) Anweisung (Anweisung = einzelne Anweisung oder Block) Bedeutung: die Anweisung wird nur ausgeführt,

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Programmieren I. Kapitel 5. Kontrollfluss

Programmieren I. Kapitel 5. Kontrollfluss Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,

Mehr

Teil II. Literatur zur C-Programmierung:

Teil II. Literatur zur C-Programmierung: Teil II 2Kurzeinführung in die Programmiersprache C Literatur zur C-Programmierung: Darnell, Margolis. C: A Software Engineering Approach. Springer 1991 Kernighan, Ritchie. The C Programming Language.

Mehr

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010 Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den

Mehr

Funktionales C++ zum Ersten

Funktionales C++ zum Ersten Funktionales C++ zum Ersten WiMa-Praktikum 1, Teil C++, Tag 1 Christoph Ott, Büro: Helmholtzstr.18, E22 Tel.: 50-23575, Mail: christoph.ott@uni-ulm.de Institut für Angewandte Informationsverarbeitung 26.08.08

Mehr

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff. Gedächtnis Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet Hauptspeicher 38265 Telefon CPU Gedächtnis Vorlesender Zugriff Verarbeitungseinheit

Mehr

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Herzlich willkommen!

Herzlich willkommen! Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 6: Zusammenfassung und Beispiele Mail: wemheuer@ewla.de Online: http://cpp.ewla.de/ Zusammenfassung (1) 2 1. Programm in

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 1 - Variablen und Kontrollstrukturen main Methode Startpunkt jeder Java Anwendung String[] args ist ein Array aus Parametern, die beim Aufruf über die Kommandozeile

Mehr

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 6 Pkt.) a) Erklären

Mehr

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 4 Pkt.) Gegeben

Mehr

Grundlagen der Informatik 2. Typen

Grundlagen der Informatik 2. Typen Grundlagen der Informatik 2. Typen Speicher, Speicherbedarf Ein-/Ausgabe Grundlagen der Informatik (Alex Rempel) 1 Wiederholung // root calculation #include #include using namespace

Mehr

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue Java - Schleifen Bedingung wiederhole ja Anweisung Anweisung Anweisung Leibniz Universität IT Services Anja Aue Anweisung int zahl; zahl = 2; zahl = zahl * 10; int zahl; ; Jede Anweisung endet mit einem

Mehr

Kontrollstrukturen (1)

Kontrollstrukturen (1) Kontrollstrukturen (1) Selektionen, if ermöglicht das alternative Ausführen von Programteilen in Abhängigkeit einer Bedingung if (Bedingung) Block 1 else Block 2 Ist die Bedingung wahr, also ungleich 0,

Mehr

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

Informatik. Wiederholung Felder (Arrays), string. Vorlesung

Informatik. Wiederholung Felder (Arrays), string. Vorlesung Informatik Vorlesung 04 Wiederholung Felder (Arrays), string 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Ein C++ Programm: Wiederholung #include

Mehr

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme Schwerpunkte Vollständige und unvollständige Auswertung 8. Ausdrücke, Operatoren (einfache Typen) Teil 1 Seiteneffekte Overloading: Überladung von Operatoren Implizite und explizite (cast) Typumwandlung

Mehr

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems 4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um

Mehr

C für Java- Programmierer

C für Java- Programmierer Carsten Vogt C für Java- Programmierer mit 59 Bildern, 36 Tabellen und 35 Aufgaben HANSER Inhalt 1 Einführung 13 Schnelleinstieg 14 1.1 C und Java von den Anfängen bis heute 15 1.1.1 Die Entwicklung von

Mehr

C für Java-Programmierer

C für Java-Programmierer Carsten Vogt C für Java-Programmierer ISBN-10: 3-446-40797-9 ISBN-13: 978-3-446-40797-8 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-40797-8 sowie im

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick 2 Verbundanweisung 3 Bedingte Anweisung 4 Auswahlanweisung

Mehr

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems 4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um

Mehr

3. Anweisungen und Kontrollstrukturen

3. Anweisungen und Kontrollstrukturen 3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen

Mehr

5. Elementare Befehle und Struktogramme

5. Elementare Befehle und Struktogramme 5. Elementare Befehle und Struktogramme Programmablauf Beschreibung des Programmablaufs mittel grafischer Symbole Beispiel : Flussdiagramme ja nein Besser : Struktogramme Dr. Norbert Spangler / Grundlagen

Mehr

Kapitel 2: Grundelemente der Programmierung

Kapitel 2: Grundelemente der Programmierung Kapitel 2: Grundelemente der Programmierung Variablen Variablen sind Speicherbereiche im Arbeitsspeicher Anhand eines Namens kann man Werte hineinschreiben und auch wieder auslesen Variablen besitzen ein

Mehr

3 Grundstrukturen eines C++ Programms anhand eines Beispiels

3 Grundstrukturen eines C++ Programms anhand eines Beispiels 3 Grundstrukturen eines C++ Programms anhand eines Beispiels 3.1 Einige Grundbegriffe Mit Hilfe eines Programmes wird dem Computer mitgeteilt, wie er eine bestimmte Aufgabe bearbeiten soll. Es besteht

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen Gehe nach links oder rechts Gehe solange geradeaus... Leibniz Universität IT Services Anja Aue Programmabläufe grafisch abbilden

Mehr

Grundlagen der Informatik für Ingenieure

Grundlagen der Informatik für Ingenieure Grundlagen der Informatik für Ingenieure Dr.-Ing. Eike Schallehn OvG Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme 2015/2016 Eike Schallehn,

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Textausgabe per printf Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek. printf

Mehr

Kontrollstrukturen -- Schleifen und Wiederholungen

Kontrollstrukturen -- Schleifen und Wiederholungen Kontrollstrukturen -- Schleifen und Wiederholungen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

Praxis der Programmierung

Praxis der Programmierung Arrays, Pointer, Parameterbergabe Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vectoren) 2 Arrays: Motivation Gegeben:

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

Inhaltsverzeichnis. Inhalt. Bemerkung... 9 Vorwort Programme und Programmiersprachen

Inhaltsverzeichnis. Inhalt. Bemerkung... 9 Vorwort Programme und Programmiersprachen Inhalt 3 Bemerkung... 9 Vorwort... 10 1 Programme und Programmiersprachen 1.1 Assembler... 13 1.2 Höhere Programmiersprachen... 15 1.2.1 Interpreter... 16 1.2.2 Compiler... 17 1.2.3 Zwischencode... 18

Mehr

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen Funktionen Funktionen erlauben, dem Programmcode hierarchisch zu strukturieren ein Hauptprogramm steuert dabei die Abfolge von Schritten, die einzelnen Schritte können durch Funktionen realisiert werden

Mehr

2 Programmieren in Java I noch ohne Nachbearbeitung

2 Programmieren in Java I noch ohne Nachbearbeitung 1 2 Programmieren in Java I noch ohne Nachbearbeitung 2.1 Was sind Programme? Eingabe = Verarbeitung = Ausgabe Die Eingabe kann sein Konstanten im Quelltext; Kommandozeilenparameter oder interaktive Eingabe

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) Informatik I (D-ITET) Übungsstunde 2, 5.10.2009 ETH Zürich? Übungsgruppenwechsel? Abgabe der Übungen... Bis Mo, 24:00 Theorie: Programme: per mail oder auf Papier.cpp Datei per mail Bin euch noch Demos

Mehr

Pseudo-Programmiersprache

Pseudo-Programmiersprache 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

Mehr

2 Teil 2: Nassi-Schneiderman

2 Teil 2: Nassi-Schneiderman 2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung Übersicht Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung Einführung in die Programmierung 5. Grundlagen der funktionalen & imperativen Programmierung 1 Übersicht 5.1 Sorten und Abstrakte

Mehr

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen . Gleitkommazahlen In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen Umrechnen von Einheiten und Währungen Jede Zahl x Q mit x 0 lässt sich folgendermaßen schreiben: x = s m e mit

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable 1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem

Mehr

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke Java 3 Markus Reschke 08.10.2014 Kommentare Kommentare nützlich zum späteren Verständnis Zwei Arten Einzeiliger Kommentar bis zum Zeilenende mit // Mehrzeiliger Kommentar mit /*Text*/ 1 double x = 5; //

Mehr

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C Einfache Programmstrukturen in C 4-1 Welche einfache Programmstrukturen sind zu unterscheiden? Arithmetische und logische Ausdrücke und Zuweisungen Verzweigungen Unvollständige bedingte Anweisungen Vollständige

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

Vorlesungsprüfung Programmiersprache 1

Vorlesungsprüfung Programmiersprache 1 Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,

Mehr

Praxis der Programmierung

Praxis der Programmierung Funktionen, Header-Dateien, Pointer Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn 1 Organisatorische Bemerkungen 2 Modul Programmierung Pflichtmodul für BSc INF

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung

Mehr

Vorlesung Objektorientierte Programmierung Klausur

Vorlesung Objektorientierte Programmierung Klausur Prof. Dr. Stefan Brass 16. Februar 2007 Dipl.-Inform. Annett Thüring Institut für Informatik MLU Halle-Wittenberg Vorlesung Objektorientierte Programmierung Klausur Name: Matrikelnummer: Studiengang: Aufgabe

Mehr

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy PROCESSING EINE ZUSAMMENFASSUNG Created by Michael Kirsch & Beat Rossmy INHALT 1. Typen und Operatoren 1. Datentypen 3. Klassen und Objekte 1. Klassen und Objekte 2. Operatoren 2. Konstruktor 3. Typkonversion

Mehr