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

Cvičení 5: 2D pole

Úkol 1-2 Opakování

  • Nedokončený příklad z minulého cvičení

Dvourozměrné pole

  • Načtení matice - dvourozměrného pole - ze souboru kombinuje načítání vektoru z minulého cvičení

pole=[]
f=open('pole.txt','r')
for line in f:
    pole.append(list(map(int, line.split())))

Matice

  • 2D pole se hodí např. pro reprezentaci matic

Ú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

  • Vstup:

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.

  • Vstup:

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
    • Stav šachovnice je zaznamenán čísly reprezentující jednotlivé figury podle následující tabulky (bíle figury mají kladnou hodnotu, černé zápornou):
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)
    • Výstupem Vašeho programu je hláška:
      • MAT - pokud černý dostal mat
      • SACH - pokud černý dostal šach a nenastala výše popsaná situace, tedy MAT
      • GARDE - pokud je ohrožena černého dáma a nenastala žádná z výše popsaných situací
      • NO - pokud nenastala žádná výše popsaná situace.
  • 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.
  • Protože neznáme historii tahů neuvažujte tzv. braní mimochodem ani rošády.
  • 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

courses/b3b33alp/cviceni/t05.txt · Last modified: 2022/10/17 11:22 by petrapa6