MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

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)

math

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]

math

op(Ergebnis, 1), op(Ergebnis, 2)

math

Natürlich können wir auch mit viel größeren Werten experimentieren:

 

Summen(211, 379143)

math

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

 

_______________________________________________________________________________

 

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.