agenda für heute, 22. juni, 2006 direkte filezugriffedirekte filezugriffe datentypen: mengen...

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

Upload: alberich-helling

Post on 06-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

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

Agenda für heute, 22. Juni, 2006

• Direkte FilezugriffeDirekte Filezugriffe

• Datentypen: Mengen

• Individualisierbare Datentypen

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

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

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

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

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

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

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

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

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

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?

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

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;

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

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Standardprozeduren und -funktionen für Files

AssignFile Weist einer Dateivariablen den Namen einer externen Datei zu. CloseFile Schliesst eine geöffnete Datei. Eof Prüft, ob das Ende der Datei erreicht ist. Erase Löscht eine externe Datei. FilePos Liefert die aktuelle Position innerhalb einer Datei. FileSize Liefert die aktuelle Grösse einer Datei. GetDir Ermittelt das aktuelle Verzeichnis eines Laufwerks. IOResult Liefert den Status der zuletzt durchgeführten Ein-/Ausgabe-Operation. MkDir Erzeugt ein Unterverzeichnis. Rename Benennt eine externe Datei um. Reset Öffnet eine existierende Datei. Rewrite Erzeugt und öffnet eine neue Datei. RmDir Löscht ein leeres Unterverzeichnis. Seek Bewegt den Positionszeiger zur angegebenen Filekomponente. Truncate Schneidet eine Datei an der aktuellen Position ab.

8/19

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

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. Eoln Prüft, ob das Zeilenende in einer Textdatei erreicht ist. Flush Leert den Puffer einer Textdatei, die für die Ausgabe geöffnet wurde. Read Bei typisierten Dateien: liest eine oder mehrere Komponenten in eine

Variable. Bei Textdateien: liest einen oder mehrere Werte in eine oder mehrere Variablen.

Readln Führt einen Aufruf von Read aus und springt dann zum Anfang der nächsten Zeile der Datei.

SeekEof Liefert den Dateiendestatus einer Datei (EOF) zurück. SeekEoln Liefert den Zeilenendestatus einer Datei (EOLN) zurück. SetTextBuf Weist einer Textdatei einen Ein-/Ausgabepuffer zu. Write Bei typisierten Dateien: Schreibt eine Variable in eine

Dateikomponente. Bei Textdateien: Schreibt einen oder mehrere Werte in die Datei.

Writeln Ruft die Prozedur Write auf und schreibt dann einen Zeilenvorschub in die Datei.

9/19

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

• Direkte Filezugriffe

• Datentypen: MengenDatentypen: Mengen• Individualisierbare Datentypen

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

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

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

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 2n 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 0..255 liegen.

11/19

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

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

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

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

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

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

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

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

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

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

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

• Direkte Filezugriffe

• Datentypen: Mengen

• Individualisierbare DatentypenIndividualisierbare Datentypen

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

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Kategorien von Datentypen

StandardtypenDazu gehören: Integer, Real, Boolean und Char.

Die Eigenschaften dieser Typen wird durch den Pascal-Standard und die verwendete Programmierumgebung bestimmt.

Individualisierbare TypenDazu 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

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

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

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

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Records als Typen

typeMonate = (Jan,Feb,Mar,Apr,Mai,Jun,

Jul,Aug,Sep,Okt,Nov,Dez); Datum = record

Tag: 1..31;Monat: Monate;Jahr: Integer

end;

Person = recordName: string[50];Geschl: (M, W, KA);GebTag: Datum

end;vard1, d2: Datum;p1, p2, p3: Person; PListe: array[1..100] of Person;

19/19

Aufzählungstyp

Unterbereichstyp