# Frage zu Zusicherungen:



## soundwaveONE (16. Sep 2011)

Hey zusammen!

ich befasse mich gerade mit java für mein Studium und stolpere grad über Zusicherungen. vllt könnt ihr mir da weiter helfen: Ich soll sagen an welchen programmstellen welche Zusicherungen gelten, und dass ganze am ende zusammenfassen zu einer Zeile:

[Java]
if ((a==true)&&(b==true))    //Zusicherung1;
         c=true;
else                                   //Zusicherung2:
         c= false;

if((a==true)||(c==true))      //Zusicherung3:
         erg=true;
else                                   //Zusicherung4:
         erg=false; 


[/Java]

Mein Verdacht ist folgender:
1. Klar; a==true && b==true
2. Klar; a==false || b==false
3. a==true || c==true
4. a==false && c==false

Das wär meine Einschätzung.

Zusammengefasst in einer Zeile wäre somit mein erg:... und da hakt es.
Vielleicht hat jemand von euch eine Idee und kann mir sagen ob meine Zusicherungen überhaupt stimmen und/oder wie ich erg zusammenfassen kann als äquivalenten Ausdruck.

Ich danke euch vielmals für eure Mühen!


----------



## nillehammer (16. Sep 2011)

Deine Interpretation der Zusicherungen stimmt. Und was die Zusammenfassung auf eine Zeile angeht, denk mal genau über die möglichen Ergebnisse der ganzen Gleichheitsprüfungen nach. Wann kann c überhaupt true sein? Falls Du nicht gleich drauf kommst, mal Dir eine Entscheidungstabelle.


----------



## soundwaveONE (16. Sep 2011)

Ah ok vielen Dank! Ich habe mittlerweile eine etwas alternierende version für Zusicherung 3 und 4:

3: a== true || c==true -> ja auch: a==true || a==true&&b==true
4:a==false && a==false || b == false

Wäre das auch richtig?

mein Ergebnis is somit:

erg= a==true || c==true?

Bitte hilf mir da nochmal auf die Sprünge! 
Warum meinst du "Wann kann c überhaupt true sein?"?
Denn ich soll ja zusammengefasst das erg angeben. 
Aber vielen Dank schonmal für deine flotte Antwort!
Ich hoffe du kannst mir nochmal helfen^^


----------



## nillehammer (16. Sep 2011)

Schauen wir uns die Bedingung auf Zeile 6 an. Diese ist (und damit auch das Ergebnis) true, wenn a==true ist. Das war einfach. Wir sind fertig. Nun stellen wir uns vor, a==false. Wir haben eine Oder-Verknüpfung müssen uns also anschauen, ob c==true sein könnte. Der Wert von c wird durch die Bedingung in Zeile 1 festgelegt. Nachdem wir in einem Zweig sind, in dem a==false ist, kann c dann überhaupt true sein, wenn a==false ist?


----------



## Ark (16. Sep 2011)

Puh, keine Ahnung, ob ich das gerade richtig verstanden habe, aber ich spiele einfach mal einen optimierenden Compiler. 

Gegeben:
[Java]
if((a == true) && (b == true))
         c = true;
else
         c = false;

if((a == true) || (c == true))
         erg = true;
else
         erg = false; 
[/Java]
Entferne Operationen mit neutralen Elementen:
[Java]
if(a && b)
         c = true;
else
         c = false;

if(a || c)
         erg = true;
else
         erg = false; 
[/Java]
Wenn eine Bedingung bei einem if als erfüllt erkannt wird (die dort gemachte Aussage also wahr ist), kannst du (solange sich die Voraussetzungen nicht ändern!) bei der Wahr-Alternative jedes [c]true[/c] durch die Bedingung ersetzen (denn die ist ja in diesem Augenblick auch wahr). Genauso kannst du jedes [c]false[/c] in der Falsch-Alternative (else-Teil) durch die Bedingung ersetzen (weil ja diese auch Aussage falsch sein muss, sonst wären wir ja nicht im else-Teil).
[Java]
if(a && b)
         c = a && b;
else
         c = a && b;

if(a || c)
         erg = a || c;
