Claus SchönleberHitchhacker´s Guide To PASCAL [Vol. 1] |
||||
|
[ Start | Beispielprogramme Download | Home ] | |||
InhaltCompilerProgrammieren Datentypen, Variablen, Standardfunktionen Logik Verzweigung, Strukturierung Schleifen Felder (Arrays) Verteiler: CASE Zeichenketten (Strings) Textdateien Module (Prozeduren, Funktionen) Anhang (Operatoren, abgeleitete Funktionen)
|
Arrays (Felder)Mit dem Array kommen wir zu einem Datentyp, der schon nicht mehr als "einfacher Datentyp" bezeichnet werden kann. Einfache (Standard-)Datentypen, wie wir sie schon kennengelernt haben, sind zum Beispiel integer, real, boolean oder char. Da ihnen eine Ordnung auferlegt wurde (Natürliche Ordnung der Zahlen, lexikographische Ordnung der Zeichen), werden sie auch skalare Typen genannt. Darüberhinaus bietet PASCAL aber auch Typen, die aus Komponenten zusammengesetzt werden. Solche Typen werden strukturiert genannt. Es gibt natürlich mehrere strukturierte Typen.Die Komponenten dieses Typs haben alle denselben Grundtyp, dewegen heißt die Struktur des Arrays auch homogen. Wie sieht solch ein Feld nun aus? Bevor wir auf die Definition eingehen, soll erst erklärt werden, wie das Ganze funktioniert. Bei einem Array oder Feld handelt es sich ganz einfach um eine Ansammlung von einzelnen Variablen. Die Variablen, die wir bisher kennengelernt haben, lassen zwar eine Speicherung von Daten zu, es ist aber nicht möglich, auf eine Variable zuzugreifen, ohne daß man zur Programmierzeit genau weiß, auf welche man zugreifen will. Mit anderen Worten: Wenn ich einen Wert aus einer einfachen Variable haben möchte, muß ich den Variablennamen explizit angeben, d.h., ich muß wissen, welche Variable ich meine. Bei der Bearbeitung von vielen Daten gleichen Typs kommt es aber vor, daß ich ein Verfahren benutzen muß, daß mir nicht erlaubt, auf eine ganz bestimmte Variable zuzugreifen, sondern nur auf eine berechnete Position innerhalb einer Liste. Die Berechnung erfolgt dann mit einem gewöhnlichen Ausdruck. Dieses Verfahren ist mit einfachen Variablen nicht mehr durchführbar. Deswegen werden eine vorher bestimmte Anzahl von Einzelvariablen zu einer Liste zusammengeschlossen und mit einem einzigen Namen versehen. Das ist der Feldname. Um nun aus der Menge von Variablen trotzdem jede einzelne noch eindeutig identifizieren zu können, vergibt man jedem Mitglied des Verbundes "Etiketten", zum Beispiel in Form von Nummern. Allerdings muß solch ein Etikett nicht unbedingt Nummern darstellen. Die Etiketten heißen Index. Schauen wir uns den Unterschied zwischen einer einfachen Variablen und
einem Array in einem Schaubild an:
Im Schaubild hat die Variable den Namen "a", das Feld den Namen "f".
Da alle Komponenten des Feldes den Namen "f" haben, müssen sie durch
einen Index unterschieden werden. Dieser Index ist im Schaubild
durch die Ziffern 1 bis 3 symbolisiert. Ansonsten kann eine
Ein Feld wird im Deklarationsteil wie jede andere Variable deklariert. Der Typ wird folgendermaßen formuliert: ARRAY [<indextyp>{,<indextyp>}] OF <komponententyp>; Klammern dahinterstehenden Index: <name> [<index>]
Auch hier soll ein einfaches Programm erläutern, wie Felder formal eingesetzt werden können: Das Programm tut nicht viel. Es weist nacheinander allen 10 Feldelementen das Quadrat des Index zu und gibt am Ende den Inhalt aller Feldelemente auf dem Bildschirm wieder aus. Übrigens sieht man hier sehr schön, wie eine FOR- oder andere Schleife mit einer Laufvariablen als Index gewinnbringend eingesetzt werden kann. Die Bildschirmausgabe sieht so aus:PROGRAM feld_beispiel; VAR index : integer; feld : ARRAY [1..10] OF integer; BEGIN (*** Eingabe ***) FOR index := 1 TO 10 DO feld [index] := index * index; (*** Ausgabe ***) FOR index := 1 TO 10 DO writeln ('feld [',index:2,'] = ',feld [index]:3); END.
Daß bei diesem Beispiel der Komponententyp und der Indextyp identisch sind, ist nicht repräsentativ. Wie es anders geht, zeigt das nächste Beispiel: Auch diese Programm arbeitet seine Aufgabe in sehr merkwürdiger Form ab, aber es übt. Jedoch sieht man deutlich, daß der Indextyp nichts mit Zahlen zu tun hat. Auch in der Schleife kann man also ohne Zahlen rechnen. Der Komponententyp boolean wird hier als Flag benutzt. Wir werden noch eine ähnliche, effektivere Anwendung kennenlernen.PROGRAM feld_beispiel2; VAR index,eingabe : char; feld : ARRAY ['A'..'Z'] OF boolean; BEGIN (*** Initialisierung ***) FOR index := 'A' TO 'Z' DO feld [index] := false; (*** Eingabe ***) write ('Geben Sie einen Buchstabe ein: '); readln (eingabe); (*** Berechnung ***) FOR index := 'A' TO 'Z' DO feld [index] := (eingabe = index); (*** Ausgabe ***) FOR index := 'A' TO 'Z' DO IF feld [index] THEN writeln ('Der Buchstabe war ',index); END.
|
|||
|
(c) 2001 Schoenleber.com |