Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Funktionen. Beispiel: int main(){ int geld; geld = 10; verdopple(geld); } void verdopple(int g){ g = 2 * g; }

Ähnliche Präsentationen


Präsentation zum Thema: "Funktionen. Beispiel: int main(){ int geld; geld = 10; verdopple(geld); } void verdopple(int g){ g = 2 * g; }"—  Präsentation transkript:

1 Funktionen

2 Beispiel:

3 int main(){ int geld; geld = 10; verdopple(geld); } void verdopple(int g){ g = 2 * g; }

4 Was passiert beim Aufruf ?

5 int main(){ int geld; geld = 10; verdopple(geld); } Inhalt wird automatisch kopiert in die Variable g void verdopple(int g){ g = 2 * g; }

6 konkret:

7 void verdopple(int g){ g = 2 * g; } int main(){ int geld; geld = 10; verdopple(geld); } 10

8 int main(){ int geld; geld = 10; verdopple(geld); } 10 void verdopple(int g){ g = 2 * g; }

9 int main(){ int geld; geld = 10; verdopple(geld); } 10 void verdopple(int g){ g = 2 * g; }

10 int main(){ int geld; geld = 10; verdopple(geld); } 10 void verdopple(int g){ g = 2 * g; }

11 int main(){ int geld; geld = 10; verdopple(geld); } 10 void verdopple(int g){ g = 2 * g; }

12 int main(){ int geld; geld = 10; verdopple(geld); } 10 void verdopple(int g){ g = 2 * g; }

13 void verdopple(int g){ g = 2 * g; } int main(){ int geld; geld = 10; verdopple(geld); } 10

14 Aber: geld = 10 int main(){ int geld; geld = 10; verdopple(geld); } void verdopple(int g){ g = 2 * g; }

15 Mit der "Technik", die gerade in dem Beispiel vorgeführt wurde, kann man also keinen Output realisieren.

16 Deshalb werden wir (neben der "Technik" mit return) im Folgenden eine weitere "Technik" kennen lernen, mit der man einen Output realisieren kann.

17 Beispiel

18 Ein Hacker weiß nur, dass Sie durch einen Gewinn insgesamt Euro auf irgendeinem Konto haben. Kann er - nur mit diesem Wissen - Sie betrügen?

19 Nein, da er dadurch noch keinen Zugriff auf das Bankkonto hat.

20 Welche weitere Angabe benötigt er noch, um überhaupt einen Angriff (über Online-Banking)auf Ihr Bankkonto planen zu können?

21 Die Kontonummer = Adresse des Bankkontos

22 Bankkonto besteht also aus: Kontonummer = Adresse Kontostand = Inhalt (Wert)

23 Wie erfolgt nun ein Angriff auf Ihr Bankkonto, der den Kontostand um z.B Euro vermindert ?

24 Kontostand (Euro) Herr Maier: Kontonummer Kontostand Befehl des Hackers: Inhalt( ) = Inhalt( )

25 Das bedeutet für uns: Funktion erzeugt Output, indem ihr die Adresse einer Variablen übergeben wird. Die Funktion kann dann über die Adresse den Inhalt ändern.

26 Beispiel:

27 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; }

28 verdopple(geld, &erg); verdopple(g, gn); Wert wird automatisch kopiert in die Variable g *gn = 2 * g; Wert wird automatisch kopiert in die Variable gn

29 konkret:

30 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

31 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

32 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

33 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

34 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

35 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

36 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

37 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

38 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815? erg Name

39 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld 0815 erg Name

40 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } AdresseWert geld erg Name erg =

41 Weitere Möglichkeit:

42 Beim Mosten: Man gibt 100 Kg Mostäpfel im Zuber ab und bekommt sie im gleichen Zuber zurück:

43 Äpfel

44 Most

45 Beispiel:

46 int main(){ int geld = 10; verdopple(&geld); } 0815 void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld

47 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

48 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

49 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

50 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

51 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

52 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

53 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

54 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

55 int main(){ int geld = 10; verdopple(&geld); } void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld 0815

56 int main(){ int geld = 10; verdopple(&geld); } 0815 void verdopple(int *m){ *m = 2 * *m; } AdresseWert geld

57 int main(){ int geld = 10; verdopple(&geld); } 0815 void verdopple(int *m){ *m = 2 * *m; } // geld: AdresseWert geld

58 Welche weitere, schon bekannte Möglichkeit, gibt es noch ? mit return

59 int main(){ int kohle; int erg; kohle = 10; erg = verdopple(kohle); } int verdopple(int knete){ int viel; viel = 2 * knete; return(viel); }

60 Wird bei einem Funktionsaufruf die Adresse einer Variablen übergeben, so nennt man dies: call by reference Wird dagegen der Wert einer Variablen (und nicht die Adresse) übergeben, nennt man dies: call by value.

61 Wir werden Funktionen IMMER nach dem folgenden Schema in einem Programm kommentieren: (siehe Arbeitsblatt)

62 #include "stdafx.h" #include int berechne(double a, double b, double *u, double *f); int main(){ double s1; double s2; int erg; double flaeche; double umfang; s1=10; s2=20; erg = berechne(s1, s2, &umfang, &flaeche); if (erg==1) printf("Das Rechteck ist ein Quadrat"); printf("Umfang=%f Fläche=%f erg=%d", umfang, flaeche, erg); } /**************************************************************/ /** **/ /** int berechne(double a, double b, double *u, double *f) **/ /** **/ /*#************************************************************/ /* Parameter: (i) double a>=0 : eine Seitenlänge des Rechtecks (i) double b>=0 : andere Seitenlänge des Rechtecks (o) double *u: Umfang des Rechtecks (o) double *f: Fläche des Rechtecks Return: (o) 1: Quadrat 2: Rechteck Beschreibung: Berechnet aus den beiden Seitenlängen a und b des Rechtecks den Umfang *u und die Fläche *f und bestimmt außerdem, ob es ein Quadrat oder ein Rechteck ist. */ int berechne(double a, double b, double *u, double *f){ int r; *u=2*(a+b); *f=a*b; if(a==b) r=1; else r=2; return(r); }

63 Eine wichtige Bemerkung:

64 Eine Funktion ist eine Black Box, die im allgemeinen einen Input benötigt und daraus einen Output erstellt. Aus Sicht eines Kunden soll der Input nicht redundant (überflüssig) sein (wie z.B. runder Kreis, weisser Schnee).

65 Beispiel:

66 Es soll die Quersumme einer positiven, ganzen Zahl berechnet werden (z.B. von 123: =6). Als Input genügt die Zahl. Die Angabe der Anzahl der Ziffern von 123 wäre redundant.

67 Dies soll gefälligst von der Funktion berechnet werden!! D.h. möglichst viel Arbeit an die Funktion abdrücken!! Wenn man einen Urlaub im Hotel bucht, will man ja vorher das Hotel nicht auch noch selbst bauen.

68 Wenn man in einem Restaurant essen geht, will man ja auch kein Salz und Pfeffer mitnehmen, sondern dies soll geliefert werden.


Herunterladen ppt "Funktionen. Beispiel: int main(){ int geld; geld = 10; verdopple(geld); } void verdopple(int g){ g = 2 * g; }"

Ähnliche Präsentationen


Google-Anzeigen