Klasa LiczbaZespolona

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

Treść zadania

Zaprojektuj klasę LiczbaZespolona opisującą liczbę zespoloną $a + bi$:

  • konstruktor __init__(self, re=0, im=0) — część rzeczywista i urojona,
  • operatory +, -, *, / (metody __add__, __sub__, __mul__, __truediv__) zwracające nową liczbę zespoloną:
    • $(a + bi)(c + di) = (ac - bd) + (ad + bc)i$,
    • $\frac{a + bi}{c + di} = \frac{ac + bd}{c^2 + d^2} + \frac{bc - ad}{c^2 + d^2}i$ (dzielnik jest różny od zera),
  • porównanie == (metoda __eq__) — liczby są równe, gdy mają równe części rzeczywiste i urojone,
  • metodę modul() zwracającą moduł liczby: $|a + bi| = \sqrt{a^2 + b^2}$,
  • metodę __str__() zwracającą napis a + bi albo a - bi (gdy część urojona jest ujemna, wypisz minus i jej wartość bezwzględną). Obie części wypisz z dokładnością do 2 miejsc po przecinku, np. 9.00 + 12.00i, -3.00 - 3.00i.

Program wczytuje liczby $A$ i $B$ i wypisuje wyniki działań.

Dane wejściowe

  • 1. linia: dwie liczby całkowite — część rzeczywista i urojona liczby $A$
  • 2. linia: dwie liczby całkowite — część rzeczywista i urojona liczby $B$

Dane wyjściowe

Osiem linii:

Liczba A: <A>
Liczba B: <B>
Suma: <A + B>
Różnica A - B: <A - B>
Iloczyn: <A * B>
Iloraz A / B: <A / B>
Moduł liczby A: <|A|>
Liczby są równe.
  • Jeśli $B = 0 + 0i$, zamiast ilorazu wypisz Iloraz A / B: nie można dzielić przez zero.
  • Moduł wypisz z dokładnością do 2 miejsc po przecinku.
  • W ostatniej linii wypisz Liczby są równe. albo Liczby są różne.

Ograniczenia

  • Części rzeczywiste i urojone są liczbami całkowitymi z przedziału $[-100, 100]$.

Przykład

Wejście
9 12
-3 -3
Wyjście
Liczba A: 9.00 + 12.00i
Liczba B: -3.00 - 3.00i
Suma: 6.00 + 9.00i
Różnica A - B: 12.00 + 15.00i
Iloczyn: 9.00 - 63.00i
Iloraz A / B: -3.50 - 0.50i
Moduł liczby A: 15.00
Liczby są różne.

Iloczyn: $(9 + 12i)(-3 - 3i) = (-27 + 36) + (-27 - 36)i = 9 - 63i$.

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
1 1
1 1
Oczekiwane wyjście
Liczba A: 1.00 + 1.00i
Liczba B: 1.00 + 1.00i
Suma: 2.00 + 2.00i
Różnica A - B: 0.00 + 0.00i
Iloczyn: 0.00 + 2.00i
Iloraz A / B: 1.00 + 0.00i
Moduł liczby A: 1.41
Liczby są równe.

Test 2

Nie uruchomiono
Wejście
3 4
0 0
Oczekiwane wyjście
Liczba A: 3.00 + 4.00i
Liczba B: 0.00 + 0.00i
Suma: 3.00 + 4.00i
Różnica A - B: 3.00 + 4.00i
Iloczyn: 0.00 + 0.00i
Iloraz A / B: nie można dzielić przez zero
Moduł liczby A: 5.00
Liczby są różne.

Test 3

Nie uruchomiono
Wejście
0 0
2 -1
Oczekiwane wyjście
Liczba A: 0.00 + 0.00i
Liczba B: 2.00 - 1.00i
Suma: 2.00 - 1.00i
Różnica A - B: -2.00 + 1.00i
Iloczyn: 0.00 + 0.00i
Iloraz A / B: 0.00 + 0.00i
Moduł liczby A: 0.00
Liczby są różne.

Test 4

Nie uruchomiono
Wejście
5 -2
-1 3
Oczekiwane wyjście
Liczba A: 5.00 - 2.00i
Liczba B: -1.00 + 3.00i
Suma: 4.00 + 1.00i
Różnica A - B: 6.00 - 5.00i
Iloczyn: 1.00 + 17.00i
Iloraz A / B: -1.10 - 1.30i
Moduł liczby A: 5.39
Liczby są różne.

Test 5

Nie uruchomiono
Wejście
-4 0
0 2
Oczekiwane wyjście
Liczba A: -4.00 + 0.00i
Liczba B: 0.00 + 2.00i
Suma: -4.00 + 2.00i
Różnica A - B: -4.00 - 2.00i
Iloczyn: 0.00 - 8.00i
Iloraz A / B: 0.00 + 2.00i
Moduł liczby A: 4.00
Liczby są różne.
Uruchom z własnymi danymi