Agenda für heute, 20. Juni, 2010 Strukturieren von Programmen: UnitsStrukturieren von Programmen: Units Datentypen: Unterbereichstypen Übung 7: Bitmap-Dateien.

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Pascal-Datentypen Skalare Typen Zeiger- Typen Strukturierte Typen
10. Grundlagen imperativer Programmiersprachen
12. Iteration und Rekursion
der Universität Oldenburg
_____________________________ Einführung in die Bildbearbeitung Jucquois-Delpierre 1 Grundlagen Photoshop Ein zentraler Begriff bei Pixelgrafiken.
Java: Dynamische Datentypen
Bilder und Rasterdaten
ARRAY oder FELD oder VEKTOR
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Semantische Fehler Seminar im Grundstudium WS2002/2003:
DVG Klassen und Objekte
Dateiformate für Rasterbilder
Delphi II - OOP IFB Fortbildung
Agenda für heute, 8. Juni, 2006 Strukturierte Variablen: RecordsStrukturierte Variablen: Records Kombiniertes Strukturieren Bitmap-Dateien Datentypen:
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Bildbearbeitung im Unterricht
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmiersprache C 4
Wiederholte Programmausführung
Willkommen... Studentinnen und Studenten der Studiengänge Umweltnaturwissenschaften Erdwissenschaften Agrarwissenschaften zur.
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Konzept einer Programmiersprache!
Grundlagen von Objekt-Pascal Erstellt von J. Rudolf überarbeitet von H.Brehm.
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Permanente Datenspeicherung
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
Agenda für heute, 9. Juni, 2005 Direkte FilezugriffeDirekte Filezugriffe Textfiles Bitmap-Dateien Datentypen: Mengen.
Mala Bachmann, Beispiel Velorennen Velorennen mit 5 TeilnehmerInnen Wie kann die durchschnittliche Rennzeit berechnet werden?
Mala Bachmann, Beispiel Velorennen (1) Velorennen mit 5 TeilnehmerInnen Wie kann die durchschnittliche Rennzeit berechnet werden?
MODULA-2.
Objektorientierte Programmierung
Agenda für heute, 22. Juni, 2006 Direkte FilezugriffeDirekte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen.
Willkommen... Studentinnen und Studenten der Studiengänge Umweltnaturwissenschaften Erdwissenschaften Agrarwissenschaften zur.
Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units.
Datentypen: integer, char, string, boolean
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Willkommen... Studentinnen und Studenten der Studiengänge Umweltnaturwissenschaften Erdwissenschaften Agrarwissenschaften zur.
Praxismodul 7 Agenda für heute, 15. Juni, 2006 Dateiformate
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Programmierparadigmen
Agenda für heute, 28. April, 2005 Strukturierte VariablenStrukturierte Variablen Arrays.
Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 26. Mai, 2005 Strukturierte Variablen: RecordsStrukturierte Variablen: Records Kombiniertes Strukturieren Individualisierbare Datentypen.
Programmierparadigmen
Kurzreferat über Funktionen und Prozeduren Von Alexander RothHomepage:
Agenda für heute, 21. April, 2005 Interaktion mit Pascal-ProgrammenInteraktion mit Pascal-Programmen Dateneingabe Programmsteuerung Debugging Datentypen:
The Programming Language Pascal
Prüfungsbesprechung Barbara Scheuner Vorlesung: Programmieren und Problemlösen Prof. Hans Hinterberger.
Extended Pascal Erweiterung von Pascal shadi Behzadipour shadi Shadi behzadipour.
Objektorientierte (OO) Programmierung
Wiederholte Programmausführung
Programmieren und Problemlösen
Units und Übung 7 Barbara Scheuner
Programmierparadigmen
Objektorientierte Programmierung
Strukturierte Variablen: Records
Datentypen: integer, char, string, boolean
Direkte Filezugriffe Agenda für heute, 22. Juni, 2006
Programmieren und Problemlösen
Prüfungsbesprechung Barbara Scheuner
Strukturierte Variablen: Records
Datentypen: integer, char, string, boolean
Parametrisierte Prozeduren und Funktionen
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
The Programming Language Pascal
 Präsentation transkript:

