Gyakorlati alapok

Igazságtáblák

 

NOT

AND

OR

NAND

NOR

XOR

XNOR

 

Ha már kezdünk belemelegedni nemcsak a számolásba, hanem a logikai döntésekbe is, akkor gyorsan implementáljuk a híres igazságtáblákat!

 

De előtte kis elmélet...

A számítógép nemcsak számolni, hanem dönteni is képes. Az utóbbi műveleteket úgynevezett logikai kapuk segítségével hajtja végre: ezek a processzorban fixen behuzalozott áramkörök, amelyek alapjában véve egyszerű felépítésűek, de mivel a logikai számításokhoz összekapcsolhatók, jóval bonyolultabb (logikai) eredményeket is szolgáltathatnak. Így összesen hétféle logikai kapu létezik, amelyek igazságtáblája is különböző, ezek:

 

(NOT) AND OR NAND NOR XOR XNOR

 

www.informatika-programozas.hu

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Az igazságtábla tehát a logikai kapuk összes lehetséges bemenetének összes lehetséges eredményét tartalmazza, egyfajta egyesített logikai eredménylista.

 

Az alábbiakban az igazságtáblákat fogjuk implementálni Java-nyelven. Ellenőrzésképpen mindig összevethetjük az igazságtábla aktuális értékeit a Java-végeredményekkel. Például logikai ÉS művelet (AND gate) esetén az igazságtábla értékei...

...ahol 0 = false, 1 = true logikai állapotot szimbolizálja. A Java-kód végeredménye:

 

FALSE AND FALSE -> false

TRUE AND FALSE -> false
FALSE AND TRUE -> false
TRUE AND TRUE -> true
 

Az értékek ugyanazok, az implementáció tehát helyes. A kódolás során kihasználjuk a System.out.println() metódus egyik rendkívül előnyös tulajdonságát, hiszen paraméterlistájában teljes logikai műveletek is végrehajthatók.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Ugyanakkor szakértők kifogásolhatják, hogy System.out.println() metódus mindig többször van meghívva ahelyett, hogy paraméterlistájának rendkívül rugalmas terhelhetőségét használnánk ki. A probléma részletes kifejtésre került a Formai különbségek kezdő és haladó kód között című fejezetben.

 

NOT

 

A luciferi tagadás logikai művelete. A fenti igazságtábla még nem tartalmazza valószínűleg azért, mert csak egyváltozós (egyoperandusú) művelet, míg a többi már kétváltozós-kétoperandusú. Java-szintaktikai eleme: !A.

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.println("NOT TRUE -> " + !true);
    System.out.println("NOT FALSE -> " + !false);
    }
}

 

Végeredmény:

NOT TRUE -> false
NOT FALSE -> true

 

Konkrét példa a valós életből: bármilyen állítás tagadása.

 

AND

 

Logikai ÉS művelet. Java-szintaktikai eleme: A && B.

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE AND FALSE -> ");
    System.out.print(false && false);
    System.out.println();

    System.out.print("TRUE AND FALSE -> ");
    System.out.print(true && false);
    System.out.println();

    System.out.print("FALSE AND TRUE -> ");
    System.out.print(false && true);
    System.out.println();


    System.out.print("TRUE AND TRUE -> ");
    System.out.print(true && true);
    }
}
 

Végeredmény:

FALSE AND FALSE -> false

TRUE AND FALSE -> false
FALSE AND TRUE -> false
TRUE AND TRUE -> true

 

Konkrét példa a valós életből: cipőt akarunk vásárolni, de 2 feltétellel: csakis 43-as ÉS Adidas márkájú lehet.
 

OR

 

Logikai VAGY művelet. Java-szintaktikai eleme: A || B.

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE OR FALSE -> ");
    System.out.print(false || false);
    System.out.println();

    System.out.print("TRUE OR FALSE -> ");
    System.out.print(true || false);
    System.out.println();

    System.out.print("FALSE OR TRUE -> ");
    System.out.print(false || true);
    System.out.println();


    System.out.print("TRUE OR TRUE -> ");
    System.out.print(true || true);
    }
}
 

Végeredmény:

FALSE OR FALSE -> false

TRUE OR FALSE -> true
FALSE OR TRUE -> true
TRUE OR TRUE -> true

 

Konkrét példa a valós életből: lemegyünk a boltba, mert iszonyúan szeretjük a csokit. Lehet Milka VAGY Kinder, mégis megvesszük.
 

NAND

 

