/* Sie lernen in diesem Beispiel - Exponentiation mit ** - die Verwendung von Arrays - die Verwendung von mathematischen Funktionen (z.B. Math.min) - die Verwendung selbstgeschriebener Funktionen (Methoden) - den Unterschied zwischen Funktionen und Arrays */ module A(int ordnung); protected void init() [ Axiom ==> A(0); ] // Als Bezug: ohne Arrays und Funktionen public void run0() [ a:A ==> F(0.8**a[ordnung]) [ RU(30) RH(90) A(a[ordnung]+1) ] [ RU(-30) RH(90) A(a[ordnung]+1) ]; ] const float[] laenge = {1, 1, 0.5, 0.2}; const float[] winkel = {40, 50, 80, 100}; public void run1() [ a:A, (a[ordnung] < 4) ==> F(laenge[a[ordnung]]) [ RU( winkel[a[ordnung]]) RH(90) A(a[ordnung]+1) ] [ RU(-winkel[a[ordnung]]) RH(90) A(a[ordnung]+1) ]; ] public void run2() [ a:A(o) ==> F(laenge[Math.min(a[ordnung], 3)] * random(0.6, 1.4)) [ RU( winkel[Math.min(a[ordnung], 3)]) RH(90) A(a[ordnung]+1) ] [ RU(-winkel[Math.min(a[ordnung], 3)]) RH(90) A(a[ordnung]+1) ]; ] // Achtung: hier wird eine Methode (Funktion) genutzt, die "laenge" heisst. // Diese Methode darf nicht mit dem Array verwechselt werden. // Der Aufruf einer Methode erfolgt so: // methodenName(parameter) // die Ansprache eines Array-Elements erfolgt so: // arrayname[index_des_feldes] // Definition der Methode mit Namen "laenge" private float laenge(int o) { if (o < 2) return 1; else if (o == 2) return 0.5; else return 0.8**o; } // public method: verwendet die selbstgeschriebene Methode "laenge" public void run3() [ a:A ==> F(laenge(a[ordnung])) [ RU( winkel[Math.min(a[ordnung], 3)]) RH(90) A(a[ordnung]+1) ] [ RU(-winkel[Math.min(a[ordnung], 3)]) RH(90) A(a[ordnung]+1) ]; ]