EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido

Slides:



Advertisements
Ähnliche Präsentationen
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Advertisements

Claudio Moraga; Gisbert Dittrich
FOR Anweisung.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Claudio Moraga; Gisbert Dittrich
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
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
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
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 Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
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
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 Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 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 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
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.
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 Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
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 Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
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 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 Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
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 Fakultät.
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 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 Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Referenztypen (II) und Const- Referenzen Temporäre Objekte, Const- Referenzen, was genau ist konstant?
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
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.
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Nksainf.ch/oinf.
Einführung in die Programmierung
 Präsentation transkript:

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido

Kap 3: Funktionen etc.Vorl EINI-I" Gliederung Kapitel 3 Funktionen –Einführendes Beispiel: Potenz –Funktionsdefinition –Funktionsprototyp –Funktionsaufruf Formale Parameter aktuelle Parameter call by value –Rekursive Funktionen: Beispiel Fakultät u.a. Animation

Kap 3: Funktionen etc.Vorl EINI-I" Erste Möglichkeit: for (n=1; n < 8; n++) { b=n; for (p=1; b>0; --b) p=p*n; cout << p; } Einführendes Beispiel: Potenz Aufgabe: Berechne n n für 1 n 7. –Muß also für jedes n ausführen: b=n; for (p=1; b > 0; --b) p=p*n;

Kap 3: Funktionen etc.Vorl EINI-I" 4 Einführendes Beispiel: Potenz Annahme: –Programmtext sollte mehrfach verwendet werden/kommt häufiger vor. Eine selbständige Formulierung, die dann wiederverwendet werden kann, ist obiger Vorgehensweise vorzuziehen: –Ansprechbar über eigenen Namen –Evtl. mit Parametern

Kap 3: Funktionen etc.Vorl EINI-I" 5 Zweite Möglichkeit: als Funktion. Gleich allgemein für a b. Die sieht so aus: long int Potenz(int a, int b) { long int p; for (p = 1; b > 0; --b) p = p * a; return p; } Einführendes Beispiel: Potenz

Kap 3: Funktionen etc.Vorl EINI-I" 6 Rumpf (Text) der Funktion Funktionen: Bestandteile Name der Funktion Parameter der Funktion (Name und Typ) Typ des Rückgabe- werts Rückgabewert long int Potenz(int a, int b) { long int p; for (p = 1; b > 0; --b) p = p * a; return p; }

Kap 3: Funktionen etc.Vorl EINI-I" Verwendung in einer anderen Funktion main() { int i; for (i = 0; i < 8; i++) cout << i << " hoch " << i << " ist " << Potenz(i, i) << endl; } Angabe der Signatur Aufruf Das Hauptprogramm ist in C++ eine Funktion! long int Potenz(int, int); Potenz

Kap 3: Funktionen etc.Vorl EINI-I" /* Potenz als Funktion */ #include long int Potenz(int, int); long int Potenz(int a, int b) { long int p; for (p = 1; b > 0; --b) p = p * a; return p; } int main() { //long int Potenz(int, int); int i; for (i = 0; i < 8; i++) cout << i << " hoch " << i << " ist " << Potenz(i, i) << endl; } Ausführen

Kap 3: Funktionen etc.Vorl EINI-I" Anmerkungen: Funktionen Das Hauptprogramm ruft Funktion "Potenz" auf –durch Hinschreiben des Namens mit "aktuellen" Parametern (Potenz (i,i)) Dazu Minimalinformationen über die Funktionen nötig: –Minimalinformationen über die zu verwendende Funktion stehen im sog. Funktionsprototypen –Beschreibt die Signatur der Funktion Die Signatur einer Funktion sagt, –welche Typen die Parameter (in der gegebenen Reihenfolge) der Funktion haben, –welchen Typ der Ergebniswert hat.

Kap 3: Funktionen etc.Vorl EINI-I" Anmerkungen: Funktionen Funktionsprototyp –Es werden hier nur die Typen der Parameter angegeben. –Sinn: der Compiler kann bei der Übersetzung überprüfen, ob die Typen richtig verwendet werden. Daher interessieren die Namen der Parameter, wie in der Funktionsdefinition verwendet, nicht. In unserem Beispiel: long int Potenz(int, int); –die Funktion hat zwei Parameter je vom Typ int –der Ergebniswert ist vom Typ long int

Kap 3: Funktionen etc.Vorl EINI-I" Anmerkungen: Funktionen Funktionsparameter –Formale Parameter: Werden in der Definition verwendet Sie dienen zur formalen, symbolischen Beschreibung der Berechnung. –Aktuelle Parameter: Werden beim Aufruf verwendet Mit ihnen führt die Funktion die aktuellen Berechnungen durch. Im Beispiel: –Formal: a,b - Aktuell: i, i

Kap 3: Funktionen etc.Vorl EINI-I" Lokale Variablen Die Funktion benötigt für ihre eigenen Berechnungen eigene Variablen –lokale Variablen: lokal deshalb, weil sie nur im Rumpf der Funktion deklariert und benutzt werden, außerhalb der Funktion nicht bekannt sind. Beispiel: –Die Variable p ist außerhalb der Funktion Potenz nicht bekannt.

