InfoMC 7. labor

Graphics objektumok színezése

Egymásba ágyazott listák

Egy stílus utasítás hatására az azt követő összes objektum stílusa megváltozik. Az egymást követő stílusok felülírják egymást.

Graphics[{Red, Rectangle[{0,0},{1,1}], Circle[{2,2},1]}]

Ha külön akarjuk színezni, akkor foglaljuk bele egy listába!

Graphics[{{Red, Rectangle[{0,0},{1,1}]}, {Black, Circle[{2,2},1]}}]

Az egymásba ágyazott listák stílusai csak a belső listára (vagy objektumokra) vannak hatással.

Graphics[{Opacity[0],EdgeForm[Dashed],Rectangle[{0,0},{1,1}],Black, Opacity[1], EdgeForm[None],Disk[{2,2},1]}]
Graphics[{{Opacity[0],EdgeForm[Dashed],Rectangle[{0,0},{1,1}]}, {Disk[{2,2},1]}}]

Formázás nélkül az egymásba ágyazás nem számít, azaz hatástalan.

Graphics[{
{Rectangle[{0,0},{1,1}]},{{Circle[{1,1},2]},Disk[{0,2},1]}
}]

Részlista kiszedése

Egy listából kiszedhetünk részlistás, valamettől valameddig, esetleg lépésközzel.

Lista[[ -tól ;; -ig ;; lépésköz]]

L=Range[12]
L[[1]]  (*első elem*)
L[[1;;5]] (*1-től 5-ig*)
L[[1;;5;;2]]  (*1-től 5-ig, minden második elem*)
L[[;;;;2]] (*minden második elem*)
L[[;;-3;;2]] (*az elejétől a hátulról harmadikig, minden második elem*)

Feladat

Készítsünk olyan ábrát, ahol a (0,0), (2,0), (1,2) háromszöget ábrázoljuk. Tegyük egy Manipulate-be, aminek egy jelölőnégyzete (checkbox) van (igaz vagy hamis) és az egyik értékre az előbbi háromszög beírható, a másikra a köré írható háromszöget rajzolja.

A beírható kör sugara tan(((arctan(2))/2)), a köré írhatóé (5/4).

Feladat

Rajzoljuk le az alábbi "házikót" egy törtvonallal. Tegyük Manipuate-be ahol lépésenként jelenik meg (8 vonal kell hozzá).

Graphics[{EdgeForm[Black],Opacity[0],Rectangle[{0,0},{1,1}],Triangle[{{0,1},{1,1},{0.5,2}}] ,Opacity[1],Line[{{0,0},{1,1}}],Line[{{0,1},{1,0}}] }]

Feladat

Sudoku

a)

Készítsünk sudoku táblázatot rajzoló függvényt.

Ez 81 darab kis négyzetből áll és 9 darab vastagabb, nagyobb négyzetből.

A négyzeteket állítsuk elő a Table paranccsal.

b)

Írjunk olyan függvényt, aminek egy változója van, egy 9×9-es táblázat, benne 0-9-ig számok (0 ha nincs kitöltve) és kirajzolja azt a sudoku állást.

A mezőkbe írjunk a Text paranccsal.

A=ArrayReshape[Range[0,80],{9,9}]

A//MatrixForm

Sudoku[A]

c)

Készítsünk olyan függvényt, ami egy sudoku állásról leellenőrzi, hogy helyes-e. Legyen a bemenete egy 9×9-es táblázat, aminek minden eleme 0-9-ig egy egész szám (0 ha nincs kitöltve). A függvény adjon True-t, ha nincs ellentmondás, False-t ha van.

Egy sort, oszlopot, illetve négyzetet így szedhetünk ki.

Sor[S_, i_]:=S[[i]]
Oszlop[S_, i_]:=S[[;;,i]]
Negyzet[S_, i_, j_]:=S[[(i-1)*3+1;;(i-1)*3+3, (j-1)*3+1;;(j-1)*3+3]]

Sor[A, 4]
Oszlop[A, 4]
Negyzet[A, 3,3]//MatrixForm

d)

A függvény adja vissza azt is, hogy hol van a hiba; üres listát, ha nincsen, egyébként párok listáját, hogy sor, oszlop vagy négyzet és azon belül melyik.
Például:
{{“sor”, 1}, {“oszlop”, 2}}

e)

Készítsünk egy másik függvényt, ami ábrázolja az előző eredményét, rendezze táblázatba a számokat és pirossal jelölje a hibát.