________________________________________________________________________________
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
![]()
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
![]()
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]
![]()
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])
![]()
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)
![]()
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)
![]()
![]()
![]()
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)]
![]()
L bezeichnet jetzt eine Liste mit den Elementen des Arrays...
M:= {op(A)}
![]()
...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
![]()
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
![]()
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

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
![]()
![]()

________________________________________________________________________________
Aufgaben:
1. Definieren Sie in MuPAD die folgenden Arrays

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
_______________________________________________________________________________