Pascal-Tutorial Kapitel 6
Aus Wirthi's Wiki
| Pascal-Tutorial | |
|---|---|
| Allgemeines Kapitel 1 (Einleitung) Kapitel 2 (Daten) Kapitel 3 (Anweisungen) Kapitel 4 (Ein- und Ausgabe) Kapitel 5 (Unterprogramme) Kapitel 6 (Felder und Strukturen) Kapitel 7 (Dateien) | |
|
Im Kapitel 6 des Pascal-Tutorials behandeln wir besondere Datentypen wie Felder und Strukturen.
[bearbeiten] Felder
Oft muß man sehr viele Werte gleichzeitig abspeichern und betrachten, die alle der selben Aufgabe dienen. Man schreibt z.B. ein Programm, das 10 Zahlen einlesen und anschließend wieder ausgeben soll. Mit dem bisherigen Wissen würden Sie vermutlich 10 verschiedene Variablen anlegen (zahl1 zahl2, ...), aber es geht auch einfacher. "Felder" oder "Arrays" speichern mehrere Werte gleichen Datentypes. Jedes Array hat einen normalen Variablennamen, die einzelnen Variablen können mit einem "Index" angesprochen werden.
[bearbeiten] Array
In einem Array werden mehrere Variablen gleichen Typs zusammengefasst und hintereinander im Speicher abgelegt. So kann man viele tausend Variablen anlegen, mit nur einer Zeile Code. Doch es gibt noch größere Vorteile: Sie können das Array mit z.B. einer FOR-Schleife ganz einfach nach Werten durchsuchen. Stellen Sie sich vor, sie müßten mit 100 verschiedenen Variablen Zahl_001 bis Zahl_100 arbeiten! Ein ihnen bereits bekanntes Beispiel für ein Array ist der Datentyp string. Dabei handelt es sich nämlich um ein Array des Datentypes char (mit einigen wenigen Veränderungen).
Syntax: VAR Name:ARRAY [von..bis] OF Datentyp;
Der Name muß ein gültiger Bezeichner sein, als Datentyp kann jeder beliebige Typ genommen werden. In der eckigen Klammer wird die Anzahl der Elemente bekanntgegeben. "von" bezeichnet die Nummer (den Index) des ersten, "bis" die Nummer des letzten Elementes. Ein mit [1..3] definiertes Array hat also drei Variablen, nämlich [1], [2] und [3]. Um auf eine der im Array enthaltenen Variable zugreifen zu können, müssen Sie den Variablennamen und in eckigen Klammern den Index ("Nummer") der Variablen angeben. Diese Variable verhält sich dann wie eine ganz normale Variable des jeweiligen Datentypes.
PROGRAM array_test;
USES crt;
VAR Zahlen:ARRAY [1..10] OF integer;
i:integer;
BEGIN
clrscr;
FOR i:= 1 to 10 DO
BEGIN
write('Bitte Zahl ',i,' eingeben: ');
readln(Zahlen[i]);
END;
writeln('Danke!');
FOR i:= 1 to 10 DO write('Zahl ',i,' war: ',Zahlen[i]);
END.
- Bemerkungen
- Zuerst wird ein Array mit angelegt, das zehn integer-Werte speichert.
- In dieses speichert das Programm nun der Reihe nach zehn Zahlen, die der Benutzer eingeben kann.
- Anschließend werden alle zehn Zahlen noch einmal ausgegeben.
ACHTUNG!: Wenn Sie einen ungültigen Index angeben (einen, der in der Deklaration "von..bis" nicht enthalten ist) können je nach Compiler und Einstellung mehrere Dinge geschehen: entweder liefert der Compiler einen "Bereichsüberschreitungs-" Fehler, oder das Programm funktioniert nicht oder einfach komplett falsch (im schlimmsten Fall könnte sogar der Computer abstürzen). Also achten Sie darauf, daß Sie keine ungültigen Werte als Index angeben!
[bearbeiten] Mehrdimensionale Arrays
Manchmal benötigen mehr als nur ein eindimensionales Array, wie sie es bisher kennen. Auch mehrdimensionale Felder können in Pascal problemlos verwendet werden. In der Deklaration geben Sie in den eckigen Klammern einfach mehrere von..bis-Teile an, mit Beistrich voneinander getrennt. Aber Vorsicht: der Speicherplatz ist begrenzt, ein ARRAY [1..1024,1..1024] OF char hat die Speicherplatzgrenzen unter DOS bereits weit überschritten, und der Compiler wird einen (bei gewissen Einstellung auch keinen) Fehler liefern. Beim Schreiben oder Lesen von Werten in das/aus dem Array müssen Sie bei mehrdimensionalen Feldern auch mehr als einen Index angeben, die Erklärung folgt als Beispiel:
PROGRAM mehr_dimensionales_Array;
VAR feld:ARRAY[1..3,1..5] OF integer;
x,y:integer;
BEGIN
FOR x:= 1 TO 3 DO FOR y:= 1 TO 5 DO
BEGIN
write('Feldwert X: ',x,' Y: ',y);
readln(feld[x,y]);
END
FOR x:= 1 TO 3 DO FOR y:= 1 TO 5 DO write('Wert: ',x,' ',y,' ',feld[x,y]);
END.
- Erklärung
- Zuerst wird ein 3 mal 5 integer-Array angelegt.
- Dann werden die Werte eingegeben: zuerst feld[1,1], dann feld[1,2], usw. bis feld[3,5].
- Zum Schluß werden alle Werte noch einmal ausgegeben.
[bearbeiten] Eigene Datentypen
Mit Hilfe des Schlüsselwortes TYPE können Sie im Deklarationsteil eigene Typen definieren. Dabei gibt es mehrere Möglichkeiten.
[bearbeiten] Alias-Namen
Unter gewissen Umständen kann es sinnvoll sein, selber eigene Namen für Datentypen vergeben. Das ist dann hilfreich, wenn Sie z.B. einen Datentyp für ein Array anlegen. Das kann eine Menge Schreib-Arbeit ersparen!
PROGRAM Type_test; TYPE feld=ARRAY[1..20,1..30] OF integer; VAR a,b,c:feld; ....
- Bemerkungen
Was in diesem Beispiel noch nicht so deutlich wird, kann bei einem größeren Projekt viel Arbeit sparen: Wenn Sie viele Unterprogramme haben, brauchen Sie bei der Parameterübergabe nicht jedes mal das lange ARRAY[....] OF Datentyp schreiben. Außerdem wird das Programm verständlicher, wenn Sie für den Datentypen einen halbwegs aussagekräftigen Namen wählen.
[bearbeiten] Strukturen
Mit Hilfe von RECORD können Sie sogenannte Strukturen definieren. Dabei handelt es sich um eine Zusammenfassung von mehreren Datentypen zu einem Größeren. Im Gegensatz zu FEldern können in Records jedoch unterschiedliche Datentypen gespeichert werden:
PROGRAM records_test; TYPE Person=RECORD Vorname,Nachname:string; strasse,ort:string; hausnummer:integer; plz:longint; END; VAR MeinChef:Person; ....
Wie spricht man die einzelnen Variablen eines Records nun an? Das funktioniert so:
- Zuerst gibt man die Record-Variable an, im Beispiel MeinChef.
- Danach schreibt man einen Punkt.
- Abschließend folgt die gewünschte Variable, also z.B. Vorname.
- Also: Recordtyp.Variable, im Beispiel: MeinChef.Vorname
Die Anwendung verdeutlicht folgendes Beispiel. Es wird der Typ und die Variablendeklaration des letzten Beispieles verwendet:
.... MeinChef.Vorname:='Max'; MeinChef.Nachname:='Mustermann'; readln(MeinChef.strasse);
| Pascal-Tutorial: Allgemeines - Kapitel 1 - Kapitel 2 - Kapitel 3 - Kapitel 4 - Kapitel 5 - Kapitel 6 - Kapitel 7 |
