Ein kleiner Programmierkurs - Teil 1.3: Funktionen funktionieren

Im vorangegangenen Abschnitt haben wir bereits am Beispiel der Identität gesehen, wie man Funktionen definieren kann. Zunächst gibt man der Funktion einen Namen (das kann einfach "f","g",... sein, es können aber auch längere Namen wie "farbeaendern", "fakultaet" oder "hugo" sein). Anschließend wird in runden Klammern eine Liste von Parametern genannt, die der Funktion übergeben werden. Bei Funktionen, die man aus der Analysis kennt, sind das ein, zwei oder mehrere Zahlen, die meistens mit kleinen Buchstaben benannt werden. Aber auch bei den Parametern hat man freie Wahl der Namen. Als drittes folgt ein Doppelpunkt mit Gleichheitszeichen ":=", das angibt, dass man die Funktion hier definiert. Nun folgt schließlich die Anweisung, die in der Funktion ausgeführt wird. Dies kann wiederum eine einfache Berechnung sein oder eine Folge von verschiedenen Anweisungen. In letzterem Fall schreibt man alle Anweisungen mit Semikolon getrennt in eine geschweifte Klammer: {Anweisung1; Anwesung2; Anweisung3}. Abgeschlossen wird die Funktionsdefinition wieder von einem Semikolon.
Bleiben wir zunächst bei einer Funktion, wie wir sie aus der Analysis kennen:


f(x):=x/2+sin(x);
plot(f(x));


Unsere Funktion verwendet hierbei die in Cinderella bereits bekannte Funktion sin für den Sinus. Es gibt verschiedene Funktionen, die schon vordefiniert sind, so z.B. sin, cos, exp, sqrt für Sinus, Cosinus, Exponentioalfunktion oder Quadratwurzel. Auch andere Funktionen haben wir schon gesehen, z.B. drawtext, plot oder if sind in CindyScript eingebaute Funktionen.
Nun setzen wir im Konstruktionsfenster wieder einen Punkt A. Dieser Punkt soll auf der Kurve von f festgenagelt werden, d.h. er soll sich nur noch entlang der Kurve bewegen durfen. Dazu muss seine y-Koordinate genau so groß sein, wie der Funktionswert an seiner x-Koordinate. Dies erreichen wir durch die Zuweisung


A.y=f(A.x);


Hierbei wird erst der Ausdruck rechts des Gleichheitszeichens berechnet, in unserem Fall der Funktionswert an der Stelle A.x. Das Ergebnis wird dann dem Attribut A.y auf der linken Seite zugewiesen.
Bitte schalten Sie Java ein, um eine Cinderella-Konstruktion zu sehen.
Ich möchte an dieser Stelle kurz bemerken, dass das Gleichheitszeichen hier eine etwas andere Bedeutung hat als üblicherweise in der Mathematik. In der Mathematik heißt "x=y", dass x und y stets den gleichen Wert haben. In der Programmierung heißt das lediglich, dass zu dem Zeitpunkt in dem die geschriebene Programmzeile ausgeführt wird, in eine bestimmten Speicherzelle, die wir mit x benannt haben, der Wert kopiert wird, der zu diesem Zeitpunkt in der Speicherzelle y steht. So macht der Ausdruck


a=3;
c=a;
b=4;
c=b;


mathematisch wenig Sinn, da er impliziert, dass 3=a=c=b=4 gilt, was sicherlich falsch ist. Als Programmcode wird jedoch folgendes ausgeführt:
Zuerst erhält a den Wert 3. Dann erhält c den gleichen Wert wie a, also auch 3. Dann erhält b den Wert 4. Schließlich erhält c den gleichen Wert wie b, also auch 4. Am Ende hat also a den Wert 3, b und c jeweils den Wert 4. Deshalb macht auch die Programmzeile "b=b+1;" durchaus einen Sinn, auch wenn es mathematisch dafür keine Lösung gebe. b würde einen um eins höheren Wert erhalten, als b bisher hatte. In unserem Beispiel hätte b also nun den Wert 5. Diese Zuweisung werden wir noch öfter im Zusammenhang mit Schleifen verwenden.

Doch nun wollen wir unser Beispiel etwas weiterführen. Dazu soll als nächstes die Farbe des Punktes A in Abhängigkeit seiner Lage verändert werden. Dafür definieren wir uns eine neue Funktion, die nicht einen einzelnen Wert liefert sondern einen dreidimensionalen Farbvektor:


farbe(c):=[sin(c),sin(c+2*pi/3),sin(c-2*pi/3)];
A.color=farbe(A.x);

Verschiebt man nun den Punkt A, so verändert sich seine Farbe, ja nach x-Koordinate des Punktes.
Bitte schalten Sie Java ein, um eine Cinderella-Konstruktion zu sehen.
Im nächsten Schritt wollen wir versuchen, einige Stütz-Balken in unseren Funktiongraphen einzubauen. Dazu brauchen wir ein neues Konzept in der Programmierung: Schleifen