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; } 1020 10

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 100 000 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. 30000 Euro vermindert ?

24 Kontostand (Euro) Herr Maier: Kontonummer Kontostand 471108151 100 000 Befehl des Hackers: Inhalt(471108151) = Inhalt(471108151) - 30000

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); } 081510 void verdopple(int g, int *gn){ *gn = 2 * g; } 0123 10 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; } 0123 10 AdresseWert geld 0815? erg Name 081510

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

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

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

35 int main(){ int geld = 10; int erg; verdopple(geld, &erg); } void verdopple(int g, int *gn){ *gn = 2 * g; } 081510 0123 10 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; } 081510 0123 10 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; } 081510 0123 10 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; } 081510 0815 20 0123 10 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; } 100815 20 0123 10 AdresseWert geld 0815 erg Name 081510

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

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; } 0815 10 AdresseWert geld

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

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

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

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

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

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

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

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

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

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

57 int main(){ int geld = 10; verdopple(&geld); } 0815 void verdopple(int *m){ *m = 2 * *m; } 0815 1020 0815 // geld: 20 0815 20 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: 1+2+3 =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