DERIVE 6

Programmierung

DERIVE erlaubt eine streng funktionale Programmierung mit einigen einfachen Strukturbausteinen. Bereits die Befehle VECTOR und ITERATE(S) erlauben schleifenähnliche bzw. rekursive Strukturen. Daneben gibt es mit LOOP und IF weitere Konstrukte, die die klassische programmiertechnische Schleife und Verzweigung zulassen. Funktionen mit Parameterübergabe sind sowieso ein DERIVE-übliches Merkmal. Damit kann man bereits recht ausgefeilte Programme erzeugen, die durch die Verwendung der DERIVE-internen Befehle und Grafikmöglichkeiten in manchen Bereichen klassischen Programmiersprachen einiges voraus haben (zB. lange Ganzzahlen etc.). Schwächen liegen in den sehr einfach gehaltenen Ein- und Ausgabemöglichkeiten.

Hinweis - alle Variablen die als lokale Variable in einem Programm vorkommen, müssen im Funktionsaufruf angeführt werden, wobei die Parameter, die vom Benutzer eingegeben werden müssen, am Anfang stehen müssen. Einzige Ausnahme sind Zählparameter in den VECTOR-, SELECT- und ITERATE-Befehlen. Daneben können innerhalb der Funktion auch globale Variable verwendet werden.

Befehle:

PROG PROG(...) kapselt ein Programm in DERIVE. Die verschiedenen Befehle werden durch Beistrich voneinander getrennt.
EXIT Die Argumente eines Programms werden der Reihe nach abgearbeitet, bis der Befehl erreicht ist oder ein EXIT- bzw. RETURN–Befehl erreicht wird. Bei EXIT wird das Programm verlassen - der Befehl kann auch bei LOOP-Schleifen verwendet werden.
RETURN RETURN(...) beendet ein Programm und gibt Ergebnisse an das Algebrafenster zurück.
LOOP() ist die DERIVE-Anweisung für eine Schleife. Die Befehle innerhalb der Klammer - wieder durch Beistrich getrennt - werden solange ausgeführt, bis eine Abbruchbedingung (EXIT oder RETURN) erreicht wird.
IF() Klassische Verzweigung: IF(Bedingung, Befehl1, Befehl2), meherere Befehle können als Befehlsvektor [Befehl1, Befehl2, ...] zusammengefasst werden.

Tips - Kommentare können mit "@ ... " eingefügt werden (Anführungszeichen plus einleitendes @-Zeichen).
Statt i:=i+.. (i:=i-.., ...) kann auch vereinfacht i:+.., i:-.., i:*.., i:/.. geschrieben werden.


Beispiele:

Problem: Aufsummieren aller ganzen Zahlen von 1 bis n - gelöst über ein kleines Programm mit einer Schleife (LOOP). Die Variable n wird eingegeben, i und summe werden definiert (als lokale Variable) und mit Werten belegt.

Schleife

Tip - es empfiehlt sich, die Eingabezeile auf mehrzeilig zu stellen. Neue Zeilen erreicht man in der Eingabezeile über ALT + RETURN.

Problem: Berechnen des EAN-Codes (Europäische Artikel Nummer). EAN ermöglicht eine eindeutige Kennzeichnung von Artikeln mit Hilfe einer Zahl (12-stellig). Um die korrekte Übertragung zu gewährleisten, wird eine Prüfziffer ergänzt. Diese berechnet sich aus:

  1. Von rechts nach links werden die Stellen abwechselnd mit 3 und 1 gewichtet.
  2. Die jeweiligen Produkte aus den beiden Zahlen werden errechnet und summiert.
  3. Die Prüfziffer ist der volle Rest zur nächsthöheren durch 10 teilbaren Zahl (Modulo 10)

Berechne (kontrolliere) die Prüfziffer eines eingegebenen EAN-Codes!

EAN-Code

Übung - ISBN-Code:

Die ISBN - Internationale Standard Buch Nummer - dient dazu, auf einfache Art einen Buchtitel weltweit zu identifizieren. Eine ISBN ist immer 10stellig, wobei die 10te Stelle wieder als Prüfziffer fungiert. Die Regel dafür lautet:

  1. Alle Ziffern werden von rechts nach links, beginnend mit der vorletzten Ziffer (also vor der Stelle der Prüfziffer), mit ihrer Position in der Ziffernfolge gewichtet, d.h. die vorletzte Ziffer wird mit 2, die nächste mit 3, usw. multipliziert.
  2. Die Produkte werden summiert.
  3. Der volle Rest zum nächst niedrigeren Vielfachen von 11 (modulo 11) wird errechnet.
  4. Die Prüfziffer ist die Differenz des Restes zu 11 (ist die Differenz 10, gilt p = X, ist die Differenz 11, gilt p = 0)

Schreiben Sie ein Programm zur Berechnung der Prüfziffer!

 

Button

Problem: Chaos und Sierpinski-Dreieck. Zeichne in der Ebene ein gleichseitiges Dreieck mit A(0/0), B(1/0). Lege einen beliebigen Startpunkt P0(xp/yp) in der Ebene fest.

  • Wähle eine der drei Ecken des Dreiecks zufällig = Variable ecke.
  • Halbiere die Strecke ecke bis P0
  • Der Mittelpunkt ist der nächste Punkt P1.
  • Wiederhole diese Vorgang rekursiv - wieder Ecke zufällig aussuchen, mit P1 verbinden, Mittelpunkt, ...

Hinweis - RANDOM(1) wird zu einer Zufallszahl im Interval [0, 1) vereinfacht. RANDOM(n) wird für n>1 ganzzahlig zu einer zufälligen ganzen Zahl im Intervall [0, n) vereinfacht.

Das Ergebnis des Chaos für 100 bzw. 5000 Iterationen ergibt das bekannte Sierpinski-Dreieck (unter anderem für Antennen in Handys eingesetzt).

Download der DERIVE-Datei zu den drei Problemstellungen.

© PI-NOe, letzte Änderung am 5. Mai 2005, erstellt von Mag. Walter Wegscheider