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