1 / 20

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I. Vorlesung 2 SWS WS ‘99/00 Gisbert Dittrich FBI Unido dittrich@cs.uni-dortmund.de. Gliederung Kapitel 3. Funktionen Einführendes Beispiel: Potenz Funktionsdefinition Funktionsprototyp

warner
Download Presentation

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EINI-IEinführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS ‘99/00 Gisbert Dittrich FBI Unido dittrich@cs.uni-dortmund.de

  2. 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

  3. Einführendes Beispiel: Potenz • Aufgabe: Berechne nn für 1 £ n £ 7 . • Muß also für jedes n ausführen: b=n; for (p=1; b > 0; --b) p=p*n; - Erste Möglichkeit: for (n=1; n < 8; n++) { b=n; for (p=1; b>0; --b) p=p*n; cout << p; }

  4. Einführendes Beispiel: Potenz • Annahme: • Programmcode 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

  5. Einführendes Beispiel: Potenz • Zweite Möglichkeit: als Funktion. Gleich allgemein für ab. 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; }

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

  7. Potenz Verwendung in einer anderen Funktion int main() { int i; for (i = 0; i < 8; i++) cout << i << " hoch " << i << " ist " << Potenz(i, i) << endl; } long int Potenz(int, int); Angabe der Signatur Das Hauptprogramm ist in C++ eine Funktion! Aufruf

  8. 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.

  9. 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

  10. 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

  11. Lokale Variablen • Die Funktion benötigt für ihre eigenen Berechnungen eigene Variablen • lokale Variablen: lokal deshalb, weil sie • nur im Code 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.

  12. 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. • Diese 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.

  13. Anmerkungen: Funktionen • In unserem Beispiel: • Aufruf von: Potenz(3*i - 4, 2*j) mit z. B i = 3, j = 1 • liefert : • Parameterwert links: 5 • Parameterwert rechts: 2 • Lok. Variable a : 5 Lok. Variable b : 2 • return 25

  14. 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 b), so merkt der Aufrufer das nicht.

  15. Auswertung der aktuellen Parameter Übergabe der Werte an die aufgerufene Funktion Aufruf der Funktion Aufruf Arbeit der aufgerufenen Funktion Rückgabewert

  16. 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:

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

  18. Rekursive Funktionen Funktionsdefinition: float factorial (int n){ float k; // Hilfsvariable if (n==0) k=1; else { if (n>0) k = (factorial (n-1)) * n; }; return k; };

  19. factorial Animation Rekursive Funktionen Funktionsverwendung: #include <iostream.h> float factorial (int); // Funktionsprototyp int main(){ int Zahl; cout << "Fakultät von ? "; cin >> Zahl; cout << endl; << "Fakultät ist: " << factorial (Zahl) << endl; return 0; }

  20. 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.

More Related