Strukturierte Variablen • Arrays - Webarchiv ETHZ / Webarchive ETH

Werbung
Agenda für heute, 12. April, 2007
• Strukturierte Variablen
• Arrays
Strukturierte Variablen: Wieso?
• Strukturierte Variablen erlauben mit einem einzigen
Bezeicher die Bezugnahme auf mehr als einen Datenwert.
• Konsequenzen:
Mehr Möglichkeiten für die Datenmodellierung
Einfachere Anpassung von Algorithmen an die Bedürfnisse
der Anwendung
• Die verbreitetsten strukturierten Datentypen:
Array
String
Record
Programmieren und Problemlösen
2/13
© Institut für Computational Science, ETH Zürich
Strukturierte Datentypen: Der Array
•
Strukturierte Variablen
• Arrays
Eine Variable vom Typ array ist definiert durch einen Indexbereich
und den Datentyp der Elemente des Arrays.
Bezeichner
Indexbereich
Basistyp
var
Vektor: array[1..10] of real;
Diese Deklaration definiert 1 Variable, bestehend aus 10 Elementen,
alle vom Typ Real, auf die gesamthaft über den Bezeichner
(Vektor) oder individuell über den Bezeichner und einen Index
(Vektor[i]) zugegriffen werden kann.
Programmieren und Problemlösen
3/13
© Institut für Computational Science, ETH Zürich
Zuweisungsanweisungen mit Arrays
Arraydeklarationen
u, v: array['a'..'z'] of integer;
Die Anweisung
Wenn in Pascal Arrays wie folgt deklariert werden:
var
u:= v
ist gleichbedeutend mit der Anweisungsfolge
u['a']:= v['a'];
u['b']:= v['b'];
u['c']:= v['c'];
etc.
u: array[1..3] of real;
v: array[1..3] of real;
dann ist die Anweisung
u:= v
nicht möglich, wohl aber
u[1]:= v[1];
Programmieren und Problemlösen
4/13
© Institut für Computational Science, ETH Zürich
Typische Operationen mit Arrays
Programmieren und Problemlösen
5/13
© Institut für Computational Science, ETH Zürich
Typische Operationen mit Arrays
const
N = 200;
var
MessWerte: array [1..N] of real;
i: integer; sum: real;
Summieren:
sum:= 0;
for i:= 1 to N do
sum:= MessWerte[i] + sum
Initialisieren:
for i:= 1 to N do
MessWerte[i]:= 0
Programmieren und Problemlösen
6/13
© Institut für Computational Science, ETH Zürich
Programmieren und Problemlösen
7/13
© Institut für Computational Science, ETH Zürich
Einfache Algorithmen mit Arrays
Minimum suchen, Beispiel
var
MessWerte: array [1..N] of real;
i, k: integer; min: real;
Wert
8
12
5
17
2
9
26
6
15
11
Index i
1
2
3
4
5
6
7
8
9
10
Minimum suchen:
Variablenwerte
for i:= 1 to N do read(MessWerte[i]);
k:= 1;
min:= MessWerte[k];
for i:= 2 to N do
if MessWerte[i] < min
then begin
k:= i;
min:= MessWerte[k]
end
Durchlauf
min enthält den kleinsten Wert, k dessen Position im Array
8/13
Programmieren und Problemlösen
© Institut für Computational Science, ETH Zürich
i
k
1
2
1
8
12
3
3
5
5
3
4
3
5
17
4
5
5
2
2
5
6
5
2
9
6
7
5
2
26
7
8
5
2
6
8
9
5
2
15
9
10
5
2
11
9/13
Programmieren und Problemlösen
Einfache Algorithmen mit Arrays
Lineares Suchen eines Wertes in einem Array
Lineares Suchen, korrekte Version:
Wert
8
12
5
17
2
9
26
6
15
11
Index i
1
2
3
4
5
6
7
8
9
10
i:= 1;
x:= 26;
while MessWerte[i] <> x do
i:= i + 1
i:= 1; x:= 4; N:= 10;
while (i <= N) and (MessWerte[i] <> x) do
i:= i + 1
Wert
8
12
5
17
2
9
26
6
15
11
Index i
1
2
3
4
5
6
7
8
9
10
11
i
Der Algorithmus "schiesst" über die Arraygrenze hinaus! = Laufzeitfehler
10/13
© Institut für Computational Science, ETH Zürich
Funktioniert allerdings nur mit dem Kurzschlussverfahren bei der
Auswertung Boolescher Ausdrücke:
Was passiert, wenn der Wert 4 gesucht wird?
Programmieren und Problemlösen
MessWerte[i]
2
Einfache Algorithmen mit Arrays
Im folgenden Array MessWerte soll der Wert 26 gesucht werden:
min
© Institut für Computational Science, ETH Zürich
Wenn (i <= N) false
ergibt dann wird MessWerte[i] <> x nicht ausgewertet.
Programmieren und Problemlösen
11/13
© Institut für Computational Science, ETH Zürich
Zweidimensionale Arrays
Verschiedene Deklarationen für 2-d Arrays
Arrayelemente können auch von einem strukturierten Typ sein.
Insbesondere können sie ebenfalls vom Typ Array sein.
a)
var
B: array [1..N] of array ['a'..'z'] of integer;
b)
var
Damit lassen sich mehrdimensionale Strukturen verwalten (z.B. Matrizen)
Var
A: array[1..8] of array [1..5] of integer;
B: array [1..N,'a'..'z'] of integer;
A
A[2]
Programmieren und Problemlösen
A[5,3]
12/13
© Institut für Computational Science, ETH Zürich
Programmieren und Problemlösen
13/13
© Institut für Computational Science, ETH Zürich
Herunterladen