Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Agenda für heute, 22. Juni, 2006 Direkte FilezugriffeDirekte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen.

Ähnliche Präsentationen


Präsentation zum Thema: "Agenda für heute, 22. Juni, 2006 Direkte FilezugriffeDirekte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen."—  Präsentation transkript:

1 Agenda für heute, 22. Juni, 2006 Direkte FilezugriffeDirekte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen

2 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Direkte Filezugriffe Das Problem sequentieller Dateien: Zugriff auf die k-te Filekomponente bedingt k Leseoperationen Schreiben ist nur am Ende der Datei möglich Die Lösung: Mit der Prozedur Seek den Positionszeiger einer Filevariablen F direkt auf die Position k setzen Eine nachfolgende Read- oder Write-Operation betrifft die Filekompenente k Seek(F, k); 2/19

3 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Direkte Filezugriffe Beispiel var Eingabedaten: file of Integer; Messung: Integer; begin AssignFile(Eingabedaten,'C:\Messwerte') Reset(Eingabedaten); 3/19

4 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Direkte Filezugriffe Beispiel Der 21. Eintrag in der Datei Eingabedaten in die 80. Position derselben Datei schreiben: Seek(Eingabedaten,20); Read(Eingabedaten, Messung); Seek(Eingabedaten,79); Write(Eingabedaten,Messung) 4/19

5 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Direkte Filezugriffe Beispiel Datei vergrössern: Seek(F, FileSize(Eingabedaten)); Dieser Prozeduraufruf setzt den Positionszeiger ans Dateiende FileSize kann nicht für Textdateien verwendet werden 5/19

6 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Direkte Filezugriffe Beispiel Zusammenhängende Bereiche einer direkten Datei verarbeiten: Seek(Eingabedaten,100); for i:= 101 to 200 do begin Read(Eingabedaten,Messung); { Messung verarbeiten } end 6/19 Was aber, wenn die Datei Eingabedaten nur 150 Elemente enthält?

7 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Direkte Filezugriffe 7/19 Um Zugriffsfehler zu verhindern: var s: Integer; begin s:= FileSize(Eingabedaten); Seek(Eingabedaten,100); for i:= 101 to 200 do if i <= s then begin Read(Eingabedaten,Messung); { Messung verarbeiten } end;

8 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Standardprozeduren und -funktionen für Files AssignFileWeist einer Dateivariablen den Namen einer externen Datei zu. CloseFileSchliesst eine geöffnete Datei. EofPrüft, ob das Ende der Datei erreicht ist. EraseLöscht eine externe Datei. FilePosLiefert die aktuelle Position innerhalb einer Datei. FileSizeLiefert die aktuelle Grösse einer Datei. GetDirErmittelt das aktuelle Verzeichnis eines Laufwerks. IOResultLiefert den Status der zuletzt durchgeführten Ein-/Ausgabe-Operation. MkDirErzeugt ein Unterverzeichnis. RenameBenennt eine externe Datei um. ResetÖffnet eine existierende Datei. RewriteErzeugt und öffnet eine neue Datei. RmDirLöscht ein leeres Unterverzeichnis. SeekBewegt den Positionszeiger zur angegebenen Filekomponente. TruncateSchneidet eine Datei an der aktuellen Position ab. 8/19

9 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Standardprozeduren und -funktionen für Files AppendÖffnet eine existierende Datei für das Anhängen weiterer Daten. EolnPrüft, ob das Zeilenende in einer Textdatei erreicht ist. FlushLeert den Puffer einer Textdatei, die für die Ausgabe geöffnet wurde. ReadBei typisierten Dateien: liest eine oder mehrere Komponenten in eine Variable. Bei Textdateien: liest einen oder mehrere Werte in eine oder mehrere Variablen. ReadlnFührt einen Aufruf von Read aus und springt dann zum Anfang der nächsten Zeile der Datei. SeekEofLiefert den Dateiendestatus einer Datei (EOF) zurück. SeekEolnLiefert den Zeilenendestatus einer Datei (EOLN) zurück. SetTextBufWeist einer Textdatei einen Ein-/Ausgabepuffer zu. WriteBei typisierten Dateien: Schreibt eine Variable in eine Dateikomponente. Bei Textdateien: Schreibt einen oder mehrere Werte in die Datei. WritelnRuft die Prozedur Write auf und schreibt dann einen Zeilenvorschub in die Datei. 9/19

10 Direkte Filezugriffe Datentypen: MengenDatentypen: Mengen Individualisierbare Datentypen

