Prof. Dr.-Ing. Franz-Josef Behr

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Ein- und Ausgabe von Dateien
Imperative Programmierung
der Universität Oldenburg
Java: Objektorientierte Programmierung
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Konstruktoren.
WHILE - Anweisung.
DO...WHILE Anweisung.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0);
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Klassen und Objekte
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
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.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
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.
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Dynamische Datentypen
2.4 Rekursion Klassifikation und Beispiele
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Programmieren in C Grundlagen C 2
Programmieren ... in C++ Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I.
Programmieren in C Grundlagen C 2
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Tutorium Software-Engineering SS14 Florian Manghofer.
Operatoren, Kontrollstrukturen und Funktionen. Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung!
Nksainf.ch/oinf.
Einführung in die Programmierung
Implementieren von Klassen
 Präsentation transkript:

Prof. Dr.-Ing. Franz-Josef Behr Programmieren Funktionen Prof. Dr.-Ing. Franz-Josef Behr

Gliederung Definition Funktionsdeklaration Funktionsaufruf, Parameterübergabe Formalparameter, Aktualparameter Verlassen von Funktionen inline-Funktionen Vorgabeargumente Lokale und statische Variablen Überladen von Funktionen Referenzen als Parameter Rekursion FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Funktionen – eine Definition “benutzerdefinierte Operationen” erlauben, eine Reihe von Anweisungen zu einer einzelnen zusammenzufassen. Aufbau: Ergebnistyp der Funktion Name Parameterliste in runden Klammern in geschweiften Klammern: Funktionsrumpf, beinhaltet die eigentlichen Anweisungen. Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Beispiel int ggt(int a, int b) // Funktionskopf { // Funktionsrumpf int rest; // lokale Variable, gilt nur in ggt do { rest = a % b; a = b; b = rest; } while (rest>0); return a; // Rueckgabe Ergebniswert } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Funktionsdeklaration Eine Funktionsdeklaration gibt den Namen der Funktion, den Typ des zurückgelieferten Funktionswerts sowie Anzahl und Typen der Parameter bekannt. Funktionsdeklarationen werden auch als Prototypen bezeichnet. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Funktionsaufruf, Parameterübergabe Wird eine Funktion definiert, so wird Code für diese Funktion erzeugt. Allerdings wird dieser Code nicht automatisch ausgeführt! Ausführung der Funktion: Name mit speziellem Funktionsaufrufoperator (). Dieser Operator wird nach dem Funktionsnamen notiert, in den runden Klammern werden ggf. die Parameter ("Argumente") angegeben: ch = intToChar(a); // ruft intToChar mit Parameter a auf FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Formalparameter, Aktualparameter Formale Parameter = Platzhalter, die beim Funktionsaufruf mit Werten gefüllt werden. Die Bezeichnung von formalen und aktuellen Parameter müssen nicht übereinstimmen, sie müssen jedoch typkompatibel sein! int ggt(int a, int b) // Formale Parameter a und b { ... } void main() { cout << ggt(x, y); // Aktualparameter x, y cout << ggt(f, 1); // Aktualparameter f, 1 cout << ggt((3*12+4), 18); // Aktualparameter 40, 18 } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Funktionsaufruf ohne Parameter Achtung: Der Funktionsname ohne Klammern stellt einen konstanten Zeiger auf die Anfangsadresse der Funktion dar und bewirkt keinen Aufruf! ==> Besitzt die aufgerufene Funktion keine Parameter, muss also eine leere Argumentliste angegeben werden. ok = clearScreen(); // Aufruf der Prozedur clearScreen // ohne Parameter ok = clearScreen; // Fehler, kein Funktionsaufruf! FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Verlassen von Funktionen für Funktionen des Typs void: return; für andere Typen (z.B. int): return 0; Hinweis: Oftmals wird der Rückgabewert in Klammern gesetzt; dies ist jedoch nicht nötig FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Der Argumentmodifizierer const Simulation eines “Read-only-Parameters” In der folgenden Funktionen ist es nicht möglich, den Parameter msg zu verändern: long quad_p1(const int i) { i = i + 1; // falsch return i*i; } Auch der Rückgabewert einer Funktion lässt sich mit const-Deklaration vereinbaren! FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

