C++ :: Aufgabe #287

2 Lösungen Lösungen öffentlich

Mathematische Vektoroperationen

Anfänger - C++ von thunderbird - 28.04.2020 um 21:51 Uhr
Erstellen Sie ein Programm/ eine Funktion, mit der Vektorberechnungen durchgeführt werden können.
"Vektor" soll eine eigens erstellte Klasse sein, die aus 3 Fließkommazahlen bestehen.
Zudem beinhaltet die Klasse "Vektor" eine Methode zur Skalarmultiplikation, Addition, Subtraktion, Division und um das Kreuzprodukt zu berrechnen.
Erstellen Sie zur Darstellung eine Ausgabemethode.

Hinweis:
- Anstatt neue Methoden zu erstellen, können (sofern möglich) bereits vorhandene überladen werden.
- Mathematische Rechenregeln unter: https://de.wikipedia.org/wiki/Vektor

Lösungen:

vote_ok
von JKooP (3200 Punkte) - 30.04.2020 um 17:41 Uhr
CPP_Aufgabe_287_Vektoren.cpp

Quellcode ausblenden C-Code
#include "Vektor.h"

int main()
{
    auto v1 = Vektor(3, 7, 6);
    auto v2 = Vektor(2, 5, 3);
    auto skalar = 3;

    auto summe = v1 + v2;
    cout << summe  << endl;

    auto differenz = v2 - v1;
    cout << differenz << endl;

    auto produkt = v1 * v2;
    cout << produkt << endl;

    auto skalarProdukt = skalar * v1;
    cout << skalarProdukt << endl;

    auto skalarQuotient = v2 / skalar;
    cout << skalarQuotient << endl;

    auto kreuzProdukt = v1 / v2;
    cout << kreuzProdukt << endl;
}


Vektor.h

Quellcode ausblenden C-Code
#pragma once
#include <iostream>
#include <ostream>
using namespace std;

class Vektor
{
private:
    Vektor() {}
    double X1 = 0, X2 = 0, X3 = 0;

public:
    Vektor(double x1, double x2, double x3) { X1 = x1; X2 = x2; X3 = x3; };

    friend Vektor operator +(Vektor const&, Vektor const&);
    friend Vektor operator -(Vektor const&, Vektor const&);
    friend Vektor operator *(double const&, Vektor const&);
    friend double operator *(Vektor const&, Vektor const&);
    friend Vektor operator /(Vektor const&, Vektor const&);
    friend Vektor operator /(Vektor const&, double const&);
    friend ostream& operator<<(ostream& os, Vektor const&);
};


Vektor.cpp

Quellcode ausblenden C-Code
#include "Vektor.h"

// Ausgabe als Vektor
ostream& operator<<(ostream& os, Vektor const& v)
{
    return os << v.X1 << ", " << v.X2 << ", " << v.X3;
};

// Addition
Vektor operator +(Vektor const& v1, Vektor const& v2)
{
    return Vektor(v1.X1 + v2.X1, v1.X2 + v2.X2, v1.X3 + v2.X3);
};

// Subtraktion
Vektor operator -(Vektor const& v1, Vektor const& v2)
{
    return Vektor(v1.X1 - v2.X1, v1.X2 - v2.X2, v1.X3 - v2.X3);
};

// Skalar- Multiplikation
Vektor operator *(double const& skalar, Vektor const& v)
{
    return Vektor(v.X1 * skalar, v.X2 * skalar, v.X3 * skalar);
};

// Multiplikation
double operator *(Vektor const& v1, Vektor const& v2)
{
    return v1.X1 * v2.X1 + v1.X2 * v2.X2 + v1.X3 * v2.X3;
};

// Kreuzprodukt
Vektor operator /(Vektor const& v1, Vektor const& v2)
{
    return Vektor(v1.X2 * v2.X3 - v1.X3 * v2.X2, v1.X3 * v2.X1 - v1.X1 * v2.X3, v1.X1 * v2.X2 - v1.X2 * v2.X1);
};

// Skalar- Division
Vektor operator /(Vektor const& v,double const& skalar)
{
    return Vektor(v.X1 / skalar, v.X2 / skalar, v.X3 / skalar);
}; 
vote_ok
von dewe (460 Punkte) - 01.05.2020 um 15:41 Uhr
Quellcode ausblenden C-Code
#ifndef VEKTOR_H
#define VEKTOR_H

using namespace std;

class Vektor
{
    public:                                     
        Vektor(float a = 0, float b = 0, float c = 0);         

    void print_Vektor();
    float rAvalue();
    float rBvalue();
    float rCvalue();

    float skalar(Vektor b);
    void multiplikation(int n);
    void add(Vektor b);
    void sub(Vektor b);
    void product(Vektor a, Vektor b);

    private:
        float A;
        float B;
        float C;
};

#endif // VEKTOR_H


Quellcode ausblenden C-Code
#include <iostream>
#include "vektor.h"

Vektor::Vektor(float a, float b, float c)
{
    A = a;
    B = b;
    C = c;
}

void Vektor::print_Vektor()
{
    cout << A << endl;
    cout << B << endl;
    cout << C << endl;
}

float Vektor::rAvalue()
{
    return A;
}

float Vektor::rBvalue()
{
    return B;
}

float Vektor::rCvalue()
{
    return C;
}

float Vektor::skalar(Vektor b)
{
    return (A*b.rAvalue()+B*b.rBvalue()+C*b.rCvalue());
}

void Vektor::multiplikation(int a)
{
    A = A*a;
    B = B*a;
    C = C*a;
}

void Vektor::add(Vektor b)
{
    A += b.rAvalue();
    B += b.rBvalue();
    C += b.rCvalue();
}

void Vektor::sub(Vektor b)
{
    A -= b.rAvalue();
    B -= b.rBvalue();
    C -= b.rCvalue();
}

void Vektor::product(Vektor a, Vektor b)
{
    A = a.rBvalue()*b.rCvalue() - a.rCvalue()*b.rBvalue();
    B = a.rCvalue()*b.rAvalue() - a.rAvalue()*b.rCvalue();
    C = a.rAvalue()*b.rBvalue() - a.rBvalue()*b.rAvalue();
}


Quellcode ausblenden C-Code
#include <iostream>
#include "vektor.h"

using namespace std;

int main()
{
    Vektor a(1, 2, 1);
    Vektor b(3, 4, 5);
    Vektor c(0, 0, 0);

    cout<< "Skalarprodukt von Vektor a mit Vektor b" << endl;
    cout <<a.skalar(b) << endl;

    cout<< "Vektor a wird mit 4 multipliziert" << endl;
    a.multiplikation(4);
    a.print_Vektor();

    cout<< "Zum Vektor a wird der Vektor b addiert" << endl;
    a.add(b);
    a.print_Vektor();

    cout<< "Zum Vektor a wird der Vektor b wieder subtrahiert" << endl;
    a.sub(b);
    a.print_Vektor();


    cout<< "Das Kreuzprodukt von Vektor a und b" << endl;
    c.product(a, b);
    c.print_Vektor();

    return 0;
}