# Wahrheitstabelle mit Implikation



## JimmyFly (24. Apr 2012)

Hallo, 

da ich blutiger Anfänger in Sachen Java habe ich so meine Probleme mit dieser Aufgabe: 

_
"Schreiben Sie ein Java-Programm, das die Wahrheitstabelle zu folgendem logischen Ausdruck
erzeugt.
(¬(A v B) v (C ^ D)) ⇒ ((A ^ ¬B) ^ A)
Geben Sie in der Tabelle für jeden Teilterm den Wert aus. Alle Werte sollen durch das Programm
ermittelt werden.

Bem: ⇒ Implikation"_

Wie geht man an diese Aufgabe am besten ran? Wie ist das vorgehen?


----------



## ARadauer (24. Apr 2012)

Kollegen fragen: Das ist die 4. Frage diese Woche zum gleichen Thema. Leute sprecht doch miteinander, ihr geht sicher alle in den selben kurs...



> Wie geht man an diese Aufgabe am besten ran? Wie ist das vorgehen?


4 verschachtelte for schleifen für A, B, C, D und dann ganz innen das Ergebniss des ausdrucks inkl Parameter ausgeben.
Für diese logischen Ausdrücke gibt es in Java entsprechende Operatoren...

btw: was hat das mit datenbanken zu tun?


----------



## Pippl (24. Apr 2012)

ARadauer hat gesagt.:


> btw: was hat das mit datenbanken zu tun?



In einer Datenbank gibt es Tabellen, warum also nicht ;-)


----------



## JimmyFly (24. Apr 2012)

wäre es möglich zur Lösung des Problemes den Quelltext zu zeigen?


----------



## knucki (24. Apr 2012)

Wenn du ihn geschrieben hast und hier postest sicherlich.

Statt der For-Schleifen, könntest du dich auch mit dem Thema Rekursion auseinandersetzen...


----------



## JimmyFly (24. Apr 2012)

ich meinte ehr ob jemand das posten kann da ich zu keiner vernünftigen Lösung komme


----------



## knucki (24. Apr 2012)

Fragst du gerade ernsthaft danach, ob dir jemand deine Hausaufgaben macht?

Du hast noch nicht einmal einen Ansatz entwickelt, den sich die Leute hier mal angucken könnten, um dich auf den richtigen Weg zu schubsen. Aber nach einer Lösung fragen.


----------



## JimmyFly (24. Apr 2012)

So ich habe jetzt eine Lösung aber es passt noch was an der Formatierung nicht.... wie schafft man eine richtige formatierung dieser Tabelle? 


```
public class tabelle {
  public static void main (String[] args) throws java.lang.Exception {
 
	System.out.println(" a | b | c | d | a v b | !(a v b) | c & d | !(a v b) v c & d | !b | a & !b | a & !b & a | !(a v b) v c & d -> a & !b & a");
     produziereWahrheitstabelle(false,false,false,false);
     produziereWahrheitstabelle(false,false,false,true);
     produziereWahrheitstabelle(false,false,true,false);
     produziereWahrheitstabelle(false,false,true,true);
     produziereWahrheitstabelle(false,true,false,false);
     produziereWahrheitstabelle(false,true,false,true);
     produziereWahrheitstabelle(false,true,true,false);
     produziereWahrheitstabelle(false,true,true,true);
     produziereWahrheitstabelle(true,false,false,false);
     produziereWahrheitstabelle(true,false,false,true);
     produziereWahrheitstabelle(true,false,true,false);
     produziereWahrheitstabelle(true,false,true,true);
     produziereWahrheitstabelle(true,true,false,false);
     produziereWahrheitstabelle(true,true,false,true);
     produziereWahrheitstabelle(true,true,true,false);
     produziereWahrheitstabelle(true,true,true,true);
  }
```


----------



## Landei (24. Apr 2012)

Wie gesagt kannst du das mit Schleifen lösen:


