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

HW 07 - Maticové počty

Termín odevzdání 28.11.2020 05.12.2020 23:59 CET
Bodový zisk 7b (2+2+3)
Min. bodový zisk 2b
Počet uploadů 10 15
Typ zadání povinné

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 budete používat dynamickou alokaci paměti (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í.
Velikost vstupních matic (povinného a bonusového zadání) je přesně specifikována vstupním formátem, proto je doporučeno načítat vstup postupně po celých číslech a nikoliv po řádcích např. funkcí 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.

Zadání A - součet a rozdíl 2 matic

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.

Zadání B - součet, rozdíl a násobení 2 matic

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.

Zadání C - více matic a priorita operací

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 \times C + D \times E - F$$

ozávorkován následujícím způsobem:

$$ A + (B \times C) + (D \times E) - F$$

Formát vstupu

  • Na standardním vstupu jsou dvě matice (zadání A a B; v zadání C 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.
  • 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.
  • 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.

Příklad A1 - pub_a01

$$ \begin{bmatrix} 76 & 98 & -31 \\ 30 & 30 & 32 \end{bmatrix} - \begin{bmatrix} 89 & 25 & 38 \\ 1 & -32 & -38 \end{bmatrix} = \begin{bmatrix} -13 & 73 & -69 \\ 29 & 62 & 70 \end{bmatrix} $$

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

Příklad A2 - pub_a02

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

Příklad B1 - pub_b01

$$ \begin{bmatrix} -59 & 78 & -85 \end{bmatrix} \times \begin{bmatrix} 78 \\ -28 \\ -97 \end{bmatrix} = \begin{bmatrix} 1459 \end{bmatrix} $$

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

Příklad B2 - pub_b02

$$ \begin{bmatrix} 81 & -96 & -56 & -9 \\ -19 & 66 & 37 & -21 \\ 20 & 49 & -71 & -49 \\ 45 & -96 & 20 & 8 \end{bmatrix} \times \begin{bmatrix} -89 & -96 \\ 76 & 75 \\ 65 & 2 \end{bmatrix} $$

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

Příklad C1 - pub_c01

$$ \begin{bmatrix} 6 & 4 \end{bmatrix} + \begin{bmatrix} -6 & 7 \end{bmatrix} + \begin{bmatrix} -6 & -4 \end{bmatrix} = \begin{bmatrix} -6 & 7 \end{bmatrix} $$

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

Příklad C2 - pub_c02

$$ \begin{bmatrix} 0 & 4 & -9 \\ -9 & 6 & -4 \\ 3 & 5 & -2 \\ -1 & 7 & 5 \end{bmatrix} \times \begin{bmatrix} -10 & -9 & -8 & 9 \\ -4 & 0 & -9 & 1 \\ 4 & 6 & -9 & 5 \end{bmatrix} + \begin{bmatrix} 0 & -9 & 3 & -6 \\\ 10 & -9 & 8 & -7 \\ -1 & 0 & 5 & 1 \\ 3 & 2 & -9 & 9 \end{bmatrix} = \begin{bmatrix} -52 & -63 & 48 & -47 \\ 60 & 48 & 62 & -102 \\ -59 & -39 & -46 & 23 \\ 5 & 41 & -109 & 32 \end{bmatrix} $$

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

Příklad C3 - pub_c03

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

Příklad C4 - pub_c04

$$ \begin{bmatrix} -1 \\\ 4 \end{bmatrix} + \begin{bmatrix} -1 \\ 0 \end{bmatrix} + \begin{bmatrix} 8 & 5 \\ 10 & -8 \end{bmatrix} \times \begin{bmatrix} 5 \\ 5 \end{bmatrix} = \begin{bmatrix} 63 \\ 14 \end{bmatrix} $$

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
Více příkladů najdete v níže přiloženém zip archivu

Odevzdání

Veřejné příklady + Makefile:

Zadání
Název v BRUTE HW07
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
courses/b0b99prpa/hw/hw07.txt · Last modified: 2020/12/06 18:50 by nentvond