Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

G.Heyer Digitale Informationsverarbeitung 1 Pascal-Datentypen Skalare Typen Strukturierte Typen Zeiger- Typen REAL Aufzählungs- typen BOOLEAN INTEGER CHAR.

Ähnliche Präsentationen


Präsentation zum Thema: "G.Heyer Digitale Informationsverarbeitung 1 Pascal-Datentypen Skalare Typen Strukturierte Typen Zeiger- Typen REAL Aufzählungs- typen BOOLEAN INTEGER CHAR."—  Präsentation transkript:

1 G.Heyer Digitale Informationsverarbeitung 1 Pascal-Datentypen Skalare Typen Strukturierte Typen Zeiger- Typen REAL Aufzählungs- typen BOOLEAN INTEGER CHAR Selbstvereinbarte Typen Unterbereichs- typen Homogene Typen Inhomogene Typen Verbunde Felder Mengen Dateien

2 G.Heyer Digitale Informationsverarbeitung Strukturierte Datentypen und Zeiger Mengentypen: TYPE Mengentyp = SET OF Basistyp; TYPE Farben = (Rot, Gelb, Gruen, Blau, Schwarz, Weiss); Farbmenge = SET OF Farben; S1 + S2 S1 * S2 S1 - S2 S1 / S2 S1 <= S2 S1 >= S2 x IN S Operationen auf Mengen: als Basistyp sind nur endliche Aufzählungstypen zulässig Vereinigung der Mengen S1 und S2 Schnitt der Mengen S1 und S2 Differenz der Mengen S1 und S2 Symmetrische Differenz der Mengen S1 und S2 S1 ist Untermenge von S2 S1 ist Obermenge von S2 x ist Element von S Mengenkonstanten: [], [Rot, Gelb, Gruen], [1..5,9,17..19] Include(S,e) entspricht S := S + [e] Exclude(S,e) entspricht S := S - [e]

3 G.Heyer Digitale Informationsverarbeitung 3 Felder (Arrays) Reihung von Komponenten desselben (Werte-) Typs, dienen zur Aufnahme mehrer Objekte desselben Basistyps Traditioneller Datentypkonstruktor speziell für Vektoren oder Matrizen Feldelemente werden durch Index bezeichnet, der durch Aufzählungstypen, Unterbereichstypen, CHAR, INTEGER und BOOLEAN gebildet werden kann Zugriff auf einzelne Komponenten erfolgt über Indextyp ARRAY [1..10] OF Integer ARRAY [-5..5] OF Real ARRAY [Boolean] OF (rot, gruen, blau) Feld mit 10 Integer-Komponenten Feld mit 11 Real-Komponenten Feld mit 2 Komponenten des angeg. Typs Wertetyp kann wieder Feld sein: ARRAY [I1] OF ARRAY [I2] OF... ARRAY [In] OF T ARRAY [I1,I2,...,In] OF T Einfachere Schreibweise

4 G.Heyer Digitale Informationsverarbeitung 4 Matrixmultiplikation CONST L1 = 6; L3 = 5; TYPE IndBer1 = 1..L1; IndBer2 = (Alpha, Beta, Gamma); IndBer3 = 1..L3; Vektor = ARRAY [IndBer3] OF INTEGER; Matrix1 = ARRAY [IndBer1, Alpha..Gamma] OF INTEGER; Matrix2 = ARRAY [Alpha..Gamma] OF Vektor; Matrix3 = ARRAY [IndBer1] OF Vektor; VAR M1 : Matrix1; M2 : Matrix2; M3 : Matrix3; PROCEDURE Multiplikation;(* Matrixmultiplikation M3 := M1 * M2 *) VAR i : IndBer1; j : IndBer2; k : IndBer3; Summe : INTEGER; BEGIN (* Multiplikation *) FOR i := 1 TO L1 DO FOR k := 1 TO L3 DO Summe := 0; FOR j := MIN(IndBer2) TO MAX(IndBer2) DO Summe := Summe + M1 [i, j] * M2 [j, k]; END (* FOR j *); M3 [i, k] := Summe; END (* FOR k *); END (* FOR i *); END Multiplikation;

