Cvičení 5: 2D pole
Úkol 1-2 Opakování
Dvourozměrné pole
pole=[]
f=open('pole.txt','r')
for line in f:
pole.append(list(map(int, line.split())))
Matice
Úkol 3 Výpis matice
Napište funkci printMatrix
, která vypíše matici zadanou 2D polem
Prvky budou odděleny mezerou a každý řádek bude vypsán na nový řádek
Kromě prvků matice nebude vypsán žádný jiný znak
Úkol 4 Násobení vektoru a matice
Napište funkci multiVecMat(v,m)
, která vypočte součin vektoru $v$ a matice $m$.
Pokud nesouhlasí rozměry matice a vektoru, pak funkce vrací None
.
Vypočtete výsledek násobení $v \cdot m$:
m=[[0,0,1],[0,1,0],[1,0,0]]
v=[2, 4, 6]
Témata k procvičení
Implementujte následující úlohy:
Funkce, která v matici najde všechny záporné hodnoty, vraťte seznam jejich indexů
Funkce pro násobení dvou matic
Funkce pro výpočet determinantu matice
Funkce pro výpočet
stopy matice
Domácí úkol
Lehká varianta
Napište program
diag.py, který načte matici celých čísel ze souboru, jehož jméno je zadáno jako první argument programu
sys.argv[1] a zjistí, kde se v této matici nachází nejdelší souvislá sekvence sudých čísel v diagonálním směru.
Soubor obsahuje matici $ m \times n $ - celých čísel, $m$ odpovídá počtu řádek souboru, $n$ určíte podle počtu čísel na řádce.
Program vytiskne na standardní výstup indexy řádku a sloupce prvního prvku diagonály a počet prvků sekvence
První prvek sekvence je ten, který má minimální index řádku.
Diagonální směry jsou dva: vpravo-dolů a vlevo-dolů.
Program v souboru diag.py odevzdejte pomocí odevzdávacího systému (úloha HW05).
Můžete předpokládat, že všechny matice jsou zadány korektně, tedy všechny řádky mají stejný počet prvků.
Pokud se vstupní soubor jmenuje diag.txt
, Váš program se spustí příkazem python3 diag.py diag.txt
. Cestu k souboru lze v programu načíst takto:
import sys
matrix_file = sys.argv[1]
Příklad
1 1 2 1 0 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1 1 1 1
1 1 0 1 2 1 1 1 1 1 1 1
1 1 1 1 1 2 1 1 1 1 1 1
Výstup:
0 2 4
Vysvětlení: Sekvence čísel 2 je delší než sekvence tvořená 0 a 2. První prvek sekvence čísel 2 je 0, 2 délka sekvence je 4.
1 1 1 1 1 0 1 1 1 1 1 1
1 1 0 1 1 1 0 1 2 1 1 1
1 1 1 0 1 1 1 2 1 1 1 1
1 1 1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 2 1 0 1 1 1 1
Výstup:
1 8 4
Vysvětlení: Sekvence čísel 2 je nejdelší, delší než sekvence tvořená 0 a 2. První prvek sekvence čísel 2 je 1, 8 délka sekvence je opět 4.
Těžká varianta
Napište program chess.py, který načte soubor zadaný na příkazové řádce (argv[1]
). Tento soubor kóduje stav šachovnice po tahu bílého. Program zkontroluje, zda bílý dává černému mat, šach, garde, nebo nic z předešlého.
Vstup
figura | bílý | černý |
král | 1 | -1 |
dáma | 2 | -2 |
věž | 3 | -3 |
střelec | 4 | -4 |
jezdec | 5 | -5 |
pěšec | 6 | -6 |
volné pole | 0 | 0 |
Výstup (standardní výstup)
Soubor (viz. příklad
sachovnice.txt) obsahuje dvourozměrné pole, ve kterém jsou výše definované hodnoty
Program v souboru chess.py odevzdejte pomocí odevzdávacího systému (úloha HW05).
Pokud Váš program nebude umět detekovat sach/mat, pak získáte pouze 1 bod.
Také nemusíte uvažovat výměnu pěšce na posledním políčku šachovnice za jinou figuru, protože pěšci nejsou umístěni v dosahu posledního řádku šachovnice.
Vstup obsah souboru, zdaného jako vstupní argument:
-3 0 -4 -2 0 -1 -5 -3
-6 -6 -6 0 0 0 -6 -6
0 0 -5 4 0 0 0 0
0 0 0 -6 0 0 0 2
0 0 0 6 0 0 0 0
0 0 5 0 0 0 0 0
6 6 6 0 0 0 6 6
3 0 0 0 0 3 1 0
Výstup:
MAT