inline-Funktionen In C häufig eingesetzt: Makros, wie z. B. #define MAX(a,b) (((a)>(b)) ? (a) : (b)) Makros werden in C vom Präprozessor expandiert; keinerlei Typprüfungen, Expandierung liegt nicht in der Kontrolle des C++-Compilers. In C++: inline-Funktionen. Vorteil: Performance-Gewinn inline int max(int a, int b) { if (a >= b) return a; else return b; } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

inline-Funktionen II Inline-Funktionen sind Empfehlung an den Compiler. Geeignet für kurze Funktionen mit einfachen Operationen mit einem oder mehreren Parametern. Vorgehen: Funktionen erst konventionell implementieren und debuggen, dann erst Inline-Schlüsselwort einfügen. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Vorgabeargumente Aufbau der Parameterliste: Bei Aufruf: Zunächst Parameter ohne Vorgabewerte, dann ggf. Parameter mit Vorgabewerten. void message(const char* msg, const char* name = "Frank") Bei Aufruf: Aktualparameter für jeden Parameter ohne Vorgabewerte; für Parameter mit Vorgabewerten kann Aktualparameter entfallen; geschieht dies für einen Parameter, müssen nachfolgende ebenfalls entfallen. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Vorgabeargumente - Beispiel // C++ program that illustrates default arguments #include <iostream.h> void message(const char* msg, const char* name = "Keith") { cout << name << " says \"" << msg << '\"' << endl; } int main() message("Hi there!"); message("Hi yourself!", "Kevin"); return 0; Quelle: Craigh Arnush: Borland C++ in 21 Tagen. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Vorgabeargumente - Bedeutung Default-Argumente können unter anderem dann von Nutzen sein, wenn in eine bereits existierende Funktion weitere Argumente aufgenommen werden sollen, ohne die Syntax von bestehenden Funktionsaufrufen zu verändern. Dazu werden die neuen Argumente als Default-Parameter in die Funktionsdeklaration aufgenommen (die korrespondierende Funktionsdefinition muß dann angepaßt werden). Im Hinblick auf getrennte Übersetzung und die Erstellung größerer Programmsysteme (Zerlegung in Header- und Programmdateien): Default-Werte von Parametern immer in den entsprechenden Prototypen und nicht in den Funktionsdefinitionen angeführen! FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Lokale Variablen in Funktionen Jede Funktion kann ihre eigenen Datentypen, Konstanten und Variablen haben. Lokalen Variablen nur so lange existent, während die Funktion aufgerufen ist. Beendigung der Funktion: lokale Variablen werden eliminiert. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Statische Variablen I In manchen Fällen muss der Wert einer Variablen zwischen einzelnen Funktionsaufrufen erhalten bleiben: ==> “statische Variablen”, ==> Schlüsselwort static. Der Zugriff auf diese Variablen kann nur innerhalb dieser Funktion erfolgen. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Statische Variablen II // C++ program illustrates static local variables #include <iostream.h> double average(double x) { static double count = 0; static double sum = 0; ++count; sum += x; return sum / count; } int main() cout << "average = " << average(1) << endl; cout << "average = " << average(2) << endl; cout << "average = " << average(4) << endl; cout << "average = " << average(10) << endl; cout << "average = " << average(11) << endl; return 0; FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Überladen von Funktionen Unterschiedliche Funktionen können gleich heißen, sie müssen jedoch aufgrund der (übergebenen) Parameter unterscheidbar sein. #include <iostream.h> void gibAus(const char* string) { cout << " gibAus(\"" << string << "\")" << endl; } void gibAus(int i) cout << " gibAus (" << i << ")" << endl; int main(void) gibAus("string printing"); // calls gibAus(const char*) gibAus(5); // calls gibAus(int) return 0; Ergebnis: gibAus("string printing") gibAus(5) FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Überladen von Funktionen: Bedeutung Wir nutzen bereits überladene Operatoren: << und >> bei cout bzw. cin. Überladen von Funktionen und Operatoren wichtig für objektorientierte Programmierung: Konstruktoren Überladen von Operatoren wie =, <> … FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Signatur einer Funktion I Unterscheidung überladener Funktionen an Hand ihrer Signatur: Anzahl und Typen der Parameter. Beim Aufruf vergleicht der Compiler die Argumenttypen mit den verschiedenen Signaturen der Funktionen und ruft die passende Funktion auf. Implizite Typumwandlungen werden durchgeführt. int min (int x, int y) {...} double min (double x, double y) {...} double ergebnis, zahl = 5.5; ergebnis = min(zahl, 10.0); // double-Version! FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Signatur einer Funktion II Der Ergebnistyp der Funktion gehört nicht zur Signatur. int f1 (char* key) {...} char* f1 (char* name) {...} // unzulässig, da Signatur // identisch! FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Definition von Referenzen Referenz = Ersatzbezeichner für eine bereits deklarierte Variable. ==> Referenz steht für die Variable, die sie referenziert. Definition einer Referenz über das Zeichen&. Beispiel: double dfEasting = 3489800.31; double& rdfEasting = dfEasting; rdfEasting ist dann eine andere Bezeichnung für dfEasting und hat den Typ “Referenz auf double”. Zuweisungen an rdfEasting betreffen nun die Variable dfEasting: rdfEasting = rdfEasting - 1000; FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Referenzen als Parameter I Referenzen werden hauptsächlich als Funktionsparameter eingesetzt: ==> Syntaktisch deutlich einfachere Nutzung von “Call by Reference-Parametern” als in C (dort nur über Zeiger). Vorteile: Zugriff auf das referenzierte Argument einfach. Ein Parameter, der das Argument referenziert, ist genauso effizient wie ein Zeiger als Parameter. FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Referenzen als Parameter II Beispiel: ... void swap(long& lTest1, long& lTest2) { long lTemp = lTest1; lTest1 = lTest2; lTest2 = lTemp; } int main() { long lVar1 = 10, lVar2 = 20; swap(lVar1,lVar2); cout << lVar1 << “ “ << lVar2 << endl; } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Rekursion Eine Funktion, die sich selbst direkt oder indirekt (über den Umweg anderer Funktionen) aufruft, wird als rekursiv bezeichnet. Viele mathematische Funktionen sind rekursiv definiert. Rekursion: mächtiges Konzept, das zur Lösung ,,rekursiver Probleme`` eingesetzt werden sollte. Der Einsatz von Rekursion bei der Lösung von iterativen Problemen sollte unterbleiben. long fak(int n) { if (n == 0) { return 1; } else { return fak(n-1)*n; } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Quiz I Wie sieht die Ausgabe des folgenden Programms aus? #include <iostream.h> void swap(int i, int j) { int temp = i; i = j; j = temp; } int main() { int a = 10, b = 20; swap (a, b); cout << “ a = “ << a << “ b = “ << b; return 0; } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Quiz II Wo liegt der Fehler bei folgender Funktion? double volumen(double laenge, double breite = 1,double hoehe) { return laenge * breite * hoehe) } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Quiz III Wie sieht die Ausgabe des folgenden Programms aus? int iNeu(int& i, int increment = 1) { return I + increment; } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Quiz IV Wo liegt bei diesen überladenen Funktionen ein Problem? int iNeu(int& iStart, int increment = 1) { return iStart + increment; } int iNeu(int& iStart) return iStart + 10; FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren

Quiz V Wo gibt es ein Problem? #include <iostream.h> int main() { int a = 10, b = 20; cout << “Produkt der beiden Zahlen ist: “; cout << mult (a, b); return 0; } void mult(int i, int j) { return i*j; } FHT StuttgartProf. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmieren