________________________________________________________________________________
Inhalt....: Einfache Prozeduren
Kategorie.: Handwerkskasten
Mathematik: Programmierung
MuPAD.....: 3.0.0
Datum.....: 2002-08-14
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: if, then, proc, mod
________________________________________________________________________________
Elementare MuPAD-Funktionen:
Einfache Prozeduren in MuPAD
Wir wollen lernen, wie man in MuPAD einfache eigene Prozeduren definieren kann.
In den Notebooks zur if-Anweisung und zu for-Schleifen im Handwerkskasten
haben wir gelernt, wie man mit if Bedinungen abfragt und wie man Schleifen
z.B. zur Summation verwenden kann. Hier wollen wir diese einzelnen
Programmkonstrukte zu einer richtigen kleinen Prozedur zusammensetzen.
Aufgabe soll es sein, eine Prozedur zu schreiben, die bei Eingabe zweier
Werte u und und o einerseits die Summe aller ungeraden Zahlen im Bereich
von u bis o und andererseits die Summe alle geraden Zahlen im Bereich von u
bis o ausgibt.
Als erstes müssen wir uns einen Namen für unsere Prozedur ausdenken:
Wir nennen sie schlicht Summen.
Die Prozedur Summen muss die beiden Werte u und o, die den betrachteten
Zahlbereich eingrenzen, als Argumente erhalten.
Summen:= proc(u, o)
begin
return();
end_proc:
Dies ist das Grundgerüst für unsere Prozedur. Wir leiten die Prozedur mit dem
Befehl proc(u, o) ein. Damit teilen wir MuPAD mit, dass wir eine Prozedur
definieren, die zwei Argumente u und o übergeben bekommt, mit denen sie
dann Berechnungen jeglicher Art ausführen kann. Bevor wir aber mit
irgendwelchen Berechnungen beginnen können, müssen wir den Befehl
begin in den Körper der Prozedur hineinschreiben. Nach dem Befehl begin
können wir dann mit unserem eigentlichen Programm starten.
Bisher steht nach dem Befehl begin nur der Befehl return( ). Dieser Befehl
dient dazu, das, was unsere Prozedur als Ergebnis berechnet hat,
zurückzugeben (etwa so, als wenn man nach einer längeren Rechnung auf
einem Blatt Papier das Ergebnis zwecks Hervorhebung unterstreicht).
Bis jetzt lassen wir innerhalb der Prozedur, also nach dem Befehl begin,
noch keine Berechnungen durchführen. Daher haben wir auch noch kein
Ergebnis, das wir mit Hilfe von return zurückgeben lassen könnten.
Aus diesem Grund haben wir return( ) geschrieben. Das tatsächliche
Ergebnis oder die Ergebnisse, die am Ende zurückgegeben werden
sollen, schreiben wir dann einfach in die Klammern hinein.
Wie muss nun der Teil der Prozedur aussehen, der die entsprechenden
Summen der geraden bzw. ungeraden Zahlen in der Menge {u, . . . ,o}
berechnet?
Zunächst benötigen wir eine for-Schleife, deren Laufvariable (wir nennen
sie wieder i) alle Werte von u bis o durchläuft.
Summen:= proc(u, o)
begin
for i from u to o do
end_for;
return();
end_proc:
Soweit so gut! Die Laufvariable i der Schleife ist nun eine sogenannte
"lokale Variable" der Prozedur. Stellen wir uns vor, wir hätten der Variablen
i in einer vorherigen Berechnung den Wert 7 zugewiesen. Dann möchten
wir doch trotzdem, dass i innerhalb unserer Prozedur keinen Wert besitzt,
sondern, wie beabsichtigt, als Variable frei von Werten den Zahlbereich
von u bis o durchläuft. Das es sich bei i um eine lokale Variable der
Prozedur Summen handeln soll, teilen wir MuPAD wie folgt mit:
Summen:= proc(u, o)
local i;
begin
for i from u to o do
end_for;
return();
end_proc:
An derjenigen Stelle, an die wir die Variable i geschrieben haben, können
wir auch alle weiteren lokalen Variablen, die wir im Laufe unserer Prozedur
noch benötigen, nacheinander einfügen.
Als nächstes benötigen wir zwei lokale Variablen Summe1 und Summe2 für
die Summe aller geraden Zahlen und die Summe aller ungeraden Zahlen.
Diese Variablen müssen wir (wie schon im Notebook zu for-Schleifen) am
Anfang, d.h. vor der for-Schleife, auf den Wert 0 setzen
Summen:= proc(u, o)
local i, Summe1, Summe2;
begin
Summe1:= 0;
Summe2:= 0;
for i from u to o do
end_for;
return();
end_proc:
Jetzt müssen wir die for-Schleife mit Leben füllen. Zur Erinnerung: Wir
wollen die Summe aller geraden und aller ungeraden Zahlen von u bis o
berechnen. Daher müssen wir bei jedem Durchlauf der Schleife zunächst
testen, ob i zum aktuellen Zeitpunkt den Wert einer geraden oder einer
ungeraden Zahl besitzt. Abfragen erledigen wir mit if-Anweisungen. Wie
schon im Notebook zu if-Anweisungen rechnen wir i mod 2. Ist das
Ergebnis 0, so ist i eine gerade Zahl, ist es 1, so ist i eine ungerade Zahl.
Summen:= proc(u, o)
local i, Summe1, Summe2;
begin
Summe1:= 0;
Summe2:= 0;
for i from u to o do
if i mod 2 = 0 then
else
end_if;
end_for;
return();
end_proc:
Jetzt müssen wir die Lücken in der if-Anweisung nur noch mit den
entsprechenden Summationsvorschriften füllen.
Summen:= proc(u, o)
local i, Summe1, Summe2;
begin
Summe1:= 0;
Summe2:= 0;
for i from u to o do
if i mod 2 = 0 then
Summe1:= Summe1 + i;
else
Summe2:= Summe2 + i;
end_if;
end_for;
return();
end_proc:
Wir haben fast alles geschafft. Das einzige, was noch fehlt, ist die
Rückgabe der beiden Ergebnisse. Dazu schreiben wir die Variablen
Summe1 und Summe2 einfach durch ein Komma getrennt in die bisher
leeren Klammern nach dem Befehl return.
Summen:= proc(u, o)
local i, Summe1, Summe2;
begin
Summe1:= 0;
Summe2:= 0;
for i from u to o do
if i mod 2 = 0 then
Summe1:= Summe1 + i;
else
Summe2:= Summe2 + i;
end_if;
end_for;
return(Summe1, Summe2);
end_proc:
Fertig! Jetzt können wir unsere Prozedur an einigen Beispielen
erproben:
Summen(23, 567)
![]()
d.h. die Summe aller geraden Zahl von 23 bis 567 ist 80240, die Summe
aller ungeraden Zahlen aus diesem Bereich ist 80535.
Auf die Einzelergebnisse können wir entweder mit dem Indexoperator [ ]
zugreifen oder mit Hilfe des Befehls op.
Ergebnis:= Summen(23, 567):
Ergebnis[1], Ergebnis[2]
![]()
op(Ergebnis, 1), op(Ergebnis, 2)
![]()
Natürlich können wir auch mit viel größeren Werten experimentieren:
Summen(211, 379143)
![]()
Diese Rechnung bedarf schon einiger Zeit.
Viele Beispiele zu weiteren Prozeduren finden sich auch in der
Materialsammlung unter
schule.mupad.de/material
Dort bietet sich die Möglichkeit einer Volltextsuche innerhalb aller
zum Download bereitstehenden MuPAD Notebooks. Sucht man an
dieser Stelle nach dem Begriff proc, so taucht eine Vielzahl von
Notebooks auf, in denen eigene Prozeduren vorgestellt und/oder
benutzt werden. Beachten Sie bitte auch das Notebook
Einfache_Prozeduren_mit_Fehlerabfragen
im Handwerkskasten.
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de
_______________________________________________________________________________