________________________________________________________________________________
Inhalt....: for-Schleifen in MuPAD
Kategorie.: Handwerkskasten
Mathematik: Programmierung
MuPAD.....: 3.0.0
Datum.....: 2002-08-14
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: for, from, to, downto, in, random
________________________________________________________________________________
Elementare MuPAD-Funktionen:
for-Schleifen in MuPAD
Zu den elementarsten Konzepten der imperativen Programmierung gehören die for-Schleifen. Der
Umgang mit for-Schleifen in MuPAD soll im folgenden beschrieben werden.
Die Syntax von for-Schleifen und ihre Verwendung in MuPAD wollen wir nicht
allgemein auf technische Weise beschreiben (eine solche Beschreibung findet
sich in dem offiziellen MuPAD Tutorium, welches durch einen Maus-Klick auf
das Buchsymbol in der obigen Befehlsleiste einsehbar ist), sondern an Beispielen
kennenlernen.
Als erstes wollen wir die Summe der Zahlen von 1 bis 1000 berechnen. Diese
Aufgabe könnten wir natürlich mit Hilfe der Funktion sum sehr leicht lösen. Hier
versuchen wir die Summe jedoch mit Hilfe einer for-Schleife zu berechnen.
Zunächst benötigen wir eine Variable, nennen wir sie Summe, in der wir die
jeweiligen Teilsummen von 1 bis j für 1 <= j <= n zwischenspeichern. Sie sollte
am Anfang den Wert 0 haben (wir haben ja zu Beginn noch keine Zahlen addiert).
Summe:= 0:
Jetzt schreiben wir die for-Schleife, mit deren Hilfe wir die ersten 1000 Zahlen
aufsummieren.
for i from 1 to 1000 do
Summe:= Summe + i:
end_for:
Schauen wir uns den Wert der Variablen Summe an:
Summe
![]()
Das Ergebnis ist korrekt (wie man mit Hilfe der Funktion sum leicht überprüfen
kann).
Bei der Programmierung von for-Schleifen ist zu beachten, dass wir stets
eine Laufvariable, in unserem Beispiel oben ist das die Variable i, verwenden,
die nach und nach jeden Wert eines festen Bereichs, in unserem Beispiel
die Zahlen von 1 bis 1000, annimmt. Dabei ist es möglich, den Bereich, den
die Variable i durchlaufen soll, mit Hilfe des "from Anfangswert to Endwert"
Konstruktes anzugeben. In unserem Fall ist der Anfangswert die Zahl 1, der
Endwert die Zahl 1000. Nachdem wir diese Formalität erledigt haben, können
wir im Schleifenkörper (der Bereich zwischen der Zeile "for i from 1 to 1000 do"
und der Zeile "end_for") beliebige Berechnungen ausführen. In unserem Fall
addieren wir in jedem Schleifendurchlauf den derzeitigen Wert von i zu dem
aktuellen Wert von Summe, d.h. Summe wird in jedem Durchlauf genau
um den Wert von i erhöht. Der Wert, der in der Variablen Summe gespeichert
ist, nachdem i alle Werte von 1 bis 1000 durchlaufen hat, ist also in der Tat
die Summe der Zahlen von 1 bis 1000. Abschließend bemerken wir noch,
dass wir eine for-Schleife immer mit Hilfe der Zeile "end_for" abschließen
müssen, um MuPAD mitzuteilen, dass die for-Schleife zuende ist.
Statt "end_for" können wir auch einfach "end" schreiben.
Nun wollen wir einige Varianten der obigen for-Schleife betrachten, die
alle auch die Summe der Zahlen von 1 bis 1000 berechnen.
In der ersten Variante wollen wir bei der Summation mit 1000 beginnen
und bei 1 enden, also die Summe der Zahlen von 1000 bis 1 berechnen.
Dazu müssen wir in der obigen for-Schleife nur die Rollen von 1 und 1000
vertauschen und to durch ein downto ("herunter bis") ersetzen - zuvor
muss natürlich der Wert von Summe wieder auf 0 gesetzt werden, denn
sonst erhalten wir kein korrektes Ergebnis:
Summe:= 0:
for i from 1000 downto 1 do
Summe:= Summe + i:
end_for:
Wir schauen uns den Wert erneut an:
Summe
![]()
Dies ist der gleiche Wert, den wir schon oben berechnet haben.
Anstatt die Laufvariable explizit von 1 bis 1000 oder von 1000 bis 1
laufen zu lassen, können wir uns auch die Zahlen von 1 bis 1000
zuvor in eine Menge schreiben und die Laufvariable i dann alle
Werte der Menge durchlaufen lassen.
Die Menge aller Zahlen von 1 bis 1000 erzeugen wir mit Hilfe des
Sequenzoperators $:
ZahlenMenge:= {i $ i = 1..1000}:
Hier ist der Doppelpunkt als Abschluß der Eingabezeile wichtig, denn
wir sind natürlich nicht daran interessiert, dass uns MuPAD diese
Menge tatsächlich ausgibt.
Die for-Schleife zur Berechnung der Summe der Zahlen von 1 bis
1000 können wir jetzt auch wie folgt schreiben:
Summe:= 0:
for i in ZahlenMenge do
Summe:= Summe + i:
end_for:
Summe
![]()
Im Unterschied zu den ersten beiden for-Schleifen haben wir hier den
MuPAD Befehl in verwendet: "Für alle Zahlen in Zahlenmenge . . ."
Anstatt alle Zahlen in einer Menge zu speichern und diese von der
Laufvariable durchlaufen zu lassen, können wir die Zahlen auch in
eine Liste schreiben. Die for-Schleife können wir für diese Situation
unverändert übernehmen:
ZahlenListe:= [i $ i = 1..1000]:
Summe:= 0:
for i in ZahlenMenge do
Summe:= Summe + i:
end_for:
Summe
![]()
Im Kontext unserer mehr oder weniger trivialen Summation scheint es
natürlich wenig Sinn zu machen, die Zahlen von 1 bis 1000 zuvor in
einer Menge oder in einer Liste zu speichern.
Diese Möglichkeit wird aber umso nützlicher, wenn wir z.B. 1000
Zufallszahlen aus dem Bereich von 1 bis 1000 aufaddieren möchten.
Die Zufallszahlen können wir uns dann zuvor bequem erzeugen und
in eine Liste schreiben und anschließend alle Elemente der Liste
aufaddieren.
Zufall:= random(1..1000):
ZufallsListe:= [Zufall() $ i = 1..1000]:
Summe:= 0:
for i in ZufallsListe do
Summe:= Summe + i:
end_for:
Summe
![]()
Das Mengenkonstrukt bietet sich dann an, wenn wir doppelt auftauchende
Zahlen nicht mehrmals aufaddieren wollen. In einer Menge sind alle
Elemente verschieden und werden Elemente mehrfach in eine Menge
geschrieben, so werden mehrfache Vorkommen ignoriert und zu einem
einzelnen Vorkommen der Zahl zusammengestrichen.
ZufallsMenge:= {Zufall() $ i = 1..1000}:
Summe:= 0:
for i in ZufallsMenge do
Summe:= Summe + i:
end_for:
Summe
![]()
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe
wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die
Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.
_______________________________________________________________________________