InfoMC 9. labor

Lokális én nem lokális változók

Lokális

Lokális változó zöld és nincs hatással a többi változóra, sem ugyanolyan nevűre, sem más nevűre.

f[x_]:=x^2
x
x=3
f[x]
f[y]

MatrixForm[{Table[i^2,{i,0,5,1}],Table[i^2,{i,5,10,1}]}]
i

Lokális blokk

Egy blokkon belül lokális változó, ez is zöld, addig amíg a Module utasítás be nem zárul.
A blokkon belül átírhatjuk, számolhatunk vele, az értéke megmarad. De a blokkon kívül hatástalan.

Module[{lokális változók}, utasítás; utasítás; utasítás ]

Module[{i},
i = 3;
i^2 
]
i

Module[{i=3},
i^2 
]
i

Van-e ismétlés?

IsmetlesE[L_]:=Module[
{S = Union[L]},
Length[S]!=Length[L]
]

IsmetlesE[{1,2,3,a,2}]

Meglévő értéket ideiglenesen figyelmen kívül hagy.

x=1;
Module[{x},
x=2;
x^2
]
x
ClearAll[x]
x

Globális változó

Fekete változók, ezek értéke minden más cellára hatással vannak.

x=2

f[y_]:=x^y (*ez az y↦2^y függvény*)

f[x]

De figyeljük meg, hogy minden cella akkor változik meg, ha újra (vagy először) lefuttatjuk!

x=3
f[y](*ez mostantól az y↦3^y függvény*)

Dinamikus változók

A Dynamic paranccsal használva egy változót, az értékének megváltoztatása hatással van az őt bennfoglaló parancsokra.

x=2;
g[y_]:=Dynamic[x]^2
g[y]

x=a

Manipulate[x=xx,{xx,0,1}]

Ezzel lehet azonnali hatást elérni a kód távol eső részeiben is.
Sőt notebook-ok között is, ha egy Kernel-en futnak!
AUX notebook!

El is nevezhetünk egy új változót Dynamic-kal, így a mindenkori értéke dinamikus lesz.

y=Dynamic[x]

y^y

Feladat

a)

Készítsük el a múlt heti kishajót dinamikusan és/vagy Module-okkal.

b)

Legyen az x tengelyen lévő pozíció is állítható!

Gombok

A Button parancs egy gombot csinál, és van benne egy utasítás, ami lefut, ha megnyomjuk a gombot.

Button["gomb", x=1]

Dynamic[x]

x=3

Az eredmény nem lesz látható.

Button["gomb", x]
Button["gomb2", Graphics[Circle[]]]

A gomb egy kép is lehet

Button[Graphics[Rectangle[]], x=1]

Feladat

a)

Készítsünk olyan játékot, ahol van egy gomb és egy négyzet és ha megnyomjuk, akkor egy kör ugorjon egy véletlen helyre a négyzetben.

b)

A gomb legyen egy négyzet közepén, de ha megnyomjuk, akkor a gomb maga ugorjon el egy véletlen helyre!

RandomReal[{0,1},2]