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);