Innen: Hungarian Scratch-Wiki
Az igazságtábla olyan táblázat, ami a kijelentéslogikai műveletek eredményeit tartalmazza különböző helyettesítési értékek esetén.
Használat
Az igazságtáblákat áramkörök tervezésekor, modellezésekor szokás használni ahhoz, hogy a tervező megjósolhassa egy adott logikai áramkör működésének eredményét. Ezeket az áramköröket (melyek használnak ÉS, VAGY, NEM kapukat) a gyakorlatban addig egyszerűsítik, míg csupán NAND (NEM ÉS) kapuk használatával, azok kombinációjaként kifejezhetőek nem lesznek, tehát a NAND-on kívül semmilyen más logikai konnektívumra nem lesz szükség a működéséhez. A logikai NAND kapuk helyett a valóságban tranzisztorokat használnak. Ilyen módon még egy rendkívül összetett logikai áramkör is fizikailag megvalósíthatóvá válik. A számítógépek processzorai is ilyen elven működnek egy egészen alacsony szinten.
Logikai operátorok
A következőkben a logikai operátorok, vagyis logikai kapuk listája következik.
Tipp: Az operátorok neveit általában csupa nagybetűvel írjuk.
ÉS
Az ÉS operátorral összekapcsolt állítások (A és B az alábbi példában) igazságértéke igaz akkor, ha mindkét állítás igaz:
<(feltétel 1) és (feltétel 2)>
NAND
A NAND (NEM ÉS) operátor pontosan ellentettje az ÉS operátornak: hamis az igazságértéke minden olyan esetben, mikor az ÉS-sel összekapcsolt állítások igazak, illetve az ÉS-sel összekapcsolt feltételek teljesülnek:
Scratch-ben nincs külön blokk NAND-ra, viszont a neve (NEM ÉS) sugallja, hogyan fejezhetjük ki a rendelkezésünkre álló operátorokkal:
< nem <(feltétel 1) és (feltétel 2)> >
VAGY
A VAGY operátorral összekapcsolt állítások igazságértéke igaz abban az esetben, ha legalább az egyik állítás igaz:
Az ÉS operátor igazságtáblától annyiban különbözik, hogy azokban az esetekben is igaz az eredmény, amikor csak az egyik állítás/feltétel igaz az összekapcsoltak közül.
< (feltétel 1) vagy (feltétel 2) >
NOR
A NAND-hoz hasonlóan a NOR (NOT OR = NEM VAGY) operátor pontosan ellentettje a VAGY operátornak az igazságtábla működését tekintve. Amennyiben mindkét NOR-ral összekapcsolt feltétel vagy állítás hamis, az eredmény igazságértéke igaz lesz. Minden más esetben viszont hamis.
A NAND-hoz hasonlatosan a NOR-nak sincs külön blokkja Scratch-ben, de ezt is kifejezhetjük a rendelkezésünkre álló operátorok megfelelő kombinációjaként.
<nem<(feltétel 1) vagy (feltétel 2)>>
XOR
A XOR (kizáró VAGY) operátor igaz eredményt ad, amennyiben az összekapcsolt állításoknak vagy feltételeknek pontosan az egyike igaz.
XOR blokk sem található Scratch-ben, de ezt is ki tudjuk fejezni a meglévő eszköztár felhasználásával.
<nem <(feltétel 1) = (feltétel 2)>>
XNOR vagy XAND
A XNOR (kizáró NOR) operátorral összekapcsolt feltételek/állítások igazságértéke hamis, amennyiben valamelyik (de nem mindkét) állítás igaz. Ha megnézzük a XNOR igazságtábláját, az pontosan ellentettje a XOR igazságtáblájának.
A XNOR szintén nem egy lőre beépített operátor a Scratch-ben, viszont a XOR-hoz, NOR-hoz és NAND-hoz hasonlóan ezt is ki tudjuk fejezni.
<(feltétel 1) = (feltétel 2)>
NEM
A NEM annyiban különbözik az eddig tárgyalt operátoroktól, hogy a NEM-nek csak egyetlen bemenő paramétere, argumentuma van. A NEM kifordítja a bemenő paraméterként szereplő állítás igazságértékét:
Gyakran használt szimbólumok
Egyes programozási nyelvekben, például a Pythonban a logikai operátorokra nem a nevükkel (és, vagy, nem, stb.), hanem szimbólumokkal hivatkozunk. Számos magas és alacsonyabb rendű programozási nyelv használja ugyanazt a széles körben elterjedt szimbólumkészletet a logikai operátorok jelölésére.
Logikai operátorok kombinációja
A logikai operátorokat tetszőlegesen kombinálhatjuk, így összetettebb viszonyokat is ki tudunk fejezni állítások között. Például egy olyan esetben, ahol A és B igaz, C viszont hamis, az A||(B&&C) kifejezés igaz lesz. Az összetett logikai kifejezések igazságértékeit is ábrázolhatjuk igazságtáblában.
Short-Circuit Kiértékelés
Egy összetett logikai kifejezésnek különböző kiértékelési módja lehet. Egyik megközelítés szerint az egymás után következő összekapcsolt állításokat egyszerre értékeli ki a program. Ebben az esetben a (1=0)&&(0/0 = 1) kifejezés kiértékelése hibaüzenettel fog végződni, mivel a 0/0 művelet elvégzése nem értelmes. Ezzel szemben a short-circuit módszerrel a kifejezések kiértékelése egymás után történik. A fenti példára például hamis igazságértéket for adni így a program, mivel az első kifejezés (1=0) hamis, és ezt &&-sel kapcsoljuk a második kifejezéshez (0/0=1). Az ÉS igazságtáblája alapján pedig ha a két feltétel közül legalább egy hamis, akkor a teljes kifejezés hamis lesz.
A Scratch a kettő közül az előbbi kiértékelési módszert használja. Ezt a következő kódrészlettel le is tesztelhetjük:
<<[1]=[0]> és <((0)/(0))=[0]>>
Szerencsére Scratch-ben is megoldható a probléma, csak máshogyan kell megírni a kódot:
[I/H v] legyen [hamis] ha <feltétel 1> akkor ha <feltétel 2> akkor [I/H v] legyen [igaz]
Hasonló probléma merülhet fel, ha a két feltételt nem ÉS-sel, hanem VAGY-gyal kötjük össze. Természetesen erre is van megoldás:
[I/H v] legyen [hamis] ha <feltétel 1> akkor [I/H v] legyen [igaz] különben ha <feltétel 2> akkor [I/H v] legyen [igaz]