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

________________________________________________________________________________

 

Inhalt....: Elementare Datenstrukturen in MuPAD - Arrays  

Kategorie.: Handwerkskasten

Mathematik: Programmierung

MuPAD.....: 3.0.0

Datum.....: 2002-02-06

Autoren...: Kai Gehrs <acrowley@mupad.de>

Funktionen: array, nops, op

________________________________________________________________________________

 

Elementare Datenstrukturen in MuPAD:

Arrays

 

Arrays sind nicht nur für den Bereich der Informatik wichtige Datenstrukturen. Aus diesem

Grunde wollen wir Arrays auch als nützliche Datenstruktur in MuPAD kennenlernen.

 

Wir definieren einen Array A mit Hilfe des Befehls array. Zunächst wollen

wir nur eindimensionale Arrays betrachten (zu zweidimensionalen Arrays

kommen wir weiter unten). Dabei erhält array stets mindestens ein

Argument und nach Bedarf auch zwei Argumente:

 

1. Argument: Eine Sequenz ganzer Zahlen unterster_Index..oberster_Index,

                       die die Indizierung und die Größe des Arrays festlegt

 

2. Argument: Eine Liste mit den Elementen, mit denen der Array

                       initialisiert werden soll. Dieses Argument ist optional

                       und muß nicht zwingend mit angegeben werden.

 

Rückgabewert der Funktion array ist ein Array der festgelegten

Größe und evtl. mit den bereits angegebenen Elementen.

 

Wir definieren einen Array A mit 4 Plätzen, die wir mit 1 bis 4

indizieren:

 

A:= array(1..4)

+-                      -+

| ?[1], ?[2], ?[3], ?[4] |

+-                      -+

 

 

Wie wir sehen, sind die einzelnen Zellen des Arrays noch nicht mit

irgendwelchen Werten belegt. Nachträglich können wir die Zellen von A

mit beliebigen Werten mit Hilfe des Indexoperators [ ] initialisieren:

 

A[1]:= PI:

A[2]:= E:

A[3]:= 1/2:

A[4]:= a:

 

Um zu sehen, ob wir das Beabsichtigte erreicht haben, lassen wir den

Array A erneut von MuPAD ausgeben:

 

A

math

Selbstverständlich hätten wir die Zellen des Arrays auch mit den

Werten -2 bis 1 indizieren können:

 

B:= array(-2..1)

+-                        -+

| ?[-2], ?[-1], ?[0], ?[1] |

+-                        -+

 

Bei der Initialisierung des Arrays B müssen wir jetzt natürlich

auch die entsprechenden Platznummern verändern:

 

B[-2]:= PI:

B[-1]:= E:

B[ 0]:= 1/2:

B[ 1]:= a:

 

Wir erhalten rein äußerlich das gleiche Objekt, wie wir es schon in

A definiert haben:

 

B

math

Wollen wir allerdings jeweils das dritte Element der beiden Arrays A

und B auslesen, so müssen wir A[3] und, im Gegensatz dazu, B[0]

betrachten.

 

A[3], B[0]

math

Dies mag auf den ersten Blick ein wenig wie "abstract nonsens"

aussehen, aber aus programmiertechnischen Gründen ist es

manchmal hilfreich, gewisse Plätze eines Arrays auch mit negativen

Zahlen indizieren zu können.

 

Wie man einen Array direkt mit Hilfe einer Liste zum Zeitpunkt der

Erzeugung initialisiert, sehen wir an dem Beispiel des Arrays C:

 

C:= array(1..7, [23, 21, 45, 32, 33, 12, 8])

math

Die Anzahl der Elemente eines Arrays bestimmt man mit dem Befehl

nops. nops erhält ein Argument, nämlich den Array, dessen Element-

anzahl zu bestimmen ist. Als Rückgabewert erhalten wir stets eine

nicht negative ganze Zahl.

 

Für unsere Arrays A, B und C erhalten wir:

 

nops(A), nops(B), nops(C)

math

Mit Hilfe des Befehls op können wir die Operanden eines Arrays

extrahieren. op erhält stets ein Argument, in unserem Fall einen Array.

Der Rückgabewert ist dann die Sequenz der Elemente des Arrays.

 

Wir testen dies an unseren Beispielen:

 

op(A);

op(B);

