Hilfe bei Boolescher Algebra?
Moin,
Ich brauche hier hilfe bei einer Aufgabe (Ich will keine Lösung, nur ne erklärung). Warum genau stehen in der DNF nicht alle Variablen mit drin? Warum fehlt da jeweils eine?
3 Antworten
In den vorgeschlagenen Termen stehen ja jeweils alle 4 Variablen. Im Funktionsterm stehen in jedem "Summanden" jeweils nur 3 - Sinn der Aufgabe ist gerade, diese Ausdrücke durch Ausdrücke mit allen 4 Variablen zu ersetzen (Kontrolle, ob man das Wesen der DNF verstanden hat).
Das würde aber den Wortlaut der Aufgabe nicht erklären. Anscheinend heißt hier "disjunktive Normalform", was woanders "kanonische disjunktive Normalform" (vgl. Antwort von iQa1x) heißt.
Man kann den 2. Term der Disjunktion (Funktionsterm) auch weglassen, ohne dass sich das Ergebnis ändert, aber das scheint nicht Sinn der Aufgabe zu sein.
Als Ergänzung: Die mit allen Variablen heist kanonisch disjunktive Normalform (KDNF), die gibt es auch.
Probiere es aus:
function f(a, b, c, d) {
return (!b && c && d) || (a && !b && c) || (a && !b && !d);
}
function table() {
for (let index = 0; index < 16; index++) {
let x0 = (index & 1) == 1;
let x1 = ((index >> 1) & 1) == 1;
let x2 = ((index >> 2) & 1) == 1;
let x3 = ((index >> 3) & 1) == 1;
let result = f(x3, x2, x1, x0);
if (result) {
console.log(x3 + " " + x2 + " " + x1 + " " + x0 + " (" + index + ")");
}
}
}
table();
Zum Beispiel hier: https://jsfiddle.net/
Das Kreuzchen bei "n." dürfte falsch sein.
Der Trick ist, dass du jeweils nur drei relevante Variablen betrachten musst, da der Term schon als DNF gegeben wurde. Der Wert der vierten Variable ist dann nicht von Belang.
Die Ausgabe lautet dann:
"false false true true (3)"
"false true false false (4)"
"false true true false (6)"
"true false false false (8)"
"true false true false (10)"
"true false true true (11)"
Damit wären a. d. g. k. l. und n. richtig.
(!b && c && d) || (a && !b && c) || (a && !b && !d)
Pardon, der Term/Funktion sollte so lauten:
function f(x3, x2, x1, x0) {
return (!x2 && x1 && x0) || (x3 && !x2 && x1) || (!x3 && x2 && !x0) || (x3 && !x2 && !x0);
}
Sinn ist, zu erkennen, dass man jeweils eine Variable nicht berücksichtigen braucht, und dennoch das Ergebnis bestimmen kann.