PurePascal (6)

Nachdem in den letzten fünf Folgen des Kurses die wichtig sten Elemente der Programmiersprache vermittelt wurden, zeigen die nächsten drei Folgen wichtige Datentypen und -Strukturen, die z.B. zum Speichern von Dateien benötigt werden.
Aber zuerst möchte ich die Aufgabe aus der letzten Folge auflösen. Gefragt wurde nach einer rekursiven Funktion FIB, die nach Eingabe der Zahl n die Fibonacci-Zahl zurück liefert. Hier also ein Programm mit Nassi Shneidermann-Struktogramm, das diese Aufgabe erfüllt:

center Abb 25: Struktogramm für die Funktion FIB zur Ermittlung der Fibonacci-Folge

7. Datentypen

Viele der einfachen Datentypen sind schon behandelt worden. Die REAL-Typen können als real, single, double, und extended vereinbart werden. Die anderen einfachen Typen sind die ORDINAL-Typen,von denen schon die Integer-Typen (integer, shortint, longint), boolean und char bekannt sind.

7.1 Aufzählungsdatentypen

Kennzeichnend für die ORDINAL-Typen ist, dass die Folge der Vorgänger und der Nachfolger bekannt sind. Z.B.: Das "C" hat im ASCii-Code die Nummer 67. In der geordneten Menge des Alphabets hat "D" die Nummer 68, der Vorgänger mit der Nummer 66 ist ein "B".
Hierfür sind drei Standardfunktionen definiert.
ord(x) ergibt die Ordnungszahl in der Menge (bei "C" ist das 67)
pred(x) ergibt das vorstehende Element (bei "C" ist das "B")
succ(x) ergibt das folgende Element (bei "C" ist das "D")
Aufzählungsdatentypen müssen im Vereinbarungsteil typisiert und deklariert werden (siehe Übersicht unter Listing 1).

7.2 Strukturierte Datentypen

Die strukturierten Datentypen lassen sich ebenfalls ganz einfach aus den einfachen Datentypen aufbauen. Unterschieden werden die folgenden Typen:
Zeichenkette: STRING
Feld: ARRAY
Menge: SET
Satz: RECORD
Datei: FILE

7.2.1 Datenstruktur Zeichenkette STRING

Die Datenstruktur STRING ist in Kapitel 2.3.l schon behandelt worden. Die Deklaration erfolgte mit der Angabe der maximalen Anzahl von Zeichen:
var NAME: string[20];
Die Zeichenkette darf maximal 255 Zeichen lang sein. Zur Kennzeichnung der Länge wird ein Byte angefügt. Für die STRING-Bearbeitung sind in Pascal folgende Funktionen vorhanden (siehe Funktionsübersicht 1).

Vereinbarungen für einfache Felder:
var FELDNAME:
array [Anfangswert..Endwert] of Datentyp;
var SCHUELER: array [1..40] of string[30]
var ZENSUR:
array [1..4O] of byte;
Sollen die Zensuren der Klasse für mehrere Fächer abgelegt werden, können mehrere eindimensionale Felder oder ein zweidimensionales Feld vereinbart werden:
var ZENSUREN:
array [1..40, 1..9] of byte;

Entsprechend lassen sich auch zusätzliche Dimensionen hinzufügen. Das zweidimensionale Feld hat speziell in der Tabellenkalkulation (Spalten- und Zeilen-Angaben) eine große Verbreitung gefunden (siehe Listing 2). Die Adressierung ist also immer aus dem Variablennamen und den in Klammer stehend folgenden Indizes aufgebaut. Es sind zwar höhere Dimensionen als von zweiter Ordnung möglich, nur sind diese dann schwer zu durchschauen, da sie für den Menschen nicht mehr vorstellbar sind (größer 3-dimensional).
Im nächsten Teil dieses Kurses folgen die strukturierten Datentypen für Mengen (SET), Satz (RECORD) und Datei (FILE).

Download Listing 1 (fiboreku.pas)

Funktionsübersicht 1

LENGTH(NAME) Gibt die Länge (Wert vom Datentyp Integer) der Zeichenkette NAME zurück.
Beispiel: LENGTH(Meier) ergibt 5.
POS(S1, S) Gibt die Position (Wert vom Datentyp Integer) des erstmaligen Auftretens der Zeichenkette S1 in der Zeichenkette S zurück.
Beispiel: POS('ei', 'Meier') ergibt 2,
POS('ei','Maurer') ergibt 0!
CONCAT (S1,S2,S3) Verkettet mehrere Zeichenketten.
Beispiel: CONCAT('M', 'ei', 'er') liefert 'Meier'
COPY(S, N, M) Gibt einen Teil (Rückgabe vom Datentyp String) eines vorhandenen Strings S ab Zeichen N mit der Länge M zurück.
Beispiel: COPY('Informatik', 3, 4) ergibt 'form';
Standardprozeduren:
INSERT (S1, S, N) Fügt die Zeichenkette S1 ab der Stelle N in die Zeichenkette S ein.
Beispiel:
S:='Leer';
INSERT('hr', s, 3) ergibt 'Lehrer'
DELETE(S,N,M) Löscht in der Zeichenkette S ab der Stelle N M Zeichen.
Beispiel:
S:='Buchstaben';
INSERT(s, 3, 5) ergibt 'Buben'
STR(I, S) Wandelt die Zahl I in einen String S um.
VAL(S, X, I) Wandelt die den String S, der eine Zahl vom Typ REAL oder INTEGER enthält, in eine Zahl X des entsprechenden Typs um. I ist eine INTEGER-Variable, die die Fehlerposition im String S markiert. Klappt die Umwandlung fehlerfrei, ist I = 0.

Listing 2

Adressierung:
     1-dimensional: SCHUELER[31] := 'Müller';  
                    ZENSUR[31] := 3;
     2-dimensional: ZENSUREN[31, 7] := 3;
     oder           IndexSch := 31;
                    IndexFach := 7;
                    ZENSUREN[IndexSch, IndexFach] := 3;



type FARBE = (rot, rot gelb, gruen, gelb);
TAG = (Mo, Di, Mi, Do, Fr, Sa, So);
var x: FARBE;  f: FARBE;

Torsten Runge
Aus: ST-Computer 10 / 1999, Seite 39

Links

Copyright-Bestimmungen: siehe Über diese Seite