Eigentlich ist Ihr gesamtes Programm eine Funktion, denn wann immer etwas verrichtet wird ( lat. fungi, pass. functum ) dann funktioniert es. Trotzdem die Unterscheidung zwischen externen und internen Funktionen.

In eine Funktion schreibt man die Hauptrechnung oder -arbeit. Im Programm selber wird diese dann aufgerufen und arbeitet wahlweise mit den in der Funktion deklarierten Parametern oder mit Variablen, die erst später im Programm auftauchen. Sehr praktisch, wenn man für verschiedene Variablen immer wieder dieselbe Verarbeitung braucht. Die Werte dieser Variablen werden bei jedem Aufruf an die Funktion durchgereicht und nach gleichem Muster verarbeitet. Die Ausgabe richtet sich freilich nach dem Wert, also nach der Belegung der Variablen.

Wenn z.B. auf einer Internetseite drei Felder auftauchen, die lediglich zwei Zahlen addieren, wird dabei sofort eine Funktion in JavaScript aufgerufen weil HTML - von den Grundrechenarten mal abgesehen - keine Aufgaben der Programmierung übernimmt. Die Grenze zwischen Programm und Funktion ist also fliessend.

Potenzen  |  Fakultäten und Kombinatorik  |  Globale und lokale Variablen

Bald wird es sich anbieten, Zählvorgänge in Funktionen auszulagern. Das macht Sinn, da in Programmen häufig gezählt wird und in manchen sogar ausschliesslich.

Beachten Sie auch hier, daß die Namen der Variablen nicht identisch sein müssen. Wohl aber die Anzahl derer.

Die Variable i als Zählvariable muss auch im Hauptprogramm deklariert werden, denn sonst stimmt die Anzahl nicht mehr überein und die Funktion kann nicht aufgerufen werden.

Der praxisbezogene Nutzen dieses Auslagerns ist der, daß der Zählvorgang isoliert über dem Programmkörper steht und nicht verändert wird.

Im Hauptprogramm sind dann nur noch spezielle Bedingungen. Etwa die Reihenfolge des Zählens, die hier immer gleich bleiben soll. Dazu werden die Parameter im Aufruf vertauscht:

Statt cout << nums ( a, b, i ) dann cout << nums ( b, a, i )

Es wäre auch möglich, die Bedingungen des Zählvorgangs selber zu verändern:

Statt for ( i = a ; i < b ; i++ ) dann eben for ( i = b ; i < a ; i++ )

Doch dann bräuchte man entweder eine zweite Funktion mit eigenem Namen oder beide Zählvorgänge im Programmkörper und in der if... else... Anweisung stehend.

Es werden drei Funktionen gleichen Namens angelegt, die aber unterschiedliche Datentypen deklariert haben. Die betreffende Funktion wird nun anhand der Parameter aufgerufen, da ja Namensgleichheit herrscht. Beachten Sie die Reihenfolgen der Funktionen, der Deklarationen im Hauptprogramm und die der Aufrufe.

Man kann auch mehrere Parameter verwenden. Beachten Sie, daß die Funktion
funk ( double a ) nicht konstant belegt wird, sondern eine Eingabe erwartet.

Die Überprüfung des Datentyps mittels impliziter Typumwandlung cast dient als Bedingung. Geben Sie statt Double einen Integer ein, wird 12 zwar nicht als 12.00 dargestellt, aber der Wert wird aufgenommen und probieren Sie ein Zeichen, ist die Ausgabe 0

Implizite Typumwandlung mit cast

Ein recht praktisches Beispiel für das Zusammenspiel von Klasse, überladener Funktion und switch mit case ist diese Möglichkeit - es gibt noch andere - Zahlen von Buchstaben zu unterscheiden.

Damit ersichtlich wird, daß auch wirklich eine Zahl aufgenommen wird, habe ich diese in der Ausgabe mit 3 multipliziert, was ja mit Buchstaben nicht möglich wäre.

switch & case  |  Klassen   JavaDome: Funktionen

Gesamtsumme
+ Mehrwertsteuer19 %
+ Expresszuschlag in Prozent
- Rabatt in Prozent

Neue Summe der Rechnung0

Es wird mit Mehrwertsteuer und mit Zuschlägen bzw. Rabatten gerechnet. Klassischerweise packt man so etwas in eine externe Funktion, die ein Grundgerüst darstellt.

Detaillierte Bedingungen und Sonderfälle stehen dann im Hauptprogramm, ordnen sich aber der Funktion unter, sofern sie diese aufrufen. In der Funktion steht also nur die Multiplikation mit dem Grundwert, an dem sich alles andere orientiert.

Die Schnittmenge zweier Kreise ist eigentlich die Addition der Kreissegmente, die sich durch eine gemeinsame Grundlinie bestimmen. Diese Grundlinie ist die Verbindung der Schnittpunkte der Kreislinien.

Radius ( r1 ) Radius ( r2 ) S1 bis S2

A ( Drei 1 ) A ( Drei 2 ) A ( Schnitt )
Winkel ( K 1 ) Winkel ( K 2 )
A ( Sektor 1 ) A ( Sektor 2 )
A ( Segm. 1 ) A ( Segm. 2 )
Aus obigen Angaben ergibt sich bald die Höhe des jeweiligen Dreiecks. Anwendung finden hier der Pythagoras, die Flächenformel des Dreiecks sowie der Kreissektoren. Allesamt gut geeignet für externe Funktionen.

Startseite  |  Hinweise und Impressum  |  Facebook  |  Twitter  |  Google plus