1 / 48

Funktionen

Funktionen. Aufgabe :. Eingabe zweier Zahlen ---&gt; Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---&gt; Minimum bestimmen. Schreibaufwendige Lösung:. int main(){ int min1, min2; int z1, z2, z3, z4; printf(&quot;4 Zahlen eingeben<br>&quot;); scanf(&quot;%d&quot;,&amp;z1); scanf(&quot;%d&quot;,&amp;z2);

kevork
Download Presentation

Funktionen

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

  2. Aufgabe: Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen

  3. SchreibaufwendigeLösung:

  4. int main(){ int min1, min2; int z1, z2, z3, z4; printf("4 Zahlen eingeben\n"); scanf("%d",&z1); scanf("%d",&z2); scanf("%d",&z3); scanf("%d",&z4); //...

  5. ... if (z1<z2) min1 = z1; else min1 = z2; if (z3<z4) min2 = z3; else min2 = z4; }

  6. Die Nachteile sind: Schreibarbeit Unstrukturiertes Programm

  7. ElegantereLösung: Funktionen (Black Box)

  8. Systemisch:Black-Box-Methode

  9. Input Output Black Box

  10. Input - Schnittstellenkanal Funktion: mini zahl1 mini zahl2 Output - Schnittstellenkanal

  11. WICHTIG:Die Schnittstellenkanäle bzw. Input und Output werden hier durch Variablen realisiert.

  12. int main(){ int min1, min2; int z1, z2, z3, z4; printf("4 Zahlen eingeben\n"); scanf("%d",&z1); scanf("%d",&z2); scanf("%d",&z3); scanf("%d",&z4); printf("Min1=%d, Min2=%d", min1,min2); } Wie heisst der Aufruf der Funktion? min1 = mini(z1,z2); // Aufruf min2 = mini(z3,z4); // Aufruf

  13. Der Funktionsaufruf:min1 mini(z1,z2); kann man sich als einen Kanal vorstellen, der den Output von rechts nach links transportiert.

  14. Der Funktionsaufruf:min1 = mini(z1,z2); Zur besseren Vorstellung kann man sich diesen Funktionsaufruf auch wie folgt anschaulich vorstellen:

  15. mini(z1,z2); Ein Zapfhahn wird in den Aufruf angebracht. Die Anzahl der Tropfen (bzw. der Flüssigkeit), d.h. min(z1,z2) wird .... in einem Behälter (einer Variablen) mit dem Namen min1 aufgefangen (abgespeichert). min1

  16. Weitere Möglichkeit eines Funktionsaufrufs: min1 = mini(4,mini(2,1)); z1 = 4; z2 = 8; 6 min1 =mini(6,17); 8 min2 =mini(z2,19); 4 min1 =mini(13,z1); 1

  17. Aber wie wird die Funktion definiert (programmiert) ?

  18. lokale Variable Datentyp der Funktion int mini(int zahl1, int zahl2){ int erg; if(zahl1 <= zahl2) erg = zahl1; else erg = zahl2; return(erg); } return erzeugt output. Funktion wird dann sofort verlassen. D.h. es kann nur genau ein output realisiert werden Der sogenannte formale Parameter ist ein Input-Parameter, weil er einen reinen Input darstellt. Dies nennt man auch call by value

  19. z.B. ersetzen beim vorigen Aufruf von mini(z2,19) die aktuellen Parameter z2 und 19 die formalen Parameter (Platzhalter) zahl1 und zahl2 int mini(int zahl1, int zahl2){ int erg; if(zahl1 <= zahl2) erg = zahl1; else erg = zahl2; return(erg); } An den formalen Parameter wird beim Aufruf der Funktion ein tatsächlicher Übergabewert, der so genannte aktuelle Parameter übergeben.

  20. Welche Variablen der Funktion mini sind vom Hauptprogramm aus sichtbar und umgekehrt ?

  21. int mini(int zahl1, int zahl2) { int erg; if(zahl1<=zahl2) erg =zahl1; else erg =zahl2; return(erg); }

  22. Was geschieht ganz genau beim Aufruf (vom Hauptprogramm aus) der Funktionmin1 = mini(z1, z2); im Gegensatz zum formalen Parameter heißen diese Parameter lokale Variable

  23. min1 = mini(z1, z2); zahl2=z2 (Kopie) zahl1=z1 (Kopie) int erg; if(zahl1 <= zahl2) erg = zahl1; else erg = zahl2; return(erg);

  24. Beispiel:

  25. 3 z1 = 7; z2 = 3;min1 = mini(z1 , z2); 7 3 int erg; if(zahl1 <= zahl2) erg = zahl1; else erg = zahl2; return(erg); 7 3 7 3 3 3

  26. Dies ist die Funktion main. Sie besitzt keine Parameter und wird im Gegensatz zu allen anderen Funktionen automatisch (ohne Zutun des Programmierers) beim Programmstart aufgerufen! D.h. die in ihr enthaltenen Anweisungen werden ausgeführt. #include "stdafx.h"#include <stdio.h>int mini(int zahl1, int zahl2); // Deklaration int main(){ int min1, min2; int z1, z2, z3, z4; printf("1.Zahl eingeben\n"); scanf("%d",&z1); printf("2.Zahl eingeben\n"); scanf("%d",&z2); printf("3.Zahl eingeben\n"); scanf("%d",&z3); printf("4.Zahl eingeben\n"); scanf("%d",&z4); min1 = mini(z1,z2); min2 = mini(z3,z4); printf("1.Minimum=%d\n",min1); printf("2.Minimum=%d\n",min2); return 0;}int mini(int zahl1, int zahl2){ // Definition int erg; if(zahl1 <= zahl2) erg = zahl1; else erg = zahl2; return(erg);} Dies ist die Funktion mini

  27. Bemerkung:

  28. Funktion mini wird in der Funktion main (Hauptprogramm) benutzt, bevor sie erst später weiter unten definiert wurde. Deshalb muß sie dem Hauptprogramm bekannt gemacht werden, deshalb Deklaration der Funktion vor main:

  29. #include "stdafx.h"#include <stdio.h>int mini(int zahl1, int zahl2);int main(){ ... min1 = mini(z1,z2); ...

  30. AufgabenRealisieren Sie die folgenden Funktionen und rufen diese in main je einmal auf:1) Maximum zweier Zahlen2) Mittelwert dreier Zahlen 3) Taschenrechner

  31. #include "stdafx.h"#include <stdlib.h>double maximum(double zahl1, double zahl2);double taschenrechner(double z1, double z2, char modus);double mittelwert(double z1, double z2, double z3);int main(){double max, durchschnitt, erg;max = maximum(5,3.6);durchschnitt = mittelwert(2, 6, 4);erg = taschenrechner(7, 9, '+');printf("Maximum=%f\n", max);printf("Mittelwert=%f\n", durchschnitt);printf("TR-Ergebnis=%f\n", erg);return 0;}

  32. double maximum(double zahl1, double zahl2){int erg;if(zahl1 < zahl2)erg = zahl2;elseerg = zahl1;return erg;}double mittelwert(double z1, double z2, double z3){return (z1+z2+z3)/3;}

  33. double taschenrechner(double z1, double z2, char modus){double erg;if(modus == '+'){erg=z1+z2;}else if(modus == '-'){erg=z1-z2;}else if(modus == '*'){erg=z1*z2;}else{erg=z1/z2;}return erg;}

  34. Bemerkung:Soll eine Funktion über ihren Namen keinen Wert zurückgeben, dann hat sie den Datentyp void.

  35. void nichts(int note){ if(note <= 4) printf("gut\n"); else printf("weniger gut\n"); //auch möglich: //return; }

  36. Bemerkung:Hat eine Funktion keinen Parameter, so wird dies in der Parameterliste mit void dargestellt.(void kann auch weggelassen werden).

  37. void ausgabe (void){ printf("Hallo MESK\n"); } // auch möglich: /* void ausgabe (){ printf("Hallo MESK\n"); } */

  38. Wo macht eine Funktion Sinn, die keinen Parameter hat und auch nichts zurückgibt ? Am Anfang eines Programms sollte der Anwender sogenannte Programminfos auf den Bildschirm bekommen, die ihn darüber aufklären, wie (z.B. welche Tasten er wann drücken soll) er das Programm bedienen soll.

  39. Struktogramm einer Funktion:

  40. Hier kommt Funktionsaufruf rein. Geben Sie ein Beispiel dazu an!

  41. erg = mini(3, 5)

  42. Die Funktion selbst (der Funktionenkörper) wird wieder in ein Struktogramm gepackt, vor das der Name, der Parameter und die Beschreibung der Funktion geschrieben wird.

  43. Beispiel:Darstellen der Funktion mini (siehe oben) durch ein Struktogramm

  44. Name: miniParameter:(i) double z1 : eine Zahl (i) double z2 : eine Zahl (o): das Minimum dieser 2 ZahlenBeschreibung:Berechnet von den 2 Zahlen z1 und z2 das Minimum. i bedeutet Input-Parameter o bedeutet Output-Parameter Wer will, kann statt return auch Rückgabe schreiben z1 < z2 F W erg = z1 erg = z2 return erg

  45. TIPP:

  46. Der besseren übersichtlicheren Darstellung wegen, kann man die Funktion (Funktionen) in eine Header-Datei schreiben und dann mit #include ...wieder einfügen.

  47. Welche Funktionen kennen Sie schon, bevor Sie diese Präsentation angeschaut haben?

  48. main()scanf(...)printf(...)

More Related