Logikai NEM ÉS művelet. Java-szintaktikai eleme: !(A && B).

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE NAND FALSE -> ");
    System.out.print(!(false && false));
    System.out.println();

    System.out.print("TRUE NAND FALSE -> ");
    System.out.print(!(true && false));
    System.out.println();

    System.out.print("FALSE NAND TRUE -> ");
    System.out.print(!(false && true));
    System.out.println();
    System.out.print("TRUE NAND TRUE -> ");
    System.out.print(!(true && true));
    }
}

 

Végeredmény:

FALSE NAND FALSE -> true

TRUE NAND FALSE -> true
FALSE NAND TRUE -> true
TRUE NAND TRUE -> false
 

NOR

 

Logikai NEM VAGY művelet. Java-szintaktikai eleme: !(A || B).

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE NOR FALSE -> ");
    System.out.print(!(false || false));
    System.out.println();

    System.out.print("TRUE NOR FALSE -> ");
    System.out.print(!(true || false));
    System.out.println();

    System.out.print("FALSE NOR TRUE -> ");
    System.out.print(!(false || true));
    System.out.println();
    System.out.print("TRUE NOR TRUE -> ");
    System.out.print(!(true || true));
    }
}

 

Végeredmény:

FALSE NOR FALSE -> true
TRUE NOR FALSE -> false
FALSE NOR TRUE -> false
TRUE NOR TRUE -> false

 

XOR

 

Logikai KIZÁRÓ VAGY művelet. Java-szintaktikai eleme: A ^ B. Mivel matematikailag nézve ekkor a következő műveletet hajtjuk végre...

 

www.informatika-programozas.hu

 

...ezért a (A || B) && !(A && B) művelettel helyettesíthető. Ezt külön kódban mutatjuk meg.

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE XOR FALSE -> ");
    System.out.print(false ^ false);
    System.out.println();

    System.out.print("TRUE XOR FALSE -> ");
    System.out.print(true ^ false);
    System.out.println();

    System.out.print("FALSE XOR TRUE -> ");
    System.out.print(false ^ true);
    System.out.println();
    System.out.print("TRUE XOR TRUE -> ");
    System.out.print(true ^ true);
    }
}

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE XOR FALSE -> ");
    System.out.print((false || false) && !(false && false));
    System.out.println();

    System.out.print("TRUE XOR FALSE -> ");
    System.out.print((true || false) && !(true && false));
    System.out.println();

    System.out.print("FALSE XOR TRUE -> ");
    System.out.print((false || true) && !(false && true));
    System.out.println();
    System.out.print("TRUE XOR TRUE -> ");
    System.out.print((true || true) && !(true && true));
    }
}

 

Végeredmény:

FALSE XOR FALSE -> false
TRUE XOR FALSE -> true
FALSE XOR TRUE -> true
TRUE XOR TRUE -> false

 

Konkrét példa a valós életből: a tea nem jó édesítés nélkül (FALSE XOR FALSE -> false), ezért édesíthetjük cukorral is (TRUE XOR FALSE -> true), mézzel is (TRUE XOR FALSE -> true). Ha viszont mindkét dologgal édesítjük, az szintén rossz (TRUE XOR TRUE -> false).
 

XNOR

 

Logikai KIZÁRÓ NEM VAGY művelet. Java-szintaktikai eleme: !(A ^ B). Mivel matematikailag nézve a fenti művelet negáltja, ezért a !(XOR), azaz a...

 

!((A || B) && !(A && B)))

 

...művelettel helyettesíthető. Ezt külön kódban mutatjuk meg.

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE XNOR FALSE -> ");
    System.out.print(!(false ^ false));
    System.out.println();

    System.out.print("TRUE XNOR FALSE -> ");
    System.out.print(!(true ^ false));
    System.out.println();

    System.out.print("FALSE XNOR TRUE -> ");
    System.out.print(!(false ^ true));
    System.out.println();
    System.out.print("TRUE XNOR TRUE -> ");
    System.out.print(!(true ^ true));
    }
}

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    System.out.print("FALSE XNOR FALSE -> ");
    System.out.print(!((false || false) && !(false && false)));
    System.out.println();

    System.out.print("TRUE XNOR FALSE -> ");
    System.out.print(!((true || false) && !(true && false)));
    System.out.println();

    System.out.print("FALSE XNOR TRUE -> ");
    System.out.print(!((false || true) && !(false && true)));
    System.out.println();
    System.out.print("TRUE XNOR TRUE -> ");
    System.out.print(!((true || true) && !(true && true)));
    }
}

 

Végeredmény:

FALSE XNOR FALSE -> true
TRUE XNOR FALSE -> false
FALSE XNOR TRUE -> false
TRUE XNOR TRUE -> true