Napisać klasę Wektor reprezentującą wektor na płaszczyźnie kartezjańskiej. Klasa
ta powinna mieć dwie składowe prywatne – wspołrzędne (x, y) oraz następujące
metody publiczne:
• konstruktor bezparametrowy tworzący wektor zerowy,
• konstruktor z parametrami umożliwiającymi ustalenie wartości współrzędnych wektora,
• metodę dlugosc , której wynikiem ma być długość wektora,
• metodę Wektor pomnoz(double a) , której wynikiem ma być nowy wektor
będący wynikiem przemnożenia bieżącego wektora przez podany skalar,
• metodę Wektor dodaj(const Wektor &w) , której wynikiem ma być nowy
wektor będący sumą bieżącego i podanego wektora,
• metodę Wektor odejmij(const Wektor &w) , której wynikiem ma być nowy wektor będący różnicą bieżącego i podanego wektora,
• metodę Wektor normalizuj() , której wynikiem powinien być nowy wektor
równy znormalizowanemu bieżącemu wektorowi,
• metodę string toString() , której wynikiem powinien być łańcuch opisujący wektor, np. ”[1.2, -3]”
Przykład zastosowania klasy Wektor:
int main(int argc, const char *argv[])
{
Wektor w1(2, 4),
w2(1, 0);
cout << "w1 = " << w1.toString() << " w2 = " << w2.toString() << endl;
cout << "dł. w1 = " << w1.dlugosc() << " dł. w2 = " << w2.dlugosc() << endl;
cout << "w1 + w2 = " << w1.dodaj(w2).toString() << endl;
cout << "w1 - w2 = " << w1.odejmij(w2).toString() << endl;
cout << "w1 * -2 = " << w1.pomnoz(-2).toString() << endl;
cout << "w1 po normalizacji = " << w1.normalizuj().toString() << endl;
cout << "w2 po normalizacji = " << w2.normalizuj().toString() << endl;
cout << "w1 * 2 - w2 = " << w1.pomnoz(2).odejmij(w2).toString() << endl;
return 0;
}
Wynik działania przykładowego programu:
w1 = [2.00, 4.00] w2 = [1.00, 0.00]
dł. w1 = 4.47214 dł. w2 = 1
w1 + w2 = [3.00, 4.00]
w1 - w2 = [1.00, 4.00]
w1 * -2 = [-4.00, -8.00]
w1 po normalizacji = [0.45, 0.89]
w2 po normalizacji = [1.00, 0.00]
w1 * 2 - w2 = [3.00, 8.00]
Odpowiedź:
#include <iostream>
#include <cmath>
#include <sstream>
#include <iomanip>
using namespace std;
class Wektor
{
private:
double x;
double y;
public:
Wektor()
{
x = 0;
y = 0;
}
Wektor(double x_, double y_)
{
x = x_;
y = y_;
}
double dlugosc()
{
return sqrt(pow(x, 2) + pow(y, 2));
}
Wektor pomnoz(double a)
{
return Wektor(a * x, a * y);
}
Wektor dodaj(const Wektor &w)
{
return Wektor(x + w.x, y + w.y);
}
Wektor odejmij(const Wektor &w)
{
return Wektor(x - w.x, y - w.y);
}
Wektor normalizuj()
{
return Wektor(x / dlugosc(), y / dlugosc());
}
string toString()
{
stringstream wektorStr;
wektorStr << fixed << setprecision(2) << "[" << x << ", " << y << "]";
return wektorStr.str();
}
};
int main(int argc, const char* argv[])
{
Wektor w1(2, 4), w2(1, 0);
cout << "w1 = " << w1.toString() << " w2 = " << w2.toString() << endl;
cout << "dl. w1 = " << w1.dlugosc() << " dl. w2 = " << w2.dlugosc() << endl;
cout << "w1 + w2 = " << w1.dodaj(w2).toString() << endl;
cout << "w1 - w2 = " << w1.odejmij(w2).toString() << endl;
cout << "w1 * -2 = " << w1.pomnoz(-2).toString() << endl;
cout << "w1 po normalizacji = " << w1.normalizuj().toString() << endl;
cout << "w2 po normalizacji = " << w2.normalizuj().toString() << endl;
cout << "w1 * 2 - w2 = " << w1.pomnoz(2).odejmij(w2).toString() << endl;
return 0;
}
Wyjaśnienie:
Jakby były jakieś pytania to pisz