Maxima

Schleifen - Programmierung

Für Schleifen / Iterationen stehen im Sinne einer funktionalen Programmierung in MAXIMA die üblichen 3 Elemente einer Zählerschleife (FOR - TO - DO), kopfgesteuerten Schleife (WHILE - DO) und fußgesteuerten Schleife (REPEAT - UNTIL) zur Verfügung. In MAXIMA beginnen sie meistens mit <FOR> und dem auszuführenden Teil wird immer <DO> vorangesetzt.
Programmierung in MAXIMA hat den großen Vorteil, dass man auf die bereits eingebauten mathematischen Funktionsbibliotheken sehr leicht zugreifen kann. Schwächen liegen in den sehr einfach gestalteten Ein- und Ausgabemöglichkeiten. Für Spezialisten eröffnet sich in MAXIMA zudem noch die Möglichkeit, in der Programmiersprache, in der MAXIMA selbst geschrieben ist (Common Lisp), fehlende Teile zu ergänzen!

FOR <Variable>: Anfangswert STEP Schrittweite THRU Endwert DO [ ... diverse Befehle ... ] Klassische Zählerschleife, die Zahl der Schleifendurchläufe ist festgelegt.
FOR <Variable>: Anfangswert STEP Schrittweite WHILE <Bedingung> DO [ ... diverse Befehle ... ] Kopfgesteuerte Schleife, Zahl der Schleifendurchläufe variabel - Abbruch, wenn eine Bedingung erfüllt wird. Diese Bedingung wird immer vor dem Schleifendurchlauf überprüft.
FOR <Variable>: Anfangswert STEP Schrittweite UNLESS <Bedingung> DO [ ... diverse Befehle ... ] Fußgesteuerte Schleife, wie die kopfgesteuerte Schleife, aber: die Bedingung wird erst nach dem Schleifendurchlauf überprüft.
WHILE <Bedingung> DO [... diverse Befehle ...] Kopfgesteuerte Schleife, wenn keine Zählervariable benötigt wird.
UNLESS <Bedingung> DO [... diverse Befehle ...] Fußgesteuerte Schleife, wenn keine Zählervariable benötigt wird.

Hinweis - lokale Variable, die in einem Programm vorkommen, können (sollten!) nach der Anweisung block() in einer Liste angeführt werden, wenn nötig mit Belegung.
schleife(n):=block([i:0, summe:0], ...) übergibt für die Variable n den Wert an das Programm schleife. Dieses verwendet intern die lokalen Variablen i und summe, die zudem noch mit Werten belegt sind.

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!

Problem: Nach wie vielen Jahren verdoppelt sich ein Kapital k bei p Prozent jährlicher Verzinsung?

Schreiben Sie ein Programm zur Berechnung der Verzinsung! Verwenden Sie Schleifen vom Typ WHILE - DO bzw. UNLESS - DO.

 

Download der MAXIMA-Datei.

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-Codierung

Ü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, ...

Chaos

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

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

Sierpinski1

Sierpinski2

Download der MAXIMA-Datei zu den Problemstellungen.

© PH-NOe, letzte Änderung am 10. Mai 2008, erstellt von Walter Wegscheider