# wahrheitstabelle



## kirkikor (1. Mai 2012)

hallo,
ich muss eine wahrheitstabelle als java-programm schreiben.

das hier ist der ausdruck:
(¬(A \/ B) \/ (C /\ D)) ⇒ ((A /\ ¬B) /\ A)

die teilterme sollen im programme ebenfalls ausgedruckt werden.

ich habe mein programm geschrieben, aber bekomme ständig falsche wahrheitswerte heraus.
könnte mir jmd bei der korrektur helfen?!



```
import java.util.Scanner;


public class wahrheitstabelle {	

  public static void main (String[] argv) {

	Scanner eingabe = new Scanner(System.in);
	
	boolean [] a = {true, false};
	boolean [] b = {true, false};
	boolean [] c = {true, false};
	boolean [] d = {true, false};
	boolean e,f,g,h,m;
	
	System.out.println("a \t b \t c \t d \t !(a v b) (c & d) !(a v b) v (c & d) (a & !b) (a & !b) & a implikation");
	

	for (int i = 0; i<2; i++)	{
		for (int j = 0; j<2; j++)	{
			for (int k = 0; k<2; k++)	{
				for (int l = 0; l<2; l++)	{
				
					if (a[0]||b[0])	{		//!(a v b)
						e = false;
					}
					else	{
						e = true;
					}
					
					if (c[0] && d[0])	{		//(c & d)
						f = true;
					}
					else	{
						f=false;
					}
					if (e==true || f==true)	{		//!(a v b) v (c & d)
						g = true;
					}
					else	{
						g=false;
					}
					if (a[0]&&b[1])	{		//(a & !b)
						h = true;
					}
					else	{
						h = false;
					}
					if (h=true&&a[0])	{		//(a & !b) & a
						m = true;
					}
					else	{
						m = false;
					}
					
					System.out.println(a[i]+"\t "+b[j]+"\t "+c[k]+"\t "+d[l]+"\t"+ e +"\t"+ f +"\t"+ g +"\t"+ h +"\t"+ m );
				}
			}
		}
	}
	
	
	
	
				
  } // main
	
} // class wahrheitstabelle
```


----------



## Final_Striker (1. Mai 2012)

kirkikor hat gesagt.:


> ich habe mein programm geschrieben, aber bekomme ständig falsche wahrheitswerte heraus.
> könnte mir jmd bei der korrektur helfen?!



Könnte vielleicht daran liegen, weil du die Variablen [c]i[/c] bis [c]l[/c] nicht in deiner Berechnung verwendest, sondern jedes mal die Felder mit dem Index 0 ausließt -> [c]a[0]||b[0][/c]


----------



## XHelp (2. Mai 2012)

Komisch auch, dass du in Zeile 50 keinen Kompilerfehler bekommst.


----------



## ESCS (2. Mai 2012)

XHelp hat gesagt.:


> Komisch auch, dass du in Zeile 50 keinen Kompilerfehler bekommst.



Ist so erlaubt, nur erfüllt (sehr wahrscheinlich) nicht den gewünschten Zweck


----------



## kirkikor (2. Mai 2012)

ok, ich habe die zeile 50 umgeändert in 

h==true&&a[0]



jedoch verstehe ich die bemerkung von final_striker nicht. 
!(a v b) bekommt doch genau dann den wahrheitwert falsch zugeordnet, wenn a oder b wahr sind.
sollte ich es lieber so schreiben:

if ( (a_==true) || (b[j]==true) ) {...}_


----------



## Pippl (2. Mai 2012)

kirkikor hat gesagt.:


> ```
> if (a[0]&&b[1]) //(a & !b)
> {
> h = true;
> ...



!b bedeutet doch einfach das der wert von b negiert wird und somit ist das nicht immer gleich false!???:L

Ein paar Konsolen ausgaben würden sicher helfen was wann wie true oder false ist.


----------



## ARadauer (2. Mai 2012)

Macht ihr den selben Kurs?
http://www.java-forum.org/hausaufgaben/135259-wahrheitstabelle-implikation.html
http://www.java-forum.org/java-basics-anfaenger-themen/135426-wahrheitstabelle.html




> jedoch verstehe ich die bemerkung von final_striker nicht.


a[0] macht keinen sinn, das ist true, du musst natürlich den schleifenzähler verwenden...

kleiner Tipp mach im ersten Schritt nicht
(¬(A \/ B) \/ (C /\ D)) ⇒ ((A /\ ¬B) /\ A)
sondern
A \/ B
und versuch das zu verstehen...


----------



## kirkikor (2. Mai 2012)

ok. habe meinen fehler erkannt.
jetzt läuft alles richtig.
danke an euch alle.


----------

