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.
![](../Symbols/Hint.gif) |
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:
![](Image1.gif)
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:
-
Drücke die Tasten
,
7, 3.
|
|
-
Wähle unter "Type" die Option "Function"
und gib den Namen heron für die zu erstellende Funktion ein.
|
![](screen2.gif) |
-
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 |
![](../Symbols/Hint.gif) |
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:
![](screen4.gif)
![](../Symbols/Hint.gif) |
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
-
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]
|