```
boolean[] bools = {false, true};
for(boolean a : bools)
  for(boolean b : bools)
     for(boolean c : bools)
        for(boolean d : bools) 
           produziereWahrheitstabelle(a,b,c,d);
```

Bei der Tabellenformatierung hilft entweder 
	
	
	
	





```
String.format
```
 weiter, wobei du Breiten für die entsprechenden Formatsymbole angeben musst, oder du trickst mit Tabs ([c]"\t"[/c]) rum, was manchmal einfacher ist.


----------



## ARadauer (24. Apr 2012)

JimmyFly hat gesagt.:


> ich meinte ehr ob jemand das posten kann da ich zu keiner vernünftigen Lösung komme



du kannst deine Hausübung aber auch selber machen ;-)


----------



## Jango (25. Apr 2012)

Aha... So sehen also foreach-Schleifen in Java aus? Ich dachte immer das wäre ne Erfindung von .NET...


----------



## knucki (25. Apr 2012)

Hehe .NET 

Also wenn du dich schon mal mit Php beschäftig hast, wäre dir das da schon untergekommen:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

Oder noch älter "Perl":

foreach my $eintrag (@a){
print "$eintrag ";
} 

Der Gedanke dahinter ist Asbach-Uralt


----------



## Jango (28. Apr 2012)

Als ich mich noch mit Java beschäftigt habe, gabs das in dieser Sprache nicht.
Man gleicht sich also an und nutzt auch 'Inspirationen' anderer. Enums gibts in Java ja auch erst nach dem C# damit ausgerüstet wurde...  In C++ gibts das schon ewig.


----------



## JohannisderKaeufer (28. Apr 2012)

Die foreach-Schleife wurde mit dem JDK 1.5 eingeführt.
Das JDK 1.5 release war am 29.09.2004.

Spätestens seit dem beschäftigst du dich laut eigener Aussage nicht mehr mit Java und registrierst dich dann allerdings zwei Jahre später im Javaforum.


----------



## Jango (28. Apr 2012)

JohannisderKaeufer hat gesagt.:


> Spätestens seit dem beschäftigst du dich laut eigener Aussage nicht mehr mit Java und registrierst dich dann allerdings zwei Jahre später im Javaforum.



Jo...
Das trifft es in etwa.


----------



## dima4400 (6. Mai 2012)

hey leute,
dazu nochmal eine Frage:

ich habe meine Wahrheitstabelle jetzt fertig, jedoch habe ich Sie extra NICHT mit Arrays gemacht.
Eigentlich bin ich ganz zufrieden damit, das Problem ist nur, dass die Ergebnisse bei der Ausgabe nicht unter den Eigenschaften stehen.

Wie kann ich also das Programm richtig formatieren?
Hier der Java-Code:


```
import java.util.*;

public class Wahrheitstabelle {
	public static void main (String[] args) {
	
	Scanner in = new Scanner (System.in);
	
	System.out.println("\n");
	
	boolean a, b, c, d;
	
	for (int i=0; i<=1; i++) {
		if (i==0) {a = false;}
		else {a = true;}
		
		for (int j=0; j<=1; j++) {
			if (j==0) {b = false;}
			else {b = true;}
		
			for (int k=0; k<=1; k++) {
				if (k==0) {c = false;}
				else {c = true;}
			
				for (int l=0; l<=1; l++) {
					if (l==0) {d = false;}
					else {d = true;}
				
				boolean m = !(a||b);
				boolean n = (c&&d);
				boolean o = m||n;
				
				boolean p = (a&&!b);
				boolean q = p&&a;
				
				boolean r = !o|q;
				
				System.out.println("A\tB\tC\tD\tlinke Seite\trechte Seite\tGesamtergebnis");
				System.out.println(a+"\t"+b+"\t"+c+"\t"+d+"\t"+o+"\t"+q+"\t"+r);
				}
			}
		}
	}
	}
}
```


----------