Agenda für heute, 20. Juni, 2010 Strukturieren von Programmen: UnitsStrukturieren von Programmen: Units Datentypen: Unterbereichstypen Übung 7: Bitmap-Dateien

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Strukturieren von Programmen 1. Schritt: Gliederung des Quellcodes Einem Programm können wir Struktur verleihen, indem wir es in Prozeduren gliedern, von denen jede eine spezielle Aufgabe innerhalb des Progamms übernimmt. 2. Schritt: Import von Objektcode Die Struktur eines Programms können wir ergänzen, indem wir bereits kompilierte Prozeduren in den Objektcode des Programms importieren. 2/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Import von Objektcode aus einer "Unit" program xyz; uses math; var alpha: integer; sinalpha: real; begin { main }... read(alpha); sinalpha:= sin(alpha); write('Sinus von ',alpha,': ';... Diese Anweisung sagt dem Compiler, dass alle in der Unit "Math" dekla- rierten Prozeduren dem Programm zur Verfügung stehen sollen. 3/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Getrennte Kompilation von Programmen und Units Programm Quellcode Unit A Quellcode Compiler Unit A Objektcode Programm Objektcode Muss neu kompiliert werden, wenn das Programm oder eine der Units geändert wird. Unit B Quellcode Unit B Objektcode Muss neu kompiliert werden, wenn die Unit geändert wird. Überschaubarkeit durch Modularisierung (Programmieren im Grossen) 4/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Sichtbarkeit bei Units program X; uses A; var R, S: integer; begin R:= S + 1; p1; p2; end. unit A; interface procedure p1; procedure p2; implementation var j: real; procedure p1; begin... end; procedure p2; var k: real; begin k := k*j;... end; end. 5/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Sichtbarkeit bei Units program X; uses A; var R, S: integer; begin R:= S + 1; j:= R - S; p2; q3; end. unit A; interface uses B; var j: real; procedure p2; implementation procedure p2; var k: real; begin k := k*j; q1;... end; end. unit B; interface procedure q1 procedure q2 procedure q3; implementation procedure q1; begin... end;... end. kann via Unit A auch die Bezeichner im Interface von Unit B verwenden 6/19

Strukturierung von Programmen: Units Datentypen: UnterbereichstypenDatentypen: Unterbereichstypen Übung 7: Bitmap-Dateien

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich 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: var 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. 7/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich 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] 8/19

Programmieren und Problemlösen © 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: ; gross: integer; Der folgende Ausdruck ist gültig: klein * mittel + gross 9/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich 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). 10/19

Strukturieren von Programmen: Units Datentypen: Unterbereichstypen Übung 7: Bitmap-DateienÜbung 7: Bitmap-Dateien

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Praxismodul 7: Bildanalyse Problemstellung: Anteil der Waldfläche auf der Luftaufnahme eines Geländeausschnittes Programmiermethodik: Spiralmodell Inkrementelles Vorgehen 1. Bild einlesen, anzeigen, manipulieren 2. Pixel, die Wald darstellen erkennen und zählen 3. Angenäherte Lösung entwickeln (MC Methode) 11/19

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Bitmap-Dateien 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 Eventuell: Ungenutzter Platz 14 Byte 40 Byte 12/19 Die Bilddaten werden zeilenweise gespeichert. In der Regel beginnen die Bilddaten mit der letzten und enden mit der ersten Bildzeile.

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Bitmap-Dateien 13/19 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.

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Bitmap-Dateien lesen 14/19 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 © Institut für Computational Science, ETH Zürich Bitmap-Dateien lesen 15/19 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 © Institut für Computational Science, ETH Zürich Bitmap-Dateien lesen 16/19 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 © Institut für Computational Science, ETH Zürich Prinzip der Rasterdaten rot blau gelb türkis grün schwarz Farbe des Bild- punktes (Pixel): blaugrünrot rgb-Werte,die als Bilddaten gespeichert werden: 17/ '711' '776'960 2'927'828 65' Kombinierter rgb-Wert:

Programmieren und Problemlösen © 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} 18/19

Programmieren und Problemlösen © 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; 19/19