5 G.Heyer Digitale Informationsverarbeitung 5 Verbunde (Records) dienen zur Darstellung inhomogener, aber zusammengehöriger Information TYPE RecTyp = RECORD Selektor1 : Typ1;... Seli, Selj: Typij;... Selektorn : Typn; END (* RECORD *); Zugriff auf Komponenten durch. TYPE NamString = ARRAY [1..15] OF CHAR; IndexT = [ ]; AnredeT = (Herr, Frau); NameRec = RECORD Vorname, Nachname : NamString; Anrede : AnredeT; END (* RECORD *); PersonRec = RECORD Name : NameRec;...(* weitere Felder des Records *) END (* RECORD *); VAR Personal: ARRAY IndexT OF PersonRec; Personal [3].Name.Vorname [1] Beispielzugriff:

6 G.Heyer Digitale Informationsverarbeitung 6 With-Anweisung: 3 äquivalente Programmstücke IF ('a' <= Personal [Index].Name.Vorname [1]) AND (Personal[Index].Name.Vorname [1] <= 'z') THEN Personal[Index].Name.Vorname [1] := CHR (ORD ('A') - ORD ('a') + ORD (Personal [Index].Name.Vorname [1])); END (* IF *); WITH Personal [Index] DO IF ('a' <= Name.Vorname [1]) AND (Name.Vorname [1] <= 'z') THEN Name.Vorname [1] := CHR (ORD ('A') - ORD ('a') + ORD (Name.Vorname [1])); END (* IF *); END (* WITH *); WITH Personal [Index].Name DO IF ('a' <= Vorname [1]) AND (Vorname [1] <= 'z') THEN Vorname [1]:= CHR (ORD ('A') - ORD ('a') + ORD (Vorname [1])); END (* IF *); END (* WITH *);

7 G.Heyer Digitale Informationsverarbeitung 7 PROGRAM RecTest; CONST MaxPers = 10; MaxLng = 30; TYPE DatumT = RECORD Jahr : [ ]; Monat : [1..12]; Tag : [1..31]; END (* RECORD *); String = ARRAY [0..MaxLng] OF CHAR; NamTyp = RECORD (* mit drei Feldern gleichen Typs *) VorName, NachName, GebName : String; END (* RECORD *); GebAng = RECORD (* bestehend aus Record und Array *) Datum: DatumT; Ort: String; END (* RECORD *); EheAng = RECORD Stand : (ledig, verh, verw, gesch, gest); seit : DatumT; END (* RECORD *); PersAng = RECORD Name : NamTyp; Geburt : GebAng; ZivStand: EheAng; END (* RECORD *); VAR Person1, Person2 : PersAng; Datum1, Datum2 : DatumT; Klasse : ARRAY [1..MaxPers] OF PersAng; Name : NamTyp;

8 G.Heyer Digitale Informationsverarbeitung 8 RecTest, ctd. BEGIN (* RecTest *) Person1.Name.VorName := 'Albert'; Person1.Name.NachName := 'Einstein'; (* sehr umstaendlich! *) WITH Datum1 DO Jahr := 1879; Monat:= 3; Tag := 14; END; WITH Person1 DO WITH ZivStand DO (* das aeussere WITH bleibt wirksam *) Stand := gest; seit := Datum1; seit.Jahr := 1955; END (* WITH ZivStand *); Geburt.Datum := Datum1; (* Wertzuw. eines Teil-Records *) Geburt.Ort := 'Ulm'; END (* WITH Person1 *); Person2 := Person1; (* Wertzuweisung eines Records *) Klasse [5] := Person1; WITH Klasse [3] DO Name := Person2.Name; (* d.h. Klasse[3].Name := Person2.Name *) END (* WITH Klasse [3] *); END (* RecTest *).

9 G.Heyer Digitale Informationsverarbeitung 9 Zeiger (Pointer) Aufgabe: Erstellen einer Bücherkartei, alphabetisch sortiert TYPE Buch = RECORD Autor: RECORD Vn, Nn: ARRAY[1..25] OF Char END; Titel: ARRAY[1..200] OF Char; Jahr: ; Verl: Boolean END; Beschreibung durch Feld: VAR Kartei: ARRAY[ ] OF Buch Nachteile: es wird immer Speicherplatz für 5000 Bücher bereitgestellt beim Entfernen von Büchern entstehen Lücken, die zu verwalten sind Einfügen eines Buches kann erhebliches Umspeichern nötig machen Deshalb empfiehlt sich Verwendung dynamischer verketteter Listen