Kap 3: Funktionen etc.Vorl EINI-I" Anmerkungen: Funktionen Schritte bei jedem Aufruf einer Funktion: –Auswertung der aktuellen Parameter zu Werten. –Für jeden formalen Parameter wird eine lokale Variable gleichen Namens angelegt. –Die Werte der aktuellen Parameter werden an diese lokalen Variablen übergeben. (Call by Value) –Der Rumpf der Funktion wird ausgeführt. –Am Ende der Ausführung des Rumpfes wird der Wert, der mit return gekennzeichnet ist, als Ergebnis des Aufrufs zurückgegeben.

Kap 3: Funktionen etc.Vorl EINI-I" Anmerkungen: Funktionen In unserem Beispiel: Aufruf von: Potenz(3*i - 4, 2*j) mit z.B. i = 3, j = 2 –liefert : –Parameterwert links: 5 –Parameterwert rechts: 4 –Lok. Variable a : 5 Lok. Variable b : 4 –return 625

Kap 3: Funktionen etc.Vorl EINI-I" Bei Aufruf: Call by Value Call by Value (Parameterübergabeverfahren) –funktioniert wie oben beschrieben –die Funktion arbeitet: mit den Werten der aktuellen Parameter, nicht mit den aktuellen Parametern selbst –Daraus folgt: wenn die Funktion die Werte ihrer Parameter ändert (wie hier a und b), so merkt der Aufrufer das nicht.

Kap 3: Funktionen etc.Vorl EINI-I" 16 Aufruf Arbeit der aufgerufenen Funktion Rückgabewert Auswertung der aktuellen Parameter Auswertung der aktuellen Parameter Übergabe der Werte an die aufgerufene Funktion Übergabe der Werte an die aufgerufene Funktion Aufruf der Funktion

Kap 3: Funktionen etc.Vorl EINI-I" Rekursive Funktionen - Wichtiges Hilfsmittel zur Strukturierung des Kontrollflusses von Algorithmen. Beispiel: Fakultätsfunktion (engl.: factorial) –Definiere für n > 0: –Besonderheit: Definition (n!; links) stützt sich auf sich selbst ((n-1)!; rechts) ab !! –Läßt sich direkt in ein Programm übertragen:

Kap 3: Funktionen etc.Vorl EINI-I" Rekursive Funktionen Funktionsdefinition: int factorial (int n){ int k; // Hilfsvariable (lokal) if ((n == 0) || (n == 1)) k=1; else { if (n>1) k = (factorial (n-1)) * n; } return k; } // später "int" ---> "float" // später: Negativwerte abfangen.

Kap 3: Funktionen etc.Vorl EINI-I" Rekursive Funktionen Funktionsdefinition: float factorial (int n){ float k; // Hilfsvariable if ((n == 0) || (n == 1)) k=1; else { if (n > 1) k = (factorial (n-1)) * n; } return k; }

Kap 3: Funktionen etc.Vorl EINI-I" Rekursive Funktionen Funktionsverwendung: #include float factorial (int); // Funktionsprototyp /*int*/ main(){ int Zahl; cout << "Fakultät von ? "; cin >> Zahl; cout << endl; << "Fakultät ist: " << factorial (Zahl) << endl; //return 0; } factorialAnimation

Kap 3: Funktionen etc.Vorl EINI-I" /* Factorial; rekursiver Aufruf Typ und Hilfsvariable float und nicht int, um größere Eingaben als 9 zu verarbeiten. ACHTUNG!:Eingabe negativer Zahlen nicht abgefangen!! */ #include float factorial (int); // Funktionsprototyp float factorial (int n){ float k; // Hilfsvariable if ((n==0)||(n==1)) k=1; else{ if (n > 1) k = (factorial (n-1)) * n; } return k; }

Kap 3: Funktionen etc.Vorl EINI-I" /* Factorial*/ /*int*/ main() { int Zahl; cout << "Fakultät von ? "; cin >> Zahl; cout << endl; cout << "Fakultät ist: " << factorial (Zahl) << endl; //return 0; } Ausführen

Kap 3: Funktionen etc.Vorl EINI-I" Rekursive Funktionen Allgemein: Rekursive Funktionen müssen aufweisen: –Eine Beschreibung, wie sich der Wert eines Aufrufes aus den Werten von Aufrufen für "kleinere" Parameterwerte zusammensetzt. –Eine Terminierungsbedingung: ist diese Bedingung erfüllt, so muß angegeben werden, wie sich der Wert direkt berechnen läßt. –Jeder Aufruf einer rekursiven Funktion muß direkt oder indirekt die Terminierungsbedingung erreichen.

Kap 3: Funktionen etc.Vorl EINI-I" float factorial (int n ) { float k; if (( n ==0) || ( n ==1)) k=1; else {if ( n >1) k = (factorial ( n -1)) * n ;} return k ; } /* n=3 */ factorial (2) factorial(3) float factorial (int n ){ float k; if (( n ==0) || ( n ==1)) k = 1; else {if ( n >1) k = (factorial ( n -1)) * n ;} return k ; } factorial (1) 1 * 2 2 float factorial (int n ){ float k; if (( n ==0) || ( n ==1)) k = 1; else {if ( n >1) k = (factorial ( n -1)) * n ;} return k ; } 1 2 * 3 6 == 6 /* n=1 */ 1 1 /* n= 2 */