Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.

Ähnliche Präsentationen


Präsentation zum Thema: "Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene."—  Präsentation transkript:

1 Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene Teilaufgaben Sie dienen einer besseren Strukturierung des Programms Sie fördern die Wiederverwertbarkeit von Code

2 Definition von Funktionen datentyp name([Parameterliste]) { [Lokale Deklarationen]... Anweisungen... }

3 Definition von Funktionen datentyp gibt den Ergebnistyp der Funktion an ( void bei keinem Ergebnis) name ist der Bezeichner der Funktion In der Parameterliste stehen die formalen Parameter (in ihnen werden Werte gespeichert, die der Funktion beim Aufruf übergeben werden). Sie müssen mit Typ Parametername deklariert werden Lokale Variablendeklarationen und Anweisungen bilden den Funktionsrumpf

4 Funktionen Beispiel 1 double hoch(double a, int b) /* a,b...formale Parameter*/ { int zaehler; double rueckgabe_wert = 1.0; if(a == 0.0 && b <= 0) return 0.0; if(b < 0) { a = 1.0/a; b = -b; } for(zaehler=1; zaehler<=b; zaehler++) rueckgabe_wert *= a; return rueckgabe_wert; }

5 Aufruf von Funktionen Die Funktion hoch kann von jeder anderen Funktion aus aufgerufen werden: ergebnis = hoch( 3.7, 4 ); double hoch(double a, int b ) {... return ergebnis_wert ; } Dabei werden die Werte der Argumente (hier 3.7 und 4) in die formalen Parameter a und b kopiert.

6 return - Anweisung Die return-Anweisung bewirkt die unmittelbare Beendigung der Funktion und die Rückkehr zum Aufrufer. Sie hat folgende Syntax: return ausdruck; return; /* bei Funktionen vom Typ void */

7 Prototypen Eine Funktion muss vor ihrem ersten Aufruf definiert werden oder es muss zumindest ihr Prototyp bekannt sein. Dieser lautet: datentyp name([Parameterliste]) ; Die Namen der formalen Parameter können dabei weggelassen werden: double hoch(double, int); double hoch(double a, int b);

8 Reihenfolge in einem C- Programm Üblicherweise lautet die Reihenfolge in einem C- Programm: 1.Preprozessoranweisungen 2.Funktionsprototypen 3.Definition von main 4.Definition der übrigen Funktionen

9 Übung 4_1 Schreiben Sie Funktionen zur Berechnung des größten Wertes von 2, 3 und 4 Integerwerten. Testen Sie die Funktionen mit Hilfe einer geeigneten Funktion main

10 Call by Value Beim Aufruf einer Funktion werden nur die Werte der aktuellen Parameter an die Funktion übergeben: void tausch(int x, int y) { int h; h = x; x = y; y = h; } int a= 10, b = 20; tausch(a,b); /* a=10, b=20 */ Vertauscht werden in obigen Beispiel zwar die Werte der formalen Parameter x und y, nicht aber jene der aktuellen Argumente a und b.

11 Pointer (Zeiger) Ein Pointer ist ein neuer Datentyp, in dem die Adresse einer anderen Variablen gespeichert werden kann. Bei der Deklaration eines Pointers muss auch der Typ jener Variablen angegeben werden, deren Adresse gespeichert werden soll. Deklaration eines Pointers: Typ *Bezeichner; int *pi; double *pd;

12 Dereferenzierung Nach der Deklaration eines Pointers kann die Adresse einer passenden Variablen in diesem Pointer gespeichert werden. Die Adresse eines Datenobjekts erhält man mit Hilfe des Adressoperators &: int x = 10, *pi; pi = &x; pi 10 x Referenziert der Pointer pi die Variable x, so kann der Wert von x auch mit Hilfe von *pi angesprochen werden. * heißt Dereferenzierungsoperator.

13 Pointerbeispiel #include int main() { int x = 10, *pi = NULL; /* Adresse 0 wird zugewiesen */ pi = &x; printf("x: %d, &x: %p\n", *pi, pi); *pi = 20; /* x = 20 */ printf("x: %d, &x: %p\n", x, &x); return 0; } Output: x: 10, &x: 0065FDF4 x: 20, &x: 0065FDF4

14 Adresse NULL und void-Pointer Aus Sicherheitsgründen sollte in einem Pointer nie eine ungültige Adresse gespeichert sein. Zu diesem Zweck gibt es die unmögliche Adresse NULL (Preprozessorkonstante), die zur Initialisierung von Pointern verwendet werden sollte. Es gibt den Pointertyp void, der mit allen anderen Typen verträglich ist. Ein void-Pointer kann nicht dereferenziert werden, da keine Längeninformation der refernzierten Daten mit abgespeichert ist. void *pv; int x = 10; pv = &x; /* korrekt */ *pv = 20; /* Compilerfehler */

15 Call by Reference Um den Inhalt einer Variablen des Aufrufers in einer Funktion verändern zu können, darf nicht der Wert dieser Variablen als aktuelles Argument an die Funktion geschickt werden, sonderen die Adresse dieser Variablen. Der zugehörige formale Parameter muss dann ein passender Pointer sein. void tausch(int *px, int *py) { int h; h = *px; *px = *py; *py = h; } int a= 10, b = 20; tausch(&a,&b); /* a=20, b=10 */

16 Übung 4_2 Schreiben Sie eine Funktion, die eine Uhrzeit im Format hh:mm:ss einliest und bei gültiger Eingabe den Wert 1, sonst den Wert 0 retourniert. Die Variablen, in denen Stunden, Minuten und Sekunden gespeichert werden sollen, sind der Funktion by Reference zu übergeben.

17 Rekursive Funktionen Eine Funktion kann sich rekursiv, d.h. sich selbst aufrufen. Es ist in jedem Fall zu gewährleisten, dass die Rekursion kontrolliert terminiert. Das folgende Beispiel zeigt die Rekursion am Beispiel der Berechnung von n Faktorielle: long fakultaet(int n) { if (n<0) return –1; /* Fehlercode */ if (n == 0 || n == 1) return 1; return n * fakultaet(n-1); }

18 Übung 4_3 Schreiben Sie eine rekursive Funktion zur Berechnung der Summe der ersten n natürlichen Zahlen.


Herunterladen ppt "Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene."

Ähnliche Präsentationen


Google-Anzeigen