10 G.Heyer Digitale Informationsverarbeitung 10 Verkettete Listen Kopf Listenelemente ABC D ABC DABC D X Einfügen eines neuen Elements Löschen eines alten Elements

11 G.Heyer Digitale Informationsverarbeitung 11 Zeiger in Pascal TYPE Z = ^T; definiert Zeigertyp Z über Typ T, Wert: Adresse eines Objekts von Typ T TYPE Zeiger = ^Buchkarte; Buchkarte = RECORD Nachfolger: Zeiger; Beschreibung: Buch END; Bezeichner von Zeigertypen können vor entsprechenden Objekttypen deklariert werden! nach TYPE Z = ^T;VAR X: Z; ist X^ Variable (i.e.S. Zeigervariable) vom Typ T, ihr Wert das Objekt, auf das X zeigt. Wertebereich jedes Zeigertyps enthält Konstante NIL (zeigt auf nichts) Zuweisung von NIL an Zeigervariable X löscht gespeicherten Zeiger, Zugriff über X^ dann nicht mehr erlaubt

12 G.Heyer Digitale Informationsverarbeitung 12 Zuweisungsbeispiel Z1 Z2 X Z1, Z2 und X sind Variablen vom Typ Z Ausgangssituation nach Zuweisung Z1 := Z2 nach Zuweisung Z1^ := Z2^ Z1 Z2 X Z1 Z2 X

13 G.Heyer Digitale Informationsverarbeitung 13 Dynamisches Erzeugen von Variablen TYPE Z = ^T; VAR V: Z; Ausführung von New(V) bewirkt Erzeugen eines neuen Objekts vom Typ T Ablegen des Zeigers auf neues Objekt in V, Objekt also mit V^ ansprechbar VV ? vorher nach New(V) neues Objekt Typ T Wert noch undefiniert Dispose(V) macht die Wirkung wieder rückgängig das Objekt, auf das V zeigt, wird zerstört, d.h. sein Speicherplatz freigegeben

14 G.Heyer Digitale Informationsverarbeitung 14 Einfügen und Löschen von Listenelementen TYPE Buch =... (* wie oben *) Zeiger =... (* wie oben *) Buchkarte =... (* wie oben *) VAR Kartei: Zeiger (* Kopf der Liste *) Hier,Neu: Zeiger (* Hilfszeiger *) New(Neu); Neu^.Nachfolger := Hier^.Nachfolger; Hier^.Nachfolger := Neu; Einfügen nach Hier Einfügen am Anfang New(Neu); Neu^.Nachfolger := Kartei; Hier^.Nachfolger := Neu; Löschen nach Hier Hier^.Nachfolger := Hier^.Nachfolger^.Nachfolger;

15 G.Heyer Digitale Informationsverarbeitung 15 Suchen in Listen TYPE Element =... (* Def. der Listenelemente *) Zeiger = ^Listenobjekt; Listenobjekt = RECORD Nachfolger: Zeiger; Inhalt: Element END; FUNCTION Listensuche(Was:Element;Wo:Zeiger):Zeiger; BEGIN (* Listensuche *) Listensuche := nil; WHILE Wo <> nil DO IF Wo.Inhalt = Was THEN BEGIN Listensuche := Wo, Wo := nil END ELSE Wo := Wo^.Nachfolger END (* Listensuche *) Folgende Funktion liefert Zeiger auf erstes Listenobjekt ab Wo, für das gilt Inhalt = Was

16 G.Heyer Digitale Informationsverarbeitung 16 Doppelt verkettete Listen Kopf AB C D Ende nil... TYPE Buch =... (* wie oben *) Zeiger = ^Buchkarte Buchkarte = RECORD Vorgaenger, Nachfolger: Zeiger; Beschreibung: Buch END; VAR Kopf,Ende:Zeiger (* Kopf der Liste *) Hier,Neu: Zeiger (* Hilfszeiger *) Neu^.Vorgaenger := Hier; Neu^.Nachfolger := Hier^.Nachfolger; Hier^.Nachfolger^.Vorgaenger := Neu; Hier^.Nachfolger := Neu; Einfügen nach Hier


Herunterladen ppt "G.Heyer Digitale Informationsverarbeitung 1 Pascal-Datentypen Skalare Typen Strukturierte Typen Zeiger- Typen REAL Aufzählungs- typen BOOLEAN INTEGER CHAR."

Ähnliche Präsentationen


Google-Anzeigen