Logische Operatoren ------------------------------ Aufgabe 2: Not bindet staerker als And, And bindet staerker als Or! Beispiel: IF (~FALSE OR FALSE & FALSE) THEN ... END; Dieser Ausdruck ergibt TRUE, da zuerst der Not-Operator, anschliessend der And-Operator und erst zum Schluss der Or-Operator ausgewertet wird: ~FALSE OR FALSE & FALSE = TRUE OR FALSE & FALSE = TRUE OR FALSE = TRUE 1) TRUE & (FALSE & ((FALSE OR TRUE) & TRUE) OR FALSE) = TRUE & (FALSE & ( TRUE & TRUE) OR FALSE) = TRUE & (FALSE & TRUE OR FALSE) = TRUE & FALSE = FALSE 2) (~x OR y) & TRUE & (x OR y) = (y OR ~x) & (x OR y) & TRUE = (y OR (x & ~x)) & TRUE = (y OR FALSE) & TRUE = y & TRUE = y 3) (b & ~e & (~f OR TRUE)) OR (b & (e OR ~e) & ~f) = (b & ~e & TRUE) OR (b & TRUE & ~f) = (b & ~e) OR (b & ~f) = b & (~e OR ~f) = b & ~(e AND f) 4) ~( ( (~x & ~y) OR (x & ~y) ) OR ~y) = ~( ( ~y & (~x OR x) ) OR ~y) = ~( ( ~y & TRUE ) OR ~y) = ~( ~y OR ~y) = ~(~y) = y 5) ~((~(x & ~y) & z) OR ~x) OR (TRUE & ~(~x OR z)) OR (TRUE & (y OR ~y)) Alle 3 Terme sind mit OR verknuepft. Ist ein Term davon TRUE ist der gesamte Ausdruck TRUE! Term3: TRUE & (y OR ~y) = TRUE & TRUE = TRUE Also ist der gesamte Ausdruck TRUE! ------------------------------------------------------- Aufgabe 3: Durch Umformungen und logischen Ausschluss ergeben sich folgende Bedingungen (bzw. unter welchen Bedingungen wann welche If-Anweisung ausgefuehrt wird). Fall 3 und 4 wird Schritt fuer Schritt erklaert: 1) [a>b OR c>b] Damit Fall 2 eintritt darf die Bedingung aus 1 nicht gelten, also: 2. Fall soll eintreten, aber Nicht der 1. Fall 2) [(a>0) AND NOT((c>b) OR (b<0))] AND [NOT((a>b) OR c>b))] = [ a>0 AND c<=b AND b>=0] AND [a<=b AND c<=b] = a>0 AND b>=c AND b>=0 AND b>=a AND b>=c = a>0 AND b>=a AND b>=c Damit der 3. Fall eintritt darf weder Fall 1 noch Fall 2 eintreten, also: 3. Fall Nicht 1. Fall Nicht 2. Fall 3) [a<0] AND [NOT((a>b) OR c>b))] AND [NOT((a>0) AND NOT((c>b) OR (b<0)))] = a<0 AND [a<=b AND c<=b] AND [a<=0 OR c>b OR b<0] = a<0 AND [a<=b AND c<=b] AND [a<=0 OR c>b OR b<0] = a<0 AND a<=b AND c<=b AND [a<=0 OR c>b OR b<0] = a<0 AND a<=b AND (c<=b AND [a<=0 OR c>b OR b<0]) = a<0 AND a<=b AND ( (c<=b AND a<=0) OR (c<= b AND c>b) OR (c<=b AND b<0) ) = a<0 AND a<=b AND ( (c<=b AND a<=0) OR FALSE OR (c<=b AND b<0) ) = a<0 AND a<=b AND ( (c<=b AND a<=0) OR (c<=b AND b<0) ) = a<0 AND a<=b AND ( c<=b AND (a<=0 OR b<0) ) = a<0 AND a<=b AND c<=b AND (a<=0 OR b<0) = (a<0 AND a<=b AND c<=b) AND (a<=0 OR b<0) = (a<0 AND a<=b AND c<=b AND a<=0) OR (a<0 AND a<=b AND c<=b AND b<0) = (a<0 AND 0<=b AND c<=b) OR (a<0 AND 0<=b AND c<=b AND b<0) = (a<0 AND 0<=b AND c<=b) OR FALSE, denn 0<=b und b<0 ergibt False = a<0 AND a<=b AND c<=b Damit der 4. Fall eintritt darf weder Fall 1 noch Fall 2 noch Fall 3 eintreten, also: 4) [NOT(a<0)] AND [NOT((a>b) OR c>b))] AND [NOT((a>0) AND NOT((c>b) OR (b<0)))] = [a>=0] AND [a<=b AND c<=b] AND [a<=0 OR c>b OR b<0] = a>=0 AND a<=b AND c<=b AND [a<=0 OR c>b OR b<0] = a>=0 AND a<=b AND (c<=b AND [a<=0 OR c>b OR b<0]) * * Die Klammer "ausmultiplizieren" = a>=0 AND a<=b AND ((c<=b AND a<=0) OR (c<=b AND c>b) OR (c<=b AND b<0)) = a>=0 AND a<=b AND ((c<=b AND a<=0) OR FALSE OR (c<=b AND b<0)) = a>=0 AND a<=b AND ((c<=b AND a<=0) OR (c<=b AND b<0)) = a>=0 AND a<=b AND (c<=b AND (a<=0 OR b<0)) = a>=0 AND a<=b AND c<=b AND (a<=0 OR b<0) * Anders Klammern = (a>=0 AND a<=b AND c<=b) AND (a<=0 OR b<0) = (a>=0 AND a<=b AND c<=b AND a<=0) OR (a>=0 AND a<=b AND c<=b AND b<0) = (a>=0 AND a<=b AND c<=b AND a<=0) OR (a>=0 AND 0<=b AND c<=b AND b<0) * * Die letzte Klammer ergibt FALSE, da b nicht gleichzeitig <0 und >=0 sein kann. Aus der ersten Klammer ergibt sich a=0 aus a>=0 und a<=0 = (a=0 AND a<=b AND c<=b) = (a=0 AND b>=0 AND b>=c) Beispiele, mit welcher Belegung wann welcher Ausdruck TRUE wird: 1) 5,2,10 oder 7,1,-3 oder -3,-5,7 2) 1,2,1 oder 1,2,-1 3) -1,2,1 oder -1,3,-10 oder -2,-1,-1 4) 0,0,0 oder 0,0,-10