Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

HW05 - maticové operace

Termín odevzdání: 19.12.2021 23:59 CET

Hodnocení: 5b

Zadání

Program načte soubor matrixes.dat, ve kterém jsou umístěny definice matic. Textový řetězec, vyjadřující maticovou operaci, je předán programu jako parametr příkazové řádky. Vaším úkolem je provést zadanou operaci a vypsat na standardní výstup výslednou matici.

Chyby

  • Pokud nebude vstup ve správném formátu nebo nepůjde provést příslušnou maticovou operaci (např. data matice neodpovídají deklarované velikosti), vypište “Error: Chybny vstup!”.
  • Pokud jsou ve výrazu použity názvy matic, které nejsou definovány, vypište “Error: Matice nenalezena!”.

Volání programu

# maticovy soucet
$python3 HW05.py v=a+b
 
# maticovy soucin
$python3 HW05.py v=a*b
 
# determinant matice
$python3 HW05.py det(a)

Vyhodnocení domácího úkolu není automatické. Není dovolenou používat knihovny jako numpy.
K vyhodnocení výrazu s maticemi využijte vestavěné funkce eval() nebo exec().

Formát vstupu

Definice matic jsou v souboru matrixes.dat. Každá matice má na prvním řádku nejprve název a svoji velikost ($n$, $m$) a následuje $n$ řádků vždy s $m$ hodnotami matice. Jednotlivé hodnoty jsou oddělené mezerami, ale za poslední hodnotou je pouze znak nového řádku.

a 3 3
10 20 30
40 50 60
70 80 90

b 3 3
11 44 47
98 17 77
40 33 18

Formát výstupu

Formát výstupu je stejný, ale obsahuje pouze jednu matici nebo skalár. Pokud je výsledkem matice, jmenuje se v.

Doporuční pro implementaci

Pro implementaci domácího úkolu navrhněte třídu Matrix, která bude popisovat matici. Parametry konstruktoru bude velikost matice, součástí budou přetížené magické metody pro aritmetické operace:

__add__
__sub__
__mul__

Pro výpočet determinantu implementujte funkci, jejíž argumentem bude instance třídy Matrix.

Příklad 1

$ \left( \begin{array}{cc} 76 & 98 & -31 \\
30 & 30 & 32 \end{array} \right) - \left( \begin{array}{c} 89 & 25 & 38 \\
1 & -32 & -38 \end{array} \right) = \left( \begin{array}{c} -13 & 73 & -69 \\
29 & 62 & 70 \end{array} \right) $

matrixes.dat Operace Očekávaný výstup Očekávaný chybový výstup
a 2 3
76 98 -31
30 30 32

b 2 3
89 25 38
1 -32 -38
v=a-b
v 2 3
-13 73 -69
29 62 70
žádný

Příklad 2

$ \left( \begin{array}{cc} -59 & 78 & -85\end{array} \right) \times \left( \begin{array}{c} 78 \\
-28 \\
-97\end{array} \right) = \left( \begin{array}{c} 1459\end{array} \right) $

matrixes.dat Operace Očekávaný výstup Očekávaný chybový výstup
a 1 3
-59 78 -85

b 3 1
78
-28
-97
v=a*b
v 1 1
1459
žádný

Příklad 3

matrixes.dat Operace Očekávaný výstup Očekávaný chybový výstup
a 2 3
16 41 -98

b 3 1
96
-67
49
a*b žádný
Error: Chybny vstup!

Příklad 4

$ \left( \begin{array}{cc} 81 & -96 & -56 & -9 \\
-19 & 66 & 37 & -21 \\
20 & 49 & -71 & -49 \\
45 & -96 & 20 & 8\end{array} \right) \times \left( \begin{array}{c} -89 & -96 \\
76 & 75 \\
65 & 2\end{array} \right) $

matrixes.dat Operace Očekávaný výstup Očekávaný chybový výstup
a 4 4
81 -96 -56 -9
-19 66 37 -21
20 49 -71 -49
45 -96 20 8

b 3 2
-89 -96
76 75
65 2
a*b žádný
Error: Chybny vstup!

Příklad 5

matrixes.dat Operace Očekávaný výstup Očekávaný chybový výstup
a 3 3
1 2 3
4 5 6
7 8 9
det(a) 0
žádný
courses/bab37zpr/hw/hw05.txt · Last modified: 2021/11/10 19:42 by viteks