Weil ich diese Aufgabe nicht in den alten Musterlösungen finden kann, stelle ich ein letztes Mal mein eigenes Programm zur Verfügung. Es gibt aber nicht so viele Kommentare, weil ich die Vererbungsregeln mittlerweile ganz gut verstanden habe, was für die Aufgabe nötig ist. (Was auf dem Blatt len_sq() heißt, ist bei mir normquadrat().)
- Code: Alles auswählen
/*
* source.cpp
*
* Created on: 02.07.2010
* Author: Kazaar
* Title: Aufgabe 29
*/
#include <iostream>
#include <cmath>
using namespace std;
class vektor3 {
protected:
double x, y, z;
public:
vektor3(double a = 0, double b = 0, double c = 0) {
x = a;
y = b;
z = c;
}
~vektor3() {
//cout << "Einen 3er-Vektor gelöscht." << endl;
}
void ausgeben();
double normquadrat();
double norm();
double zwischenwinkel(vektor3);
};
void vektor3::ausgeben() {
cout << x << ", " << y << ", " << z;
}
double vektor3::normquadrat() {
return x*x + y*y + z*z;
}
double vektor3::norm() {
return sqrt(normquadrat());
}
double vektor3::zwischenwinkel(vektor3 b) {
double oben = x * b.x + y * b.y + z * b.z;
double unten = norm() * b.norm();
return acos(oben / unten) / 3.14159265; // Winkel zwischen zwei Vektoren in Einheiten von pi ausgeben
}
class vektor4: public vektor3 {
private:
double t;
public:
vektor4(double d = 0, double a = 0, double b = 0, double c = 0) {
x = a;
y = b;
z = c;
t = d;
}
~vektor4() {
//cout << "Einen 4er-Vektor gelöscht." << endl;
}
void ausgeben();
double normquadrat();
};
void vektor4::ausgeben() {
cout << t << ", ";
vektor3::ausgeben();
}
double vektor4::normquadrat() {
return t*t - vektor3::normquadrat();
}
int main() {
vektor4 a(0,1,0,0);
vektor4 b(2,0,4,0);
cout << "Vektor a: ";
a.ausgeben();
cout << endl << "Normquadrat (Minkowski): " << a.normquadrat() << endl;
cout << "Vektor b: ";
b.ausgeben();
cout << endl << "Normquadrat (Minkowski): " << b.normquadrat() << endl;
cout << "Zwischenwinkel: " << a.zwischenwinkel(b) << " pi" << endl;
//b.vektor3::ausgeben(); // gibt die Raumkomponenten von b aus
cout << endl << "-- Beendet --" << endl;
return 0;
}