Bildverarbeitung mit C++

Ähnliche Dokumente
Vergleich verschiedener OO-Programmiersprachen

Errata-Liste zum Kurs: Einführung in die Programmiersprache C++ (9. Auflage)

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Einführung in die Programmierung für Wirtschaftsinformatik

Einführung in C++ Operatoren überladen (Klassen)

Algorithmen zur Datenanalyse in C++

Praktikum Betriebssysteme 1. Aufgabe (1)

Advanced Programming in C

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Probeklausur: BTI2 / Programmieren I Prof. Dr. H. Herold Erlaubte Hilfsmittel: Vorlesungsmitschrift; C-Bücher

Fakultät Angewandte Informatik Lehrprofessur für Informatik

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Kurzeinführung in C/C++ Elementare Datentypen in C++

Zeiger: Der Adressoperator &

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

public class SternchenRechteckGefuellt {

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Erste Schritte der Programmierung in C

AuD-Tafelübung T-B5b

Objektorientierte Programmierung

Programmieren in C++ Überladen von Methoden und Operatoren

Aufgabe 5: Die Paderbox

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Einführung in die Programmierung

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch

Klausur in Programmieren

Studentische Lösung zum Übungsblatt Nr. 7

Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung

Java Einführung Abstrakte Klassen und Interfaces

C-Propädeutikum Funktionen

Kommunikation. Björn und Georg

Kurze Einführung in die Programmiersprache C++ und in Root

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Modellierung und Programmierung 1

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Objektorientierte Programmierung

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

II.3.1 Rekursive Algorithmen - 1 -

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Klausur in Programmieren

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, , Ingo Josopait

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Informatik Repetitorium SS Volker Jaedicke

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Einführung in die Programmierung Wintersemester 2011/12

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

6 Speicherorganisation

Einführung in die Programmierung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Breiten- und Tiefensuche in Graphen

Algorithmen und Datenstrukturen

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Überladen von Operatoren

Übungspaket 19 Programmieren eigener Funktionen

Lösung Übungszettel 6 Aufgabe 1-4

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Suchen und Sortieren

Systemprogrammierung: Erste Schritte (P) Das Manpage-System (P) Versionsverwaltung mit Subversion (P)

CORBA Implementierung von Client und Server

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einstieg in die Informatik mit Java

Informatikpraktikum CE2. Übung 1: Einfach verkettete Liste

Typische Speicherfehler in C

Informatik I (D-MAVT)

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Name: Klausur Programmierkonzepte SS 2011

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Eine Einführung in C-Funktionen

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Objektbasierte Entwicklung

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Übersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C:

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Musterlösungen zur Klausur Informatik 3

Der C++ Crashkurs v1.0

Programmieren in C/C++ und MATLAB

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Speicher und Adressraum

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Transkript:

Bildverarbeitung mit C++ Lösung zum Übungsblatt 1 Dr. Stefan Florczyk 2003 // Aufgabe 2 #include<iostream.h> #include<math.h> double factorial(double d) double erg = 1; for (int i = 1; i<=d; i++) erg = erg*i; return erg; double power(double d, int n) double erg = 1; for (int i =1; i<=abs(n);i++) erg = erg*d; if (n >=0) return erg; return 1/erg; double sinus_calculation(double x) double erg = 0; double epsilon = power(10,-10); double diff = 1; int i =0; while(epsilon<=diff) diff = erg; erg = erg + power(-1,i)*power(x,2*i+1)/factorial(2*i+1); diff = fabs(erg-diff); i++; return erg;

int main(void) double d = 1.5; double div = floor(d/(2*m_pi)); d = d-div*2*m_pi; cout<<sinus_calculation(d)<<"\n"; cout<<sin(1.5)<<"\n"; return 0; // Aufgabe 3: #include <iostream.h> #include <string.h> class camera char* name; double abmessungen[3]; //Array zum Abspeichern von Höhe, Breite und Länge der Kamera double gewicht; int id; camera* next; public: camera(); void init(const char* name, const double a[], int id, double g); void set_name(const char* name); const char* get_name() const; void set_abmessungen (const double a[]); double get_abmessungen (int i) const; void set_id(int n); int get_id() const; void set_gewicht(double b); double get_gewicht() const; void set_next(camera* c); camera* get_next() const; ~camera(); ; camera::camera() name = 0; for(int i=0;i<3;i++) abmessungen[i] = 0; gewicht = 0; id = 0; next = 0;

inline void camera::set_id(int n) id = n; inline int camera::get_id() const return id; inline void camera::set_abmessungen (const double a[]) for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; inline double camera::get_abmessungen (int i) const return abmessungen[i]; void camera::init (const char* name, const double a[], int id, double g) if (this->name) delete [] this->name; if (name) // Wenn name auf 0 zeigt, // dann braucht kein Speicher bereitgestellt werden this->name = new char [strlen(name)+1]; // es wird die notwendige Größe des dynamischen Speichers ermittelt strcpy(this->name, name); // zeichenweises Kopieren this->name = 0; for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; this->id = id; gewicht = g; next =0; inline const char* camera::get_name() const return name;

void camera::set_name(const char* camera_name) if (name) delete [] name; if(camera_name) name = new char [strlen(camera_name)+1]; // es wird die notwendige Größe des dynamischen Speichers ermittelt strcpy(name, camera_name); // zeichenweises Kopieren name = 0; inline double camera::get_gewicht() const return gewicht; inline void camera::set_gewicht(double g) gewicht = g; inline void camera::set_next(camera* p) next = p; inline camera* camera::get_next() const return next; inline camera::~camera() // die Definition des Destruktors delete [] name; void main(int argc, char * argv[]) camera* c1 = new camera; double a1[3] = 5,10,20; c1->init("cam1",a1,1,1); camera* c2 = new camera;

double a2[3] = 10,20,30; c2->init("cam2",a2,2,1.5); camera* c3 = new camera; double a3[3] = 10,15,20; c3->init("cam3",a3,3,2); // es wurden drei Kameras angelegt // Aufgabe 4: #include <iostream.h> #include <string.h> class camera char* name; double abmessungen[3]; //Array zum Abspeichern von Höhe, Breite und //Länge der Kamera double gewicht; int id; camera* next; public: camera(); void init(const char* name, const double a[], int id, double g); void set_name(const char* name); const char* get_name() const; void set_abmessungen (const double a[]); double get_abmessungen (int i) const; void set_id(int n); int get_id() const; void set_gewicht(double b); double get_gewicht() const; void set_next(camera* c); camera* get_next() const; void drucke_namen(const camera* c) const; camera* loesche_camera(int id, camera* c) const; camera* remove_liste(camera* c); ~camera(); ; camera::camera() name = 0; for(int i=0;i<3;i++) abmessungen[i] = 0; gewicht = 0; id = 0; next = 0;

inline void camera::set_id(int n) id = n; inline int camera::get_id() const return id; inline void camera::set_abmessungen (const double a[]) for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; inline double camera::get_abmessungen (int i) const return abmessungen[i]; void camera::init (const char* name, const double a[], int id, double g) if (this->name) delete [] this->name; if (name) // Wenn name auf 0 zeigt, dann braucht kein Speicher // bereitgestellt werden this->name = new char [strlen(name)+1]; // es wird die notwendige // Größe des dynamischen Speichers ermittelt strcpy(this->name, name); // zeichenweises Kopieren this->name = 0; for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; this->id = id; gewicht = g; next = 0; inline const char* camera::get_name() const return name;

void camera::set_name(const char* camera_name) if (name) delete [] name; if(camera_name) name = new char [strlen(camera_name)+1]; // es wird die notwendige // Größe des dynamischen Speichers ermittelt strcpy(name, camera_name); // zeichenweises Kopieren name = 0; inline double camera::get_gewicht() const return gewicht; inline void camera::set_gewicht(double g) gewicht = g; inline void camera::set_next(camera* p) next = p; inline camera* camera::get_next() const return next; void camera::drucke_namen(const camera* c) const const camera* h = c; while(h) cout<<h->get_name()<<"\n"; h = h->get_next(); camera* camera::loesche_camera(int id, camera* c) const

if (!c) return c; camera *h1 = c; camera *h2 = c; while (id!= h1->get_id() && h1->get_next()!=0) h2 = h1; h1 = h1->get_next(); if (h1->get_id() == id && h1->get_id()!= c->get_id()) // Element mit gefundener id wird gelöscht h2->set_next(h1->get_next()); delete h1; return c; if (id == c->get_id()) // Sonderfall: Das erste Element der Liste wird gelöscht h2=h1->get_next(); delete h1; return h2; return c; // es wurde kein Element gelöscht camera* camera::remove_liste(camera* c) camera* h; while(c) h = c; c = c->get_next(); delete h; return c; inline camera::~camera() // die Definition des Destruktors

delete [] name; void main(int argc, char * argv[]) camera* c1 = new camera; double a1[3] = 5,10,20; c1->init("cam1",a1,1,1); camera* c2 = new camera; double a2[3] = 10,20,30; c2->init("cam2",a2,2,1.5); camera* c3 = new camera; double a3[3] = 10,15,20; c3->init("cam3",a3,3,2); // es wurden drei Kameras angelegt const camera* c; c1->set_next(c2); c2->set_next(c3); c3->set_next(0); // die drei Kameras wurden in die Liste eingefügt c3->drucke_namen(c1); // die komplette Liste wird durchlaufen c = c3->loesche_camera(2,c1); // und die Namen werden ausgegeben // das zweite Element der Liste wird // gelöscht // die neue Liste wird ausgegeben c3->drucke_namen(c); c = c3->remove_liste(c1); // Aufgabe 5: #include <iostream.h> #include <string.h> class camera char* name; double abmessungen[3]; // Array zum Abspeichern von Höhe, Breite und // Länge der Kamera double gewicht; int id; camera* next; public: camera(); void init(const char* name, const double a[], int id, double g);

; void set_name(const char* name); const char* get_name() const; void set_abmessungen (const double a[]); double get_abmessungen (int i) const; void set_id(int n); int get_id() const; void set_gewicht(double b); double get_gewicht() const; void set_next(camera* c); camera* get_next() const; ~camera(); camera::camera() name = 0; for(int i=0;i<3;i++) abmessungen[i] = 0; gewicht = 0; id = 0; next = 0; inline void camera::set_id(int n) id = n; inline int camera::get_id() const return id; inline void camera::set_abmessungen (const double a[]) for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; inline double camera::get_abmessungen (int i) const return abmessungen[i]; void camera::init (const char* name, const double a[], int id, double g) if (this->name) delete [] this->name;

if (name) // Wenn name auf 0 zeigt, // dann braucht kein Speicher bereitgestellt werden this->name = new char [strlen(name)+1]; // es wird die notwendige Größe des dynamischen Speichers ermittelt strcpy(this->name, name); this->name = 0; for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; // zeichenweises Kopieren this->id = id; gewicht = g; next = 0; inline const char* camera::get_name() const return name; void camera::set_name(const char* camera_name) if (name) delete [] name; if(camera_name) name = new char [strlen(camera_name)+1]; // es wird die notwendige Größe des dynamischen Speichers ermittelt strcpy(name, camera_name); // zeichenweises Kopieren name = 0; inline double camera::get_gewicht() const return gewicht; inline void camera::set_gewicht(double g)

gewicht = g; inline void camera::set_next(camera* p) next = p; inline camera* camera::get_next() const return next; inline camera::~camera() // die Definition des Destruktors delete [] name; class liste_camera camera* first; public: liste_camera(camera* c); void drucke_namen(const camera*c) const; camera* loesche_camera(int id, camera* c) const; camera* remove_liste(camera* c); ~liste_camera(); ; inline liste_camera::liste_camera(camera* c) first =c; camera* liste_camera::loesche_camera(int id, camera* c) const if (!c) return c; camera *h1 = c; camera *h2 = c; while (id!= h1->get_id() && h1->get_next()!=0) h2 = h1;

h1 = h1->get_next(); if (h1->get_id() == id && h1->get_id()!= c->get_id()) // Element mit gefundener id wird gelöscht h2->set_next(h1->get_next()); delete h1; return c; if (id == c->get_id()) // Sonderfall: Das erste Element der Liste wird gelöscht h2=h1->get_next(); delete h1; return h2; return c; // es wurde kein Element gelöscht camera* liste_camera::remove_liste(camera* c) camera* h; while(c) h = c; c = c->get_next(); delete h; return c; void liste_camera::drucke_namen(const camera* c) const const camera* h = c; while(h) cout<<h->get_name()<<"\n"; h = h->get_next(); inline liste_camera::~liste_camera() delete first;

void main(int argc, char* argv[]) camera* c1 = new camera; double a1[3] = 5,10,20; c1->init("cam1",a1,1,1); camera* c2 = new camera; double a2[3] = 10,20,30; c2->init("cam2",a2,2,1.5); camera* c3 = new camera; double a3[3] = 10,15,20; c3->init("cam3",a3,3,2); // es wurden drei Kameras angelegt camera* c; c1->set_next(c2); c2->set_next(c3); c3->set_next(0); // die drei Kameras wurden in die Liste eingefügt liste_camera *lc = new liste_camera(c1); lc->drucke_namen(c1); // die komplette Liste wird durchlaufen // und die Namen werden ausgegeben c = lc->loesche_camera(2,c1); // das zweite Element der Liste wird gelöscht lc->drucke_namen(c); // die neue Liste wird ausgegeben c = lc->remove_liste(c1);