Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Strukturierte Variablen: Records

Ähnliche Präsentationen


Präsentation zum Thema: "Strukturierte Variablen: Records"—  Präsentation transkript:

1 Strukturierte Variablen: Records
Agenda für heute, 8. Juni, 2006 Strukturierte Variablen: Records Kombiniertes Strukturieren Bitmap-Dateien Datentypen: Unterbereichstypen

2 Strukturierung von Variablen: Records
Der Datentyp Record erlaubt Variablen, die aus mehreren Feldern bestehen. Die einzelnen Felder können von unterschiedlichem Typ sein. var R: record Tag: byte; Monat: string[9]; Jahr: integer; Werktag: boolean end; Variablebezeichner Recordfeld Feldbezeichner Feldtyp 2/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

3 Records: Datenzugriff
Für den Zugriff auf ein Recordfeld muss der Bezeichner der Record- Variablen zusammen mit dem Bezeichner des Feldes angegeben werden. R 12 'Juni' 2000 false R.Monat = Feld mit Wert 'Juni' Recordbezeichner Feldbezeichner Punkt 3/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

4 Kombiniertes Strukturieren
Strukturierte Variablen: Records Kombiniertes Strukturieren Bitmap-Dateien Datentypen: Unterbereichstypen

5 EinJahr: array[1..366]of Tag; Heute: Tag;
Arrays von Records Type Tag = record Datum: byte; Wochentag: string[2]; Monat: string[9]; Jahr: integer; Werktag: boolean end; var EinJahr: array[1..366]of Tag; Heute: Tag; Heute 8 'MO' 'Juni' 2006 true 4/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

6 Arrays und Records kombiniert: Zuweisungsbeispiele
EinJahr[127].Datum:= 8; EinJahr[127].Wochentag:= 'MO'; EinJahr[127].Monat:= 'Mai'; EinJahr[127].Jahr:= 2006; EinJahr[127].Werktag:= true Heute:= EinJahr[127]; Heute.Datum:= 9; Heute.Wochentag:= 'DI'; EinJahr[128]:= Heute; 5/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

7 Tage: array[1..31] of string[2]; end;
Records mit Arrays Type WTage = record Jahr: byte; Monat: byte; Tage: array[1..31] of string[2]; end; var Mai06, Jan07: WTage; Wochentag: string[2]; Mai06 2006 5 'MO' 'DI' 'MI' 'DO' 'FR' ... 6/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

8 Records und Arrays kombiniert: Zuweisungsbeispiele
Mai06.Jahr:= 2006; Mai06.Monat:= 5; j:= 1; for i:= 0 to 4 do Mai06.Tage[j+i*7]:= 'MO'; Jan07:= Mai06; Jan07.Jahr:= 2007; Jan07.Monat:= 1; Wochentag:= Mai06.Tage[22]; ('DO') 7/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

9 Wochentag: Jahreszeit; Monat: M;
Records mit Records Type M = record Name: string[9]; Jzeit: char; end; Jahreszeit = record Tag: ; Monat: M; end; var Wochentag: Jahreszeit; Monat: M; Wochentag 23 'Januar' 'W' 8/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

10 Records mit Records: Zuweisungsbeispiele
Wochentag.Monat.Jzeit:= 'W' Monat.Name:= 'Oktober'; Monat.Jzeit:= 'H'; Wochentag.Monat:= Monat; 9/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

11 Bitmap-Dateien Strukturierte Variablen: Records
Kombiniertes Strukturieren Bitmap-Dateien Datentypen: Unterbereichstypen

12 Bitmap-Dateien Dateikopf (BITMAPFILEHEADER)
BMP-Dateien bestehen aus drei Teilen: dem Dateikopf, dem Informationsblock und den Bilddaten. Dateikopf (BITMAPFILEHEADER) Informationsblock (BITMAPINFO): Bitmap-Eigenschaften (BITMAPINFOHEADER) Eventuell: Farbmasken Eventuell: Farbtabelle Eventuell: Ungenutzter Platz Bilddaten 14 Byte 40 Byte Die Bilddaten werden zeilenweise gespeichert. In der Regel beginnen die Bilddaten mit der letzten und enden mit der ersten Bildzeile. 10/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

13 bmpheader = packed record
Bitmap-Dateien bmpheader = packed record {----- fileinfo } bfType: word; bfSize: longint; bfReservde1: word; bfReserved2: word; bfOffBits: longint; {----- Bildinfo } biSize: longint; biWidth: longint; biHeight: longint; biPlanes: word; biBitCount: word; biCompress: longint; biSizeImage: longint; biXPPM: longint; biYPPM: longint; biClrUsed: longint; biClrImport: longint; end; Typendeklaration für Filevariable um Dateikopf und Informationsblock einer Bitmap-Datei einzulesen. 11/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