11 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen Jeder Datentyp definiert eine Menge von Werten. Im Falle des Mengentyps ist es die Menge aller möglichen Mengen, die aus den Elementen eines gegebenen Basistyps bestehen. Beispiel Type Aufzählungstyp Farbe = (rot, gruen, blau); S = set of Farbe; Basistyp (max. 256 Elemente) 10/19

12 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen: Eigenschaften Die Werte des Typs S sind die Mengen: [], [rot], [gruen], [blau], [rot, gruen], [rot, blau], [gruen, blau], [rot, gruen, blau] Hat der Basistyp n unterschiedliche Werte, dann besitzt ihr Mengentyp 2 n Werte. Die Basis eines Mengentyps muss ein Ordinaltyp sein. (Aufzählungs- oder Unterbereichstyp) Die Ordinalwerte der oberen und unteren Grenzen des Basistyps müssen im Bereich liegen. 11/19

13 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen: Operationen Vereinigung + [rot] + [gruen] [rot, gruen] Durchschnitt * [rot, gruen] * [gruen, blau] [gruen] Differenz – [rot, gruen, blau] – [gruen] [rot, blau] Element in (Mengenzugehörigkeit) [rot] in [rot, gruen] TRUE 12/19

14 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen: Operationen Vergleich =Gleichheit <>Ungleichheit <=Teilmenge >=Obermenge [rot] = [rot, blau] FALSE [rot] <> [rot, blau] TRUE [rot] <= [rot, blau] TRUE [rot] >= [rot, blau] FALSE 13/19

15 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen: Anwendungsbeispiele Vergleichsoperationen werden durch den Mengentyp vereinfacht: var ch: Char; ('0' <= ch) and (ch <= '9') ist wahr, wenn ch eine Ziffer darstellt Oft müssen beim Lesen einer Datei bestimmte Werte übersprungen werden. Die Anweisung: while ch in [' ',',','.',';',':'] do read(F,ch); "springt" über Leerzeichen und Satzzeichen in der File "F". Der Mengentyp erlaubt einen bündigeren, besser lesbaren Ausdruck: ch in ['0'..'9'] 14/19

16 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen: Anwendungsbeispiele Das Kombinieren verschiedener Objekte wird durch den Mengentyp vereinfacht: type Zutaten = (Aepfel, Erdbeeren, Bananen, Nuesse, Icecream, Schokolade, Rahm, Zucker); Dessert = set of Zutaten; var Bananensplit, Strudel, Bananensplit_plus: Dessert; Bananensplit_plus:= Bananensplit + [Rahm]; Bananensplit:= [Bananen, Icecream, Schokolade]; 15/19

17 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Mengentypen: Anwendungsbeispiele Test auf Mengenzugehörigkeit: var Rahmschlagen: boolean; Rahmschlagen:= Rahm in Bananensplit; Rahmschlagen:= Rahm in Bananensplit_plus; True False 16/19

18 Direkte Filezugriffe Datentypen: Mengen Individualisierbare DatentypenIndividualisierbare Datentypen

19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Kategorien von Datentypen Standardtypen Dazu gehören: Integer, Real, Boolean und Char. Die Eigenschaften dieser Typen wird durch den Pascal-Standard und die verwendete Programmierumgebung bestimmt. Individualisierbare Typen Dazu gehören: Aufzählungstyp, Unterbereichstyp, Mengentyp, Arraytyp, Recordtyp, Filetyp, Zeigertyp. Die Eigenschaften dieser Typen können Programmiererinnen und Programmierer im Deklarationsabschnitt selber definieren. 17/19

20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Arrays als Typen const N = 50; type zeichenarray = array ['a'..'z'] of Integer; var B: array [1..N] of zeichenarray; {ein zweidimensionaler Array, der mit ganzen Zahlen und Buchstaben indiziert wird} 18/19

21 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Records als Typen type Monate =(Jan,Feb,Mar,Apr,Mai,Jun, Jul,Aug,Sep,Okt,Nov,Dez); Datum =record Tag: 1..31; Monat: Monate; Jahr: Integer end; Person =record Name: string[50]; Geschl: (M, W, KA); GebTag: Datum end; var d1, d2: Datum; p1, p2, p3: Person; PListe: array[1..100] of Person; 19/19 Aufzählungstyp Unterbereichstyp


Herunterladen ppt "Agenda für heute, 22. Juni, 2006 Direkte FilezugriffeDirekte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen."

Ähnliche Präsentationen


Google-Anzeigen