op(C)

math

math

math

Diese Funktion ist vor allem dann nützlich, wenn wir beispielsweise die

Elemente eines Arrays in eine Menge oder in eine Liste einfügen

möchten:

 

L:= [op(A)]

math

L bezeichnet jetzt eine Liste mit den Elementen des Arrays...

 

M:= {op(A)}

math

...und M eine Menge der Elemente von A. Auf diese Weise muss man

nicht noch einmal alle Elemente separat in eine andere Datenstruktur

übertragen.

 

Mit Hilfe des Befehls delete können Elemente eines Arrays gelöscht

werden. Die Funktion delete unterscheidet sich ein wenig in der

Verwendung von anderen MuPAD Funktionen.

 

Die Befehlszeile delete A[ i_1 ], A[ i_2 ], usw. löscht die Elemente

des Arrays, die auf den Plätzen i_1, i_2, usw. gespeichert sind.

 

Wir wollen das erste und das dritte Element in A löschen:

 

delete A[1], A[3]:

 

Wie sieht A nun aus?

 

A

math

Die erste und dritte Stelle des Arrays ist nun nicht mehr besetzt.

Wir weisen ihnen neue Werte zu:

 

A[1]:= 12^2:

A[3]:= a+b:

A

math

Neben den sogenannten eindimensionalen Arrays, wie wir sie bis

hierher betrachtet haben, gibt es auch zweidimensionale Arrays.

Man stellt sich diese am besten wie Matrizen vor - allerdings mit dem

Unterschied, dass Arrays im Gegensatz zu Matrizen keine algebraische

Struktur bilden.

Wir definieren zweidimensionale Arrays ebenfalls mit dem Befehls array.

Dabei erhält array stets mindestens zwei Argumente, bei Bedarf auch

drei Argumente:

 

1. Argument: Eine Sequenz ganzer Zahlen unterster_Index..oberster_Index,

                       die die Zeilenindizierung und die Zeilenzahl des Arrays

                       festlegt.

 

2. Argument: Eine Sequenz ganzer Zahlen unterster_Index..oberster_Index,

                       die die Spaltenindizierung und die Spaltenzahl des Arrays

                       festlegt.

 

3. Argument: Eine Liste mit den Elementen, mit denen der Array

                       initialisiert werden soll. Dieses Argument ist optional

                       und muss nicht zwingend mit angegeben werden.

 

Rückgabewert der Funktion array ist ein Array der festgelegten

Größe und gegebenenfalls mit den bereits angegebenen Elementen.

 

Ein zweidimensionales Array A mit drei Zeilen und zwei Spalten erzeugen

wir also z.B. über

 

A:= array(1..3, 1..2)

+-                  -+

|  ?[1, 1], ?[1, 2]  |

|                    |

|  ?[2, 1], ?[2, 2]  |

|                    |

|  ?[3, 1], ?[3, 2]  |

+-                  -+

 

 

Die Einträge werden nun ganz analog zu dem Vorgehen von oben

initialisiert - nur müssen wir dieses Mal entsprechend Zeilen- und

Spaltenindex eines Platzes angeben:

 

A[1,1]:= 21:      A[1,2]:= 12:

A[2,1]:= 23:      A[2,2]:= 2*PI:

A[3,1]:= sqrt(2): A[3,2]:= E^2:

 

Die Ausgabe des Arrays zeigt uns, dass wir unser Ziel erreicht haben:

 

A

math

Alle anderen Operationen, die wir oben beschrieben haben, können

wir selbstverständlich auch auf zweidimensionalen Arrays durchführen:

 

nops(A);

op(A);

delete A[1,2], A[2,2], A[3,2]:

A

math

math

math

 

________________________________________________________________________________

 

Aufgaben:

1. Definieren Sie in MuPAD die folgenden Arrays

 

   image   image  

   image   image

 

    und bestimmen Sie deren Elementanzahl. Erzeugen Sie eine Sequenz der Elemente der Arrays

    und fügen Sie so die Elemente des Arrays einmal in eine Liste und einmal in eine Menge ein.

 

2. Ändern Sie in allen Arrays mindestens ein Element ab. Schreiben Sie dazu ein beliebiges, von Ihnen

    gewähltes Element, in die Arrays. 

_______________________________________________________________________________

 

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.