Labor – Wahrheitstabellen, Boolsche Ausdrücke

1. Wahrheitstabellen

Erstelle eine Klasse Wahrheitstabellen (logische Ausdrücke).

Diese enthält Methoden zur Ausgabe der Wahrheitstabellen für folgende logische Ausrücke:

  • a ˅ b

  • a ˄ b

  • ¬ a

  • ¬ (a ˅ b) ˄ ¬c

Die ersten beiden verknüpfen 2 Aussagen → Ergebnis 4 Zeilen,
Nr. 3 eine Aussage → 2 Zeilen
Nr. 4 verknüpft 3 Aussagen → 8 Zeilen

Die Ausgabe für die Wahrheitstabelle der Konjunktion (logisches UND) könnte so aussehen:

 Wahrheitstabelle für: a UND b
 -------------------------------
  a=false b=false   a&&b=false  OK
  a=false b=true    a&&b=false  OK
  a=true  b=false   a&&b=false  OK
  a=true  b=true    a&&b=true   OK

oder

   a       b      a && b  OK/ERR
 --------------------------------
 false   false    false     OK
 false   true     false     OK
 true    false    false     OK
 true    true     true      OK

Es ist jeweils eine Methode für die Erstellung einer Tabellenzeile zu implementieren, die als Parameter 1, 2 oder 3 Wahrheitswerte hat und durch Berechnung der Verknüpfung mit Java-Mitteln das Ergebnis generiert.

Die Methodennamen könnten z.B. sein:

  • printZeile_A_oder_B(boolean a, boolean b, boolean erwartet)

  • printZeile_A_und_B(boolean a, boolean b, boolean erwartet)

  • printZeile_not_A(boolean a, boolean erwartet)

  • printZeile not_A_oder_B_undNot_C(boolean a, boolean b, boolean c, boolean erwartet)

Diese Zeilen-Ausgabe-Methoden werden für jede der 2 4 oder 8 Zeilen der Wahrheitstabelle hintereinander aufgerufen, um so alle Zeilen anzuzeigen. Davor wird die Titelzeile als simpler Text ausgegeben.

Die Reihenfolge der Wahrheit-Muster wird so gewählt, dass aufsteigend die Zahlen im Binärsystem gebildet werden, wenn man false als 0 und true als 1 interpretiert – z.B.:
0/0 → false/false, 0/1 → false/true, 1/0 → true/false, 1/1 → true/true

Wenn die Berechnungsmethode als weiteren Parameter den erwarteten Ergebniswert enthält, kann bei Übereinstimmung daneben 'OK' oder 'ERR' ausgegeben werden.

2. Boolsche Ausdrücke

Schreibe neben jedem println(…​) als Kommentar das Ergebnis!
Siehe erste Lösung!
Abgabe im README.TXT des BlueJ-Projekts.

public class OperatorUebungen {
	public void ausgabeRelationaleOperatoren1() {
		boolean b1 = true;
		System.out.println("b1 hat den Wert: " + b1);

		// Relationale Operatoren
		b1 = 2 > 4;
		System.out.println("b1 = " + b1);  // b1 = false

		b1 = 5 > 4;
		System.out.println("b1 = " + b1);  // jeweils Erwartungswert hier!

		b1 = 4 >= 4;
		System.out.println("b1 = " + b1);

		b1 = 4 <= 3;
		System.out.println("b1 = " + b1);

		b1 = 3 <= 4;
		System.out.println("b1 = " + b1);

		b1 = 3 == 4;
		System.out.println("b1 = " + b1);

		b1 = 4 == 4;
		System.out.println("b1 = " + b1);

		b1 = 4 == (16 % 4);
		System.out.println("b1 = " + b1);
		b1 = 4 == (16 / 4);
		System.out.println("b1 = " + b1);
		b1 = 3 != 4;
		System.out.println("b1 = " + b1);

		b1 = 4 != 4;
		System.out.println("b1 = " + b1);

		b1 = 4 < 4 + 3;
		System.out.println("b1 = " + b1);
	}

	public void ausgabeUND1() {
		boolean b1 = true;
		System.out.println("b1 = " + b1);

		// UND Operatoren
		b1 = true && true;
		System.out.println("b1 = " + b1);

		b1 = true && false;
		System.out.println("b1 = " + b1);

		b1 = true && false && true;
		System.out.println("b1 = " + b1);

		b1 = true && 3 > 5;
		System.out.println("b1 = " + b1);

		b1 = true && 3 < 5;
		System.out.println("b1 = " + b1);

		b1 = true || false || true;
		System.out.println("b1 = " + b1);

		b1 = true && 3 <= 5 && 4 >= 3;
		System.out.println("b1 = " + b1);

		b1 = !(true && 3 != 5);
		System.out.println("b1 = " + b1);
	}

	public void ausgabeODER1() {
		boolean b1 = true;
		System.out.println("b1 = " + b1);

		// ODER Operatoren
		b1 = true || true;
		System.out.println("b1 = " + b1);

		b1 = true || false;
		System.out.println("b1 = " + b1);

		b1 = true || false || false;
		System.out.println("b1 = " + b1);

		b1 = true || 3 < 5;
		System.out.println("b1 = " + b1);

		b1 = true || 3 < 5;
		System.out.println("b1 = " + b1);

		b1 = true || false || true;
		System.out.println("b1 = " + b1);

		b1 = false || 3 > 5;
		System.out.println("b1 = " + b1);

		b1 = true || !(true || 3 <= 5);
		System.out.println("b1 = " + b1);
	}

	public void ausgabeUndOder1() {
		boolean b1 = true && false || true;
		System.out.println("b1 = " + b1);

		b1 = true && false || false;
		System.out.println("b1 = " + b1);

		b1 = true || true && (false || true);
		System.out.println("b1 = " + b1);

		b1 = false || true && (false || true);
		System.out.println("b1 = " + b1);

		b1 = !(false || true && !(false || true));
		System.out.println("b1 = " + b1);
	}
}