Einleitung | Einführungsbeispiel | Eingabe, Ausgabe, Variablen | Datentypen | Stukturen | For...EndFor | If...EndIf | Loop...EndLoop | While...EndWhile | Felder | Funktionen | Unterprogramme | Grafikprogrammierung | Index
Programmierkurs 

Funktionen

Funktionen eignen sich wie die Programme für immer wiederkehrende Berechnungen bzw. Aufgaben. Sie können aber im Gegensatz zu einem Programm einen Wert in den Ausgangsbildschirm zurückliefern, mit dem weitergerechnet werden kann.
 
Eine ausführliche Zusammenfassung zum Unterschied zwischen Funktionen und Programmen findest du im Handbuch im Kapitel "Programmierung" unter dem Begriff "Überblick über die Funktionseingabe".

 
 
Beispiel 13 ("HERONsche Flächenformel")
Kennt man von einem Dreieck die Längen der Seiten, lässt sich seine Fläche mit Hilfe der HERONschen Flächeninhaltsformel, wie folgt berechen:

Dabei steht s für den halben Umfang des Dreiecks. Formuliere eine Funktion, der die drei Seitenlängen des Dreiecks übergeben werden und die daraus den Flächeninhalt des Dreiecks berechnet.

Funktionen lassen sich analog zu den Programmen im Programmeditor erzeugen:
 

  1. Drücke die Tasten , 7, 3.
 
  1. Wähle unter "Type" die Option "Function" und gib den Namen heron für die zu erstellende Funktion ein.
  1. Durch das zweimalige Betätigen der -Taste öffnet sich der Rahmencode für die neue Funktion, der analog zu den Programmen aufgebaut ist und auch ebenso verwendet wird.

Der Funktion sollen die Längen der drei Seiten als Parameter übergeben werden; d.h. beim Aufruf der Funktion müssen die Längen der drei Seiten in der Klammer angegeben werden. Hat das Dreieck also die Seitenlängen a = 50, b = 40 und c = 30, wird die Funktion in der Eingabezeile am Ausgangsbildschirm folgendermaßen aufgerufen:

heron(50, 40, 30)

Damit die Funktion diese Zahlen beim Berechnen des Flächeninhalts auch verwenden kann, muss dies im Programmkode festgehalten werden. Dazu gibt man in der Klammer des Funktionskopfes jene Variablen an, die man der Funktion für die Berechnungen übergeben möchte. Die fertige Funktion könnte also folgendermaßen aussehen:
 

heron(a, b, c)
Func
Local s
(a + b + c) ® s
Ö(s*(s - a)*(s - b)*(s - c))
EndFunc

 
Selbstverständlich lassen sich auch Programme - wie hier die Funktionen - mit derartigen Parametern aufrufen.

Eine Funktion liefert den in der letzten Zeile berechneten Wert als Ergebnis in den Ausgangsbildschirm zurück, wo er zu weiteren Berechnungen verwendet werden kann. Die folgende Abbildung zeigt, was beim Aufruf der Funktion passiert:


Alle Variablen, die innerhalb einer Funktion mit einem Wert belegt werden, müssen lokale Variable sein. Die als Parameter übergebenen Variablen werden automatisch als lokale Variablen behandelt.

 

 
Beispiel 14 ("Schaltjahre")
Ist eine Jahreszahl durch vier teilbar, so handelt es sich um ein Schaltjahr. Ausgenommen sind jene Jahrhundertwenden, die nicht durch 400 teilbar sind. So handelt es sich also bei den Jahren 1600 und 2000 um Schaltjahre, wogegen die Jahre 1700, 1800 und 1900 keine Schaltjahre waren.
Programmiere eine Funktion, die nach Übergabe der Jahreszahl zurückgibt, ob es sich dabei um ein Schaltjahr handelt oder nicht.

Will man eine Funktion an einem beliebigen Punkt vor dem Funktionsende verlassen, kann man dies mit dem Befehl Return erreichen. Die Programmzeilen
 

If mod(j, 4) ¹ 0
    Return "kein Schaltjahr"

bewirken also, dass im Falle einer nicht durch vier teilbaren Zahl, die Funktion verlassen und "kein Schaltjahr" zurückgegeben wird.

Falls die Funktion hier nicht verlassen wird, muss die Jahreszahl ein Schaltjahr sein, sofern es sich nicht um eine durch 400 teilbare Jahrhundertwende handelt. Um dies abzuklären, muss getestet werden, ob die Jahreszahl eine Hunderterzahl ist und nicht durch 400 teilbar ist:
 

If mod(j, 100) = 0 and mod(j, 400) ¹ 0
    Return "kein Schaltjahr"

Wird die Funktion auch nach dieser Abfrage nicht verlassen, so muss es sich um ein Schaltjahr handeln. Die vollständige Funktion lautet also:
 

sjahr(j)
Func
If mod(j, 4) ¹ 0
    Return "kein Schaltjahr"
If mod(j, 100) = 0 and mod(j, 400) ¹ 0
    Return "kein Schaltjahr"
Return "Schaltjahr"
EndFunc

Übungsaufgaben

 
  1. Carl Friedrich Gauss hat folgende Formel angegeben mit der aus dem Datum der zugehörige Wochentag berechnet werden kann: 
w = (d + [2,6m - 0,2] + y + [y/4] + [c/4] - 2c) mod 7
Die eckigen Klammern in dieser Formel stehen für die sogenannten Gaußklammern, die folgendermaßen definiert sind:

Unter [x] (sprich: Gaußklammer von x) versteht man die größte ganze Zahl £ x; d.h.

[3,6] = 3 bzw. [-3,6] = -4.

Die darin auftretenden Variablen haben folgende Bedeutung:

d ... Tagesdatum (1 bis 28, 29, 30 oder 31)
y ... ist die aus den beiden letzten Stellen der Jahreszahl gebildete Zahl
c ... ist die aus den beiden ersten Stellen der Jahreszahl gebildete Zahl
m ... Monat (gemäß der folgenden Tabelle)
 

Monat
März
April
Mai
Juni
Juli
August
September
Oktober
November
Dezember
Jänner
Februar
m
1
2
3
4
5
6
7
8
9
10
11
12

Zu beachten ist dabei, dass der Jänner und der Februar stets zum vorhergehenden Jahr zu zählen sind. Jänner 1990 bedeutet daher den 11.Monat 1989 und Februar 1994 bedeutet den 12.Monat 1993.

w ... enthält den Wochentag gemäß folgender Tabelle:
 

Wochentag
So
Mo
Di
Mi
Do
Fr
Sa
w
0
1
2
3
4
5
6

Die folgende Abbildung zeigt einige Beispiele für den Funktionsaufruf:

[Lösungsvorschlag]

 



Mail an den Autor, Karl.Weinstich@theresianum.ac.at