14 Bitmap-Dateien lesen Delphi stellt eine Komponente "Image" zur Verfügung mit der Bilddaten bearbeitet werden können Um ein Bild einzulesen wird Image.Picture.LoadFromFile(Dateiname); aufgerufen 12/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

15 Bitmap-Dateien lesen In den Feldern Image.Height und Image.Width werden anschliessend die Bildhöhe resp. die Bildbreite angegeben Im Feld Image.Canvas wird das Bild gespeichert Mit Image.Canvas.Pixel(x,y) wird auf den Pixel an der Position x,y im Bild zugegriffen 13/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

16 Bitmap-Dateien lesen Im Gegensatz zu Textdateien müssen bei Bilddateien zuerst Daten mit Informationen über die gespeicherten Daten (das Bild) gelesen werden Der erste Zugriff geschieht auf eine typisierte Datei (Datentyp Record für Dateikopf und Informationsblock) Die nächsten Zugriffe lesen die Bilddaten Byte um Byte (untypisierte Datei) Delphi erledigt diese Operationen für uns, wir können sie aber auch selber ausprogrammieren (z.B. im TurboPascal) 14/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

17 Bitmap-File von Übung 7 selber einlesen
var bildheader: file of bmpheader; bh: bmpheader; binfo: file of byte; i: integer; b:byte; begin AssignFile(bildheader,'Bild1.bmp'); Reset(bildheader); read(bildheader,bh); CloseFile(bildheader); AssignFile(binfo,'Bild1.bmp'); Reset(binfo) end; for i:= 1 to bh.bfOffBits do Read(binfo,b); {fileheader überspringen} {ab hier Bilddaten verarbeiten} 15/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

18 Bitmap-File von Übung 7 selber einlesen (Fortsetzung)
var bl, gr, rot: byte; x, y, i: cardinal; for y:= bh.biHeight-1 downto 0 do begin for x:= 0 to bh.biWidth-1 do Read(binfo,bl); Read(binfo,gr); Read(fi1,rot); Image1.Canvas.pixels[x,y]:= 65536*bl+256*gr+rot; end; for i:= 1 to bh.biWidth mod 4 do Read(binfo,rot) {die Null-Einträge am Ende der Zeile überspringen} 16/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

19 Datentypen: Unterbereichstypen
Strukturierte Variablen: Records Kombiniertes Strukturieren Bitmap-Dateien Datentypen: Unterbereichstypen

20 Unterbereichstypen Wird bei der Verwendung einer Variablen vorausgesetzt, dass sie nur Werte innerhalb eines zusammenhängenden Teilbereichs eines ordinalen Typs annehmen darf, dann kann dies durch das Deklarieren eines Unterbereichstyps überwacht werden. const n = 1000; type Teilbereich = 1..n; var x: Teilbereich; oder: x: ; Die Konstanten, welche die Bereichsgrenzen angeben, müssen vom gleichen ordinalen Typ, dem Host-Typ sein. Alle Operationen, die über den Werten des Host-Typs zulässig sind, können auch über den Werten des Unterbereichstyps ausgeführt werden. 17/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

21 Unterbereichstypen Beispiele type Kleinbuchstabe = 'a'..'z';
Ziffer = '0'..'9'; Index = 1..25; Werktag = Montag..Freitag; Als Unterbereich des Aufzählungstyps Tag var Eingabezeichen: Kleinbuchstabe; A: array[Index] of real; Arbeitstag: Werktag; Wtage: array[Werktag] of integer; x: integer; x:= Wtage[dienstag] 18/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

22 Unterbereichstypen: Eigenschaften
Verschiedene Unterbereiche eines bestimmten Typs können im gleichen Ausdruck vorkommen. var klein: 1..10; mittel: ; gross: integer; Der folgende Ausdruck ist gültig: klein * mittel + gross 19/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

23 Unterbereichstypen: Eigenschaften
Unterbereichstypen können auf beiden Seiten einer Zuweisungs-anweisung stehen: mittel:= klein; klein:= mittel; Prüfung nur während der Programmausführung möglich. (Mit Bereichsprüfung kompilieren). 20/20 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich


Herunterladen ppt "Strukturierte Variablen: Records"

Ähnliche Präsentationen


Google-Anzeigen