\mnb150ÿ{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fmodern\fprq1 Courier New;}{\f4\fswiss\fprq2 Arial;}{\f5\fswiss\fprq2 Helvetica;}}
{\colortbl\red0\green0\blue0;\red0\green0\blue255;\red128\green128\blue128;\red255\green0\blue0;\red0\green128\blue0;}
\deflang1031\pard\ri4\plain\f3\fs20\cf0\b ________________________________________________________________________________
\par
\par \plain\f3\fs20\cf0 Inhalt....: for-Schleifen in MuPAD
\par Kategorie.: Handwerkskasten
\par Mathematik: Programmierung
\par MuPAD.....: 3.0.0
\par Datum.....: 2002-08-14
\par Autoren...: Kai Gehrs
\par Funktionen: for, from, to, downto, in, random
\par \plain\f3\fs20\cf0\b ________________________________________________________________________________
\par \plain\f4\fs36\cf0\b
\par \plain\f4\fs40\cf0\b Elementare MuPAD-Funktionen:
\par for-Schleifen in MuPAD\plain\f4\fs24\cf4
\par
\par Zu den elementarsten Konzepten der imperativen Programmierung geh\'f6ren die for-Schleifen. Der
\par Umgang mit for-Schleifen in MuPAD soll im folgenden beschrieben werden.
\par \plain\f4\fs28\cf0
\par \plain\f4\fs28 Die Syntax von for-Schleifen und ihre Verwendung in MuPAD wollen wir nicht
\par allgemein auf technische Weise beschreiben (eine solche Beschreibung findet
\par sich in dem offiziellen \plain\f4\fs28\cf2 MuPAD Tutorium\plain\f4\fs28 , welches durch einen Maus-Klick auf
\par das Buchsymbol in der obigen Befehlsleiste einsehbar ist), sondern an Beispielen
\par kennenlernen.
\par
\par Als erstes wollen wir die Summe der Zahlen von 1 bis 1000 berechnen. Diese
\par Aufgabe k\'f6nnten wir nat\'fcrlich mit Hilfe der Funktion \plain\f4\fs28\cf3 sum\plain\f4\fs28 sehr leicht l\'f6sen. Hier
\par versuchen wir die Summe jedoch mit Hilfe einer for-Schleife zu berechnen.
\par
\par Zun\'e4chst ben\'f6tigen wir eine Variable, nennen wir sie \plain\f4\fs28\cf3 Summe\plain\f4\fs28 , in der wir die
\par jeweiligen Teilsummen von 1 bis j f\'fcr 1 <= j <= n zwischenspeichern. Sie sollte
\par am Anfang den Wert 0 haben (wir haben ja zu Beginn noch keine Zahlen addiert).
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe:= 0:
\par \pard\ri4\plain\f4\fs28
\par Jetzt schreiben wir die for-Schleife, mit deren Hilfe wir die ersten 1000 Zahlen
\par aufsummieren.
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}for i from 1 to 1000 do
\par \pard\li600\ri1\fi-300\plain\f3\fs28\cf3 Summe:= Summe + i:
\par end_for:
\par \pard\ri4\plain\f4\fs28
\par Schauen wir uns den Wert der Variablen \plain\f4\fs28\cf3 Summe \plain\f4\fs28 an:
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe
\par \pard\ri4\plain\f4\fs28
\par Das Ergebnis ist korrekt (wie man mit Hilfe der Funktion \plain\f4\fs28\cf3 sum \plain\f4\fs28 leicht \'fcberpr\'fcfen
\par kann).
\par
\par Bei der Programmierung von for-Schleifen ist zu beachten, dass wir stets
\par eine Laufvariable, in unserem Beispiel oben ist das die Variable \plain\f4\fs28\cf3 i\plain\f4\fs28 , verwenden,
\par die nach und nach jeden Wert eines festen Bereichs, in unserem Beispiel
\par die Zahlen von 1 bis 1000, annimmt. Dabei ist es m\'f6glich, den Bereich, den
\par die Variable \plain\f4\fs28\cf3 i\plain\f4\fs28 durchlaufen soll, mit Hilfe des "\plain\f4\fs28\cf3 from Anfangswert to Endwert\plain\f4\fs28 "
\par Konstruktes anzugeben. In unserem Fall ist der Anfangswert die Zahl 1, der
\par Endwert die Zahl 1000. Nachdem wir diese Formalit\'e4t erledigt haben, k\'f6nnen
\par wir im Schleifenk\'f6rper (der Bereich zwischen der Zeile "\plain\f4\fs28\cf3 for i from 1 to 1000 do\plain\f4\fs28 "
\par und der Zeile "\plain\f4\fs28\cf3 end_for\plain\f4\fs28 ") beliebige Berechnungen ausf\'fchren. In unserem Fall
\par addieren wir in jedem Schleifendurchlauf den derzeitigen Wert von \plain\f4\fs28\cf3 i\plain\f4\fs28 zu dem
\par aktuellen Wert von \plain\f4\fs28\cf3 Summe\plain\f4\fs28 , d.h. \plain\f4\fs28\cf3 Summe\plain\f4\fs28 wird in jedem Durchlauf genau
\par um den Wert von \plain\f4\fs28\cf3 i\plain\f4\fs28 erh\'f6ht. Der Wert, der in der Variablen \plain\f4\fs28\cf3 Summe \plain\f4\fs28 gespeichert
\par ist, nachdem \plain\f4\fs28\cf3 i\plain\f4\fs28 alle Werte von 1 bis 1000 durchlaufen hat, ist also in der Tat
\par die Summe der Zahlen von 1 bis 1000. Abschlie\'dfend bemerken wir noch,
\par dass wir eine for-Schleife immer mit Hilfe der Zeile "\plain\f4\fs28\cf3 end_for\plain\f4\fs28 " abschlie\'dfen
\par m\'fcssen, um MuPAD mitzuteilen, dass die for-Schleife zuende ist.
\par
\par Statt "\plain\f4\fs28\cf3 end_for\plain\f4\fs28 " k\'f6nnen wir auch einfach "\plain\f4\fs28\cf3 end\plain\f4\fs28 " schreiben.
\par
\par Nun wollen wir einige Varianten der obigen for-Schleife betrachten, die
\par alle auch die Summe der Zahlen von 1 bis 1000 berechnen.
\par
\par In der ersten Variante wollen wir bei der Summation mit 1000 beginnen
\par und bei 1 enden, also die Summe der Zahlen von 1000 bis 1 berechnen.
\par
\par Dazu m\'fcssen wir in der obigen for-Schleife nur die Rollen von 1 und 1000
\par vertauschen und \plain\f4\fs28\cf3 to\plain\f4\fs28 durch ein \plain\f4\fs28\cf3 downto\plain\f4\fs28 ("herunter bis") ersetzen - zuvor
\par muss nat\'fcrlich der Wert von \plain\f4\fs28\cf3 Summe\plain\f4\fs28 wieder auf 0 gesetzt werden, denn
\par sonst erhalten wir kein korrektes Ergebnis:
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe:= 0:
\par {\pntext\f1\'b7\tab}for i from 1000 downto 1 do
\par \pard\li600\ri1\fi-300\plain\f3\fs28\cf3 Summe:= Summe + i:
\par end_for:
\par \pard\ri4\plain\f4\fs28
\par Wir schauen uns den Wert erneut an:
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe
\par \pard\ri4\plain\f4\fs28
\par Dies ist der gleiche Wert, den wir schon oben berechnet haben.
\par
\par Anstatt die Laufvariable explizit von 1 bis 1000 oder von 1000 bis 1
\par laufen zu lassen, k\'f6nnen wir uns auch die Zahlen von 1 bis 1000
\par zuvor in eine Menge schreiben und die Laufvariable\plain\f4\fs28\cf3 i \plain\f4\fs28 dann alle
\par Werte der Menge durchlaufen lassen.
\par
\par Die Menge aller Zahlen von 1 bis 1000 erzeugen wir mit Hilfe des
\par Sequenzoperators \plain\f4\fs28\cf3 $\plain\f4\fs28 :
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}ZahlenMenge:= \{i $ i = 1..1000\}:
\par \pard\ri4\plain\f4\fs28
\par Hier ist der Doppelpunkt als Abschlu\'df der Eingabezeile wichtig, denn
\par wir sind nat\'fcrlich nicht daran interessiert, dass uns MuPAD diese
\par Menge tats\'e4chlich ausgibt.
\par
\par Die for-Schleife zur Berechnung der Summe der Zahlen von 1 bis
\par 1000 k\'f6nnen wir jetzt auch wie folgt schreiben:
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe:= 0:
\par {\pntext\f1\'b7\tab}for i in ZahlenMenge do
\par \pard\li600\ri1\fi-300\plain\f3\fs28\cf3 Summe:= Summe + i:
\par end_for:
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe
\par \pard\ri4\plain\f4\fs28
\par Im Unterschied zu den ersten beiden for-Schleifen haben wir hier den
\par MuPAD Befehl \plain\f4\fs28\cf3 in\plain\f4\fs28 verwendet: "\plain\f4\fs28\cf3 F\'fcr alle Zahlen in Zahlenmenge . . .\plain\f4\fs28 "
\par
\par Anstatt alle Zahlen in einer Menge zu speichern und diese von der
\par Laufvariable durchlaufen zu lassen, k\'f6nnen wir die Zahlen auch in
\par eine Liste schreiben. Die for-Schleife k\'f6nnen wir f\'fcr diese Situation
\par unver\'e4ndert \'fcbernehmen:
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}ZahlenListe:= [i $ i = 1..1000]:
\par {\pntext\f1\'b7\tab}Summe:= 0:
\par {\pntext\f1\'b7\tab}for i in ZahlenMenge do
\par \pard\li600\ri1\fi-300\plain\f3\fs28\cf3 Summe:= Summe + i:
\par end_for:
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Summe
\par \pard\ri4\plain\f4\fs28
\par Im Kontext unserer mehr oder weniger trivialen Summation scheint es
\par nat\'fcrlich wenig Sinn zu machen, die Zahlen von 1 bis 1000 zuvor in
\par einer Menge oder in einer Liste zu speichern.
\par
\par Diese M\'f6glichkeit wird aber umso n\'fctzlicher, wenn wir z.B. 1000
\par Zufallszahlen aus dem Bereich von 1 bis 1000 aufaddieren m\'f6chten.
\par Die Zufallszahlen k\'f6nnen wir uns dann zuvor bequem erzeugen und
\par in eine Liste schreiben und anschlie\'dfend alle Elemente der Liste
\par aufaddieren.
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}Zufall:= random(1..1000):
\par {\pntext\f1\'b7\tab}ZufallsListe:= [Zufall() $ i = 1..1000]:
\par {\pntext\f1\'b7\tab}Summe:= 0:\plain\f4\fs28\cf3
\par \plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}for i in ZufallsListe do
\par \pard\li600\ri1\fi-300\plain\f3\fs28\cf3 Summe:= Summe + i:
\par end_for:
\par Summe
\par \pard\ri4\plain\f4\fs28
\par Das Mengenkonstrukt bietet sich dann an, wenn wir doppelt auftauchende
\par Zahlen nicht mehrmals aufaddieren wollen. In einer Menge sind alle
\par Elemente verschieden und werden Elemente mehrfach in eine Menge
\par geschrieben, so werden mehrfache Vorkommen ignoriert und zu einem
\par einzelnen Vorkommen der Zahl zusammengestrichen.
\par
\par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}ZufallsMenge:= \{Zufall() $ i = 1..1000\}:
\par {\pntext\f1\'b7\tab}Summe:= 0:\plain\f4\fs28\cf3
\par \plain\f3\fs28\cf3 {\pntext\f1\'b7\tab}for i in ZufallsMenge do
\par \pard\li600\ri1\fi-300\plain\f3\fs28\cf3 Summe:= Summe + i:
\par end_for:
\par Summe
\par \pard\ri4\plain\f4\fs28
\par \plain\f3\fs20\cf0\b _______________________________________________________________________________
\par \plain\f4\fs22\cf0
\par \plain\f4\fs22\cf4\b Anmerkungen:\plain\f4\fs22\cf4
\par \plain\f4\fs20\cf4\b 1\plain\f4\fs20\cf4 . Weitere Anregungen finden Sie in der Buchreihe \plain\f4\fs20\cf3 Mathematik 1 x anders\plain\f4\fs20\cf4 . In dieser Reihe
\par wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gel\'f6st. Die
\par B\'fccher k\'f6nnen unter \plain\f5\fs20\cf1 www.schule.mupad.de/literatur\plain\f4\fs20\cf4 kostenfrei kopiert werden.
\par \plain\f4\fs20\cf1
\par \plain\f3\fs20\cf0\b _______________________________________________________________________________
\par
\par
\par }