Termín odevzdání | 23.11.2019 23:59 CET |
---|---|
Povinné zadání | 5b |
Bonusové zadání | 5b |
Počet uploadů | 10 |
V této úloze budete mít za úkol implementovat maticové operace sčítání, odčítání a násobení. Všechny prvky všech matic (i v průběhu výpočtu) se vejdou do 32-bitového znaménkového typu integer.
Pokud nebude vstup ve správném formátu nebo nepůjde provést příslušnou maticovou operaci, tak vypište “Error: Chybny vstup!
” a konec řádku na standardní chybový výstup a ukončete program s návratovou hodnotou 100
.
malloc()
, calloc()
), tak doporučujeme použít program Valgrind ještě před nahráním do odevzdávacího systému pro kontrolu práce s pamětí.
getline()
. V případě bonusového zadání se může použití funkce getline()
zdát výhodné, ale ani tady to není nutné. Opět můžete načítat první řádek postupně po celých číslech a tím identifikovat počet sloupců. Následně můžete již alokovat potřebnou velikost paměti, např. funkcí realloc()
a postupovat identicky s povinným/volitelným zadáním.
Na standardním vstupu jsou pouze dvě matice s jednou operací (+,-,*). Vaším úkolem je provést zadanou operaci a vypsat na standardní výstup výslednou matici.
Na standardním vstupu jsou dvě matice (nebo v bonusovém zadání i více matic) oddělené jedním řádkem se znakem operace (+,-,*). Každá matice má na prvním řádku nejprve 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.
Formát výstupu je stejný, ale obsahuje pouze jednu matici. Nezapomeňte, že na konci řádku není mezera a i za posledním řádkem je znak nového řádku.
$
\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)
$
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
2 3 76 98 -31 30 30 32 - 2 3 89 25 38 1 -32 -38 | 2 3 -13 73 -69 29 62 70 | žádný | 0 |
$
\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)
$
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
1 3 -59 78 -85 * 3 1 78 -28 -97 | 1 1 1459 | žádný | 0 |
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
2 3 16 41 -98 * 3 1 96 -67 49 | žádný | Error: Chybny vstup! | 100 |
$
\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)
$
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
4 4 81 -96 -56 -9 -19 66 37 -21 20 49 -71 -49 45 -96 20 8 * 3 2 -89 -96 76 75 65 2 | žádný | Error: Chybny vstup! | 100 |
Na vstupu je sekvence matic o maximální délce 100 spolu se zadanými operacemi. Operace vyhodnocujte podle jejich priority a vypište až výslednou matici. To odpovídá tomu, jako kdyby byl následující výraz s maticemi A až F:
$$ A + B * C + D * E - F$$
ozávorkován následujícím způsobem:
$$ A + (B * C) + (D * E) - F$$
$ \left( \begin{array}{cc} 6 & 4\end{array} \right) + \left( \begin{array}{cc} -6 & 7\end{array} \right) + \left( \begin{array}{cc} -6 & -4\end{array} \right) = \left( \begin{array}{cc} -6 & 7\end{array} \right) $
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
1 2 6 4 + 1 2 -6 7 + 1 2 -6 -4 | 1 2 -6 7 | žádný | 0 |
$
\left( \begin{array}{cc}
0 & 4 & -9 \\
-9 & 6 & -4 \\
3 & 5 & -2 \\
-1 & 7 & 5\end{array} \right)
\times
\left( \begin{array}{cc}
-10 & -9 & -8 & 9 \\
-4 & 0 & -9 & 1 \\
4 & 6 & -9 & 5\end{array} \right)
+
\left( \begin{array}{cc}
0 & -9 & 3 & -6 \\
10 & -9 & 8 & -7 \\
-1 & 0 & 5 & 1 \\
3 & 2 & -9 & 9\end{array} \right)
=
\left( \begin{array}{cc}
-52 & -63 & 48 & -47 \\
60 & 48 & 62 & -102 \\
-59 & -39 & -46 & 23 \\
5 & 41 & -109 & 32\end{array} \right)
$
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
4 3 0 4 -9 -9 6 -4 3 5 -2 -1 7 5 * 3 4 -10 -9 -8 9 -4 0 -9 1 4 6 -9 5 + 4 4 0 -9 3 -6 10 -9 8 -7 -1 0 5 1 3 2 -9 9 | 4 4 -52 -63 48 -47 60 48 62 -102 -59 -39 -46 23 5 41 -109 32 | žádný | 0 |
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
2 2 3 x10 -9 5 + 2 2 8 -5 1 8 + 2 2 -4 6 -2 8 | žádný | Error: Chybny vstup! | 100 |
$
\left( \begin{array}{cc}
-1 \\
4\end{array} \right)
+
\left( \begin{array}{cc}
-1 \\
0\end{array} \right)
+
\left( \begin{array}{cc}
8 & 5 \\
10 & -8\end{array} \right)
\times
\left( \begin{array}{cc}
5 \\
5\end{array} \right)
=
\left( \begin{array}{cc}
63 \\
14\end{array} \right)
$
Standardní vstup | Očekávaný výstup | Očekávaný chybový výstup | Návratová hodnota |
---|---|---|---|
2 1 -1 4 + 2 1 -1 0 + 2 2 8 5 10 -8 * 2 1 5 5 | 2 1 63 14 | žádný | 0 |
Veřejné příklady + Makefile:
Povinné zadání | Bonusové zadání | |
---|---|---|
Název v BRUTE | HW06 | |
Odevzdávané soubory | main.c | |
Argumenty při spuštění | žádné | |
Kompilace pomocí | clang -pedantic -Wall -Werror -std=c99 | |
Procvičované oblasti | pole variabilní délky indexování v poli | dynamická alokace paměti |