Klasy Wektor2D i Wektor3D

Zadanie 4 z 11 · rozdział 18Trudność: 2 z 3classoperatorymath

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. albo Wektory są różne.

Ograniczenia

  • Współrzędne są liczbami całkowitymi z przedziału $[-100, 100]$.

Przykłady

Wejście
-3 -3 -3
5 5 5
Wyjście
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.
Wejście
3 4
1 -2
Wyjście
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.
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.

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 uruchomiono
Wejście
0 0
0 0
Oczekiwane wyjście
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 uruchomiono
Wejście
1 0 0
0 1 0
Oczekiwane wyjście
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 uruchomiono
Wejście
2 3 4
5 6 7
Oczekiwane wyjście
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
Wejście
-2 5
-2 5
Oczekiwane wyjście
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 uruchomiono
Wejście
1 -2 2
1 -2 2
Oczekiwane wyjście
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 uruchomiono
Wejście
6 -8
-1 3
Oczekiwane wyjście
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.
Uruchom z własnymi danymi