Klasa Macierz
Treść zadania
Zaprojektuj klasę Macierz:
- Konstruktor
__init__(self, wiersze)przyjmuje listę wierszy (listę list liczb). - Operatory
+,-i*(metody__add__,__sub__,__mul__) zwracają nową macierz — sumę, różnicę i iloczyn macierzy. Jeśli działania nie da się wykonać, metoda zwracaNone:- dodawanie i odejmowanie wymagają macierzy o tych samych wymiarach,
- iloczyn $A \cdot B$ wymaga, by liczba kolumn $A$ była równa liczbie wierszy $B$. Element wyniku to $c_{ij} = \sum_k a_{ik} b_{kj}$.
- Porównanie
==(metoda__eq__) — macierze są równe, gdy mają te same wymiary i te same elementy. - Metoda
__str__()zwraca macierz jako napis: kolejne wiersze w osobnych liniach, elementy wiersza oddzielone pojedynczą spacją.
Program wczytuje macierze $A$ i $B$, wypisuje je, a potem wypisuje $A + B$, $A - B$, $A \cdot B$ i informację, czy macierze są równe.
Dane wejściowe
- 1. linia: liczby $n$ i $m$ — liczba wierszy i kolumn macierzy $A$
- kolejne $n$ linii: wiersze macierzy $A$ ($m$ liczb całkowitych oddzielonych spacjami)
- następna linia: liczby $p$ i $q$ — liczba wierszy i kolumn macierzy $B$
- kolejne $p$ linii: wiersze macierzy $B$ ($q$ liczb całkowitych oddzielonych spacjami)
Dane wyjściowe
Pięć bloków, każdy zakończony pustą linią, a po nich jedna linia z wynikiem porównania:
Macierz A:
<A>
Macierz B:
<B>
Suma macierzy:
<A + B>
Różnica macierzy A - B:
<A - B>
Iloczyn macierzy A * B:
<A * B>
Macierze A i B są równe.
- Jeśli działania nie da się wykonać, zamiast macierzy wypisz w bloku jedną linię:
Niezgodne wymiary. - W ostatniej linii wypisz
Macierze A i B są równe.alboMacierze A i B są różne.
Ograniczenia
- $1 \le n, m, p, q \le 5$
- Elementy macierzy są liczbami całkowitymi z przedziału $[-100, 100]$.
Przykłady
2 2 1 3 4 2 2 2 5 0 1 3
Macierz A: 1 3 4 2 Macierz B: 5 0 1 3 Suma macierzy: 6 3 5 5 Różnica macierzy A - B: -4 3 3 -1 Iloczyn macierzy A * B: 8 9 22 6 Macierze A i B są różne.
Na przykład element w drugim wierszu i drugiej kolumnie iloczynu to $4 \cdot 0 + 2 \cdot 3 = 6$.
1 2 1 2 1 2 3 4
Macierz A: 1 2 Macierz B: 3 4 Suma macierzy: 4 6 Różnica macierzy A - B: -2 -2 Iloczyn macierzy A * B: Niezgodne wymiary. Macierze A i B są różne.
Macierz $1 \times 2$ można pomnożyć tylko przez macierz o 2 wierszach.
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 uruchomiono1 1 7 1 1 -3
Macierz A: 7 Macierz B: -3 Suma macierzy: 4 Różnica macierzy A - B: 10 Iloczyn macierzy A * B: -21 Macierze A i B są różne.
Test 2
Nie uruchomiono2 3 1 2 3 4 5 6 2 3 1 1 1 0 0 0
Macierz A: 1 2 3 4 5 6 Macierz B: 1 1 1 0 0 0 Suma macierzy: 2 3 4 4 5 6 Różnica macierzy A - B: 0 1 2 4 5 6 Iloczyn macierzy A * B: Niezgodne wymiary. Macierze A i B są różne.
Test 3
Nie uruchomiono2 3 1 0 2 -1 3 1 3 2 3 1 2 1 1 0
Macierz A: 1 0 2 -1 3 1 Macierz B: 3 1 2 1 1 0 Suma macierzy: Niezgodne wymiary. Różnica macierzy A - B: Niezgodne wymiary. Iloczyn macierzy A * B: 5 1 4 2 Macierze A i B są różne.
Test 4
Nie uruchomiono2 2 2 -1 0 4 2 2 2 -1 0 4
Macierz A: 2 -1 0 4 Macierz B: 2 -1 0 4 Suma macierzy: 4 -2 0 8 Różnica macierzy A - B: 0 0 0 0 Iloczyn macierzy A * B: 4 -6 0 16 Macierze A i B są równe.
Test 5
Nie uruchomiono1 3 1 2 3 3 1 4 5 6
Macierz A: 1 2 3 Macierz B: 4 5 6 Suma macierzy: Niezgodne wymiary. Różnica macierzy A - B: Niezgodne wymiary. Iloczyn macierzy A * B: 32 Macierze A i B są różne.
Test 6
Nie uruchomiono3 3 1 0 0 0 1 0 0 0 1 3 3 1 2 3 4 5 6 7 8 9
Macierz A: 1 0 0 0 1 0 0 0 1 Macierz B: 1 2 3 4 5 6 7 8 9 Suma macierzy: 2 2 3 4 6 6 7 8 10 Różnica macierzy A - B: 0 -2 -3 -4 -4 -6 -7 -8 -8 Iloczyn macierzy A * B: 1 2 3 4 5 6 7 8 9 Macierze A i B są różne.