else
         erg = a || c; 
[/Java]
Jetzt können gemeinsame Präfixe und Suffixe der Alternativen zusammengefasst werden. Weitere äquivalente Umformungen sollten drankommen, wenn es um reguläre Sprachen geht:
[Java]
if(a && b) ;
else ;
c = a && b;

if(a || c) ;
else ;
erg = a || c;
[/Java]
Leere Anweisungen werden entfernt:
[Java]
c = a && b;
erg  = a || c;
[/Java]
Einsetzen von c in davon abhängende Ausdrücke:
[Java]
c = a && b;
erg = a || a && b;
[/Java]
Ergebnis (nach Anwendung des Absorptionsgesetzes, siehe Boolesche Algebra ? Wikipedia):
[Java]
c = a && b; // !c == (!a || !b)
erg = a;    // !erg == !a
[/Java]

Ark


----------



## nillehammer (16. Sep 2011)

Ark hat gesagt.:
			
		

> erg = a;    // !erg == !a


Spielverderber!


----------



## Ark (16. Sep 2011)

nillehammer hat gesagt.:


> Spielverderber!


Stimmt, hat sich ganz schön viel getan, seit ich das erste Mal auf "Antworten" klickte. ^^ Na ja, ich hoffe, der TO ist dann zumindest gehörig mit Nachvollziehen beschäftigt … oder derart verwirrt von meinem Geschreibsel, dass er es sowieso noch einmal neu versucht. 

Ark


----------



## soundwaveONE (16. Sep 2011)

hahaha^^

ne bin ich nich, hab alles verstanden! Danke euch

hö? Wo ist denn mein text hin?! Hab hier ellenlang getippt wie dankbar ich euch bin und es super verstanden hab und hab euch nen schönen Abend gewünscht, naja dann hol ich das hiermit nochmal nach:

Schönen Abend Jungs und vielen Dank für eure mühen! Ich hoffe ihr seid morgen wieder online denn ich hätte da evtl noch eine Frage

LG


----------



## Fab1 (16. Sep 2011)

> Ich hoffe ihr seid morgen wieder online denn ich hätte da evtl noch eine Frage



24/7 Support


----------



## soundwaveONE (16. Sep 2011)

GEEK hat gesagt.:


> 24/7 Support



hahaha nice! Man wird hier wirklich sehr nett empfangen! Macht euch nen schönen Abend!LG


----------



## maki (16. Sep 2011)

*verschoben*


----------



## soundwaveONE (18. Sep 2011)

ich hab mal noch eine version probiert und würd gerne hören ob die so ok ist:


```
if ((a>0)&&(b<0))     //1
     c=true;
else                        //2
    c=false


if((a==0)||c))           //3
         erg=true;
else                         //4
         erg=false;
```

so meine lsg:
1: a>0 und b<0
2: die negation a<=0 || b>=0
3: a==0 || c    -> a==0 || a>0&&b<0
4: a!=0 && !c   -> a!=0 && a<=0 || b>=0


so zusammengefasst ergibt so:

erg = a==0||c
-> erg = a==0||a>0&&b<0

kann man das so stehen lassen?
weitere alternativen meinerseits waren:

wenn a=0 sein muss oder in Verbindung mit b<0 größer null, reicht dann vielleicht auch 
erg = a>=0??

ich hoffe ihr könnt mir nochmal helfen^^

lg


----------



## nillehammer (19. Sep 2011)

> 3: a==0 || c -> a==0 || a>0&&b<0


Das stimmt für c nicht. Richtig wäre: c -> a>0&&b<0 (Weiter unten hast Du es aber wieder richtig gemacht, also wohl nur C&P-Fehler).



> erg = a==0||c
> -> erg = a==0||a>0&&b<0


Das stimmt.



> wenn a=0 sein muss oder in Verbindung mit b<0 größer null, reicht dann vielleicht auch
> erg = a>=0??


Das reicht nicht. Im Gegensatz zu Deinen ersten Posts, hast Du hier eine neue Bedingung (a==0) eingeführt, die in der ersten Verzweigung nicht abgefragt wird.


----------

