Klasy Wektor2D i Wektor3D
Treść zadania
Zaprojektuj klasy Wektor2D (wektor na płaszczyźnie) i Wektor3D (wektor w przestrzeni).
Obie klasy mają mieć:
- konstruktor z domyślnymi współrzędnymi równymi 0:
Wektor2D(x=0, y=0),Wektor3D(x=0, y=0, z=0), - dodawanie i odejmowanie wektorów operatorami
+i-(metody__add__i__sub__) — wynikiem jest nowy wektor tej samej klasy, - metodę
iloczyn_skalarny(other)— np. dla 3D: $x_A x_B + y_A y_B + z_A z_B$, - metodę
dlugosc()zwracającą długość (moduł) wektora — np. dla 3D: $\sqrt{x^2 + y^2 + z^2}$, - porównanie
==(metoda__eq__) — wektory są równe, gdy wszystkie współrzędne są równe, - metodę
__str__()zwracającą współrzędne w nawiasach, np.(1, -2)albo(1, -2, 3).
Dodatkowo klasa Wektor3D ma metodę iloczyn_wektorowy(other), która zwraca nowy obiekt Wektor3D:
$A \times B = (y_A z_B - z_A y_B,\ z_A x_B - x_A z_B,\ x_A y_B - y_A x_B)$.
Program wczytuje dwa wektory. Jeśli linia zawiera dwie liczby, tworzony jest Wektor2D, a jeśli trzy — Wektor3D. Następnie wypisuje wyniki działań.
Dane wejściowe
- 1. linia: współrzędne wektora $A$ — dwie albo trzy liczby całkowite oddzielone spacjami
- 2. linia: współrzędne wektora $B$ — tyle samo liczb całkowitych co dla $A$
Dane wyjściowe
Kolejne linie:
Wektor A: <A>
Wektor B: <B>
Suma wektorów: <A + B>
Różnica wektorów A - B: <A - B>
Iloczyn skalarny: <A · B>
Iloczyn wektorowy: <A × B>
Długość wektora A: <|A|>
Wektory są równe.
- Linię
Iloczyn wektorowy: …wypisz tylko dla wektorów trójwymiarowych. - Długość wypisz z dokładnością do 2 miejsc po przecinku.
- W ostatniej linii wypisz
Wektory są równe.alboWektory są różne.
Ograniczenia
- Współrzędne są liczbami całkowitymi z przedziału $[-100, 100]$.
Przykłady
-3 -3 -3 5 5 5
Wektor A: (-3, -3, -3) Wektor B: (5, 5, 5) Suma wektorów: (2, 2, 2) Różnica wektorów A - B: (-8, -8, -8) Iloczyn skalarny: -45 Iloczyn wektorowy: (0, 0, 0) Długość wektora A: 5.20 Wektory są różne.
3 4 1 -2
Wektor A: (3, 4) Wektor B: (1, -2) Suma wektorów: (4, 2) Różnica wektorów A - B: (2, 6) Iloczyn skalarny: -5 Długość wektora A: 5.00 Wektory są różne.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 18
Zadania w tym rozdziale uczą projektowania klas: konstruktora __init__, atrybutów, metod, metod statycznych (@staticmethod) oraz metod specjalnych, dzięki którym obiekty można wypisywać (__str__), porównywać (__eq__) i łączyć operatorami (__add__, __sub__, __mul__, …). Ostatnie zadania wprowadzają też wyjątki (raise, try/except), klasy danych (@dataclass) i generatory (yield).
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- W każdym zadaniu dostajesz kod startowy ze szkieletem klasy, a zwykle także z gotowym wczytywaniem danych i wypisywaniem wyników. Twoim zadaniem jest przede wszystkim uzupełnienie metod klasy — wynik programu zależy od tego, jak działa Twoja klasa.
- Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np.
Kolo,Prostokat. - „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np.
f"{x:.2f}"(3.00,-0.50). - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono0 0 0 0
Wektor A: (0, 0) Wektor B: (0, 0) Suma wektorów: (0, 0) Różnica wektorów A - B: (0, 0) Iloczyn skalarny: 0 Długość wektora A: 0.00 Wektory są równe.
Test 2
Nie uruchomiono1 0 0 0 1 0
Wektor A: (1, 0, 0) Wektor B: (0, 1, 0) Suma wektorów: (1, 1, 0) Różnica wektorów A - B: (1, -1, 0) Iloczyn skalarny: 0 Iloczyn wektorowy: (0, 0, 1) Długość wektora A: 1.00 Wektory są różne.
Test 3
Nie uruchomiono2 3 4 5 6 7
Wektor A: (2, 3, 4) Wektor B: (5, 6, 7) Suma wektorów: (7, 9, 11) Różnica wektorów A - B: (-3, -3, -3) Iloczyn skalarny: 56 Iloczyn wektorowy: (-3, 6, -3) Długość wektora A: 5.39 Wektory są różne.
Test 4
Nie uruchomiono-2 5 -2 5
Wektor A: (-2, 5) Wektor B: (-2, 5) Suma wektorów: (-4, 10) Różnica wektorów A - B: (0, 0) Iloczyn skalarny: 29 Długość wektora A: 5.39 Wektory są równe.
Test 5
Nie uruchomiono1 -2 2 1 -2 2
Wektor A: (1, -2, 2) Wektor B: (1, -2, 2) Suma wektorów: (2, -4, 4) Różnica wektorów A - B: (0, 0, 0) Iloczyn skalarny: 9 Iloczyn wektorowy: (0, 0, 0) Długość wektora A: 3.00 Wektory są równe.
Test 6
Nie uruchomiono6 -8 -1 3
Wektor A: (6, -8) Wektor B: (-1, 3) Suma wektorów: (5, -5) Różnica wektorów A - B: (7, -11) Iloczyn skalarny: -30 Długość wektora A: 10.00 Wektory są różne.