http://www.pronix.de -> Forum -> Knobelecke

Forum: Knobelecke

Moderatoren: broesel, juergen

Thema: Logische Primitive

Logische Primitive

jengelh am 12.08.2004 um 08:44

Also nochmal von vorn;
die logische Implikationstabelle zeigt:
bei a==1 und b==0 ist x==0,
also: if(a && !b) { x == 0 }
oder: if(!(a && !b)) { x == 1 }
und wenn man das nach den DeMorgan'schen Regeln (externer link) umformt:
if(!a || b)

Die XOR-Tabelle ist

 a | b | a => b
---+---+--------
 0 | 0 |   0
 0 | 1 |   1
 1 | 0 |   0
 1 | 1 |   1

Ausgehend von:
(!a && b) || (a && !b)
erstmal definieren:
p = !(!a && b)
q = !(a && !b)
Laut
!(p && q) == !p || !q
ergibt sich
!(!(!a && b) && !(a && !b)) == !(P) || !(Q)
bei weiterem Einsetzen leuchtet die rechte Seite
== !!(!a && b) || !!(a && !b)
was wiederrum nichts ist als:
(!a && b) || (a && !b) womit:


!(!(!a && b) && !(a && !b)) == (!a && b) || (a && !b) == XOR sein müsste.
 

Logische Primitive

broesel (webmaster) am 12.08.2004 um 10:28


// Implikation
if(!(a && !b)) { x == 1 }

// XOR
!(!(!a && b) && !(a && !b))


Richtig! :D

Der Trick ist eigentlich simpel: erst in konjunktive bzw. disjunktive Normalform bringen (hast Du im ersten Posting gemacht), dann doppelte Verneinung anwenden (das ändert nicht den Wahrheitsgehalt), dann die erste Verneinung auflösen sodaß nur noch AND bzw. NOT im Ausdruck enthalten ist.

Gruss
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 

Logische Primitive

jengelh am 12.08.2004 um 14:17

Man bringt das einen durcheinander Grafik: Smilie Gluecklich
da hätte doch auch a^b genügt Grafik: Smilie Lachend Grafik: Smilie Lachend Grafik: Smilie Lachend