Records

 Documents

 24 views
of 23
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Description
Agenda für heute, 8. Juni, 2006 ã Strukturierte Variablen: Records ã Kombiniertes Strukturieren ã Bitmap-Dateien ã Datentypen: Unterbereichstypen…
Share
Transcript
Agenda für heute, 8. Juni, 2006 • Strukturierte Variablen: Records • Kombiniertes Strukturieren • Bitmap-Dateien • Datentypen: Unterbereichstypen 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 Variablebezeichner Tag: byte; Monat: string[9]; Jahr: integer; Recordfeld Werktag: boolean end; Feldbezeichner Feldtyp Programmieren und Problemlösen 2/20 © Institut für Computational Science, ETH Zürich 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 Programmieren und Problemlösen 3/20 © Institut für Computational Science, ETH Zürich • Strukturierte Variablen: Records • Kombiniertes Strukturieren • Bitmap-Dateien • Datentypen: Unterbereichstypen 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 Programmieren und Problemlösen 4/20 © Institut für Computational Science, ETH Zürich 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; Programmieren und Problemlösen 5/20 © Institut für Computational Science, ETH Zürich 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' ... 'MI' Programmieren und Problemlösen 6/20 © Institut für Computational Science, ETH Zürich 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') Programmieren und Problemlösen 7/20 © Institut für Computational Science, ETH Zürich Records mit Records Type M = record Name: string[9]; Jzeit: char; end; Jahreszeit = record Tag: 1..366; Monat: M; end; var Wochentag: Jahreszeit; Monat: M; Wochentag 23 'Januar' 'W' Programmieren und Problemlösen 8/20 © Institut für Computational Science, ETH Zürich Records mit Records: Zuweisungsbeispiele Wochentag.Monat.Jzeit:= 'W' Monat.Name:= 'Oktober'; Monat.Jzeit:= 'H'; Wochentag.Monat:= Monat; Programmieren und Problemlösen 9/20 © Institut für Computational Science, ETH Zürich • Strukturierte Variablen: Records • Kombiniertes Strukturieren • Bitmap-Dateien • Datentypen: Unterbereichstypen Bitmap-Dateien BMP-Dateien bestehen aus Dateikopf drei Teilen: dem Dateikopf, 14 Byte (BITMAPFILEHEADER) dem Informationsblock und den Bilddaten. Informationsblock (BITMAPINFO): Bitmap-Eigenschaften 40 Byte Die Bilddaten werden (BITMAPINFOHEADER) zeilenweise gespeichert. Eventuell: Farbmasken In der Regel beginnen die Eventuell: Farbtabelle Bilddaten mit der letzten Eventuell: Ungenutzter Platz und enden mit der ersten Bildzeile. Bilddaten Eventuell: Ungenutzter Platz Programmieren und Problemlösen 10/20 © Institut für Computational Science, ETH Zürich Bitmap-Dateien bmpheader = packed record {----- fileinfo --------} bfType: word; bfSize: longint; bfReservde1: word; bfReserved2: word; bfOffBits: longint; Typendeklaration {----- Bildinfo --------} für Filevariable um biSize: longint; Dateikopf und biWidth: longint; Informationsblock biHeight: longint; einer Bitmap-Datei biPlanes: word; einzulesen. biBitCount: word; biCompress: longint; biSizeImage: longint; biXPPM: longint; biYPPM: longint; biClrUsed: longint; biClrImport: longint; end; Programmieren und Problemlösen 11/20 © Institut für Computational Science, ETH Zürich 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 Programmieren und Problemlösen 12/20 © Institut für Computational Science, ETH Zürich 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 Programmieren und Problemlösen 13/20 © Institut für Computational Science, ETH Zürich 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) Programmieren und Problemlösen 14/20 © Institut für Computational Science, ETH Zürich 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} Programmieren und Problemlösen 15/20 © Institut für Computational Science, ETH Zürich 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 begin 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} end; Programmieren und Problemlösen 16/20 © Institut für Computational Science, ETH Zürich • Strukturierte Variablen: Records • Kombiniertes Strukturieren • Bitmap-Dateien • Datentypen: Unterbereichstypen 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 Die Konstanten, welche die n = 1000; Bereichsgrenzen angeben, type müssen vom gleichen ordinalen Typ, dem Host-Typ sein. Teilbereich = 1..n; var x: Teilbereich; Alle Operationen, die über den oder: Werten des Host-Typs zulässig var sind, können auch über den Werten des Unterbereichstyps x: 1..1000; ausgeführt werden. Programmieren und Problemlösen 17/20 © Institut für Computational Science, ETH Zürich Unterbereichstypen Beispiele type Kleinbuchstabe = 'a'..'z'; Als Unterbereich des Ziffer = '0'..'9'; Aufzählungstyps Tag Index = 1..25; Werktag = Montag..Freitag; var Eingabezeichen: Kleinbuchstabe; A: array[Index] of real; Arbeitstag: Werktag; Wtage: array[Werktag] of integer; x: integer; x:= Wtage[dienstag] Programmieren und Problemlösen 18/20 © Institut für Computational Science, ETH Zürich Unterbereichstypen: Eigenschaften Verschiedene Unterbereiche eines bestimmten Typs können im gleichen Ausdruck vorkommen. var klein: 1..10; mittel: 0..100; gross: integer; Der folgende Ausdruck ist gültig: klein * mittel + gross Programmieren und Problemlösen 19/20 © Institut für Computational Science, ETH Zürich Unterbereichstypen: Eigenschaften Unterbereichstypen können auf beiden Seiten einer Zuweisungs- anweisung stehen: 0..100 1..10 mittel:= klein; klein:= mittel; 1..10 0..100 Prüfung nur während der Programmausführung möglich. (Mit Bereichsprüfung kompilieren). Programmieren und Problemlösen 20/20 © Institut für Computational Science, ETH Zürich
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks