Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Logischer Ausdruck - Vereinfachung möglich? (https://www.delphipraxis.net/166460-logischer-ausdruck-vereinfachung-moeglich.html)

TiGü 14. Feb 2012 15:26

Logischer Ausdruck - Vereinfachung möglich?
 
Hallo,

beim Warten/Korrigieren von alten Code von Kollegen begegnen mir öfters solche Sachen:

Delphi-Quellcode:
If (A == False) or ((A == True) and B) then


A sind in der Regel abgefragte boolsche Flags, B entweder auch oder Vergleiche.

Da durch hier erworbendes Wissen der Vergleich auf True/False eh erstmal des Teufels Küche ist sieht das Ganze nach Korrektur so aus:

Delphi-Quellcode:
If not A or (A and B) then


Aber irgendwie sieht das immer noch skurril aus.
Kann man das nicht noch so umstellen, das man auf den ersten Blick sieht was gemeint ist?
Entweder sehe ich den Wald vor lauter Bäumen nicht, oder gehts einfach nicht anderes?

Hier die Wahrheitstabelle:
Code:
A B Erg
0 0  1
0 1  1
1 0  0
1 1  1

DeddyH 14. Feb 2012 15:30

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Delphi-Quellcode:
if not a or b then
müsste passen.

haentschman 14. Feb 2012 15:31

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Hallo...

ist doch ok...
Delphi-Quellcode:
If not A or (A and B) then
Zur Sicherheit würde ich aber noch "not A" klammern...
Delphi-Quellcode:
If (not A) or (A and B) then
;

@Detlef: not A und A and B sind doch völlig unterschiedliche Logiken...die kann man doch nicht zusammenwürfeln. :gruebel:

Uwe Raabe 14. Feb 2012 15:38

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Zitat:

Zitat von haentschman (Beitrag 1151058)
@Detlef: not A und A and B sind doch völlig unterschiedliche Logiken...die kann man doch nicht zusammenwürfeln. :gruebel:

Kann man doch! Entweder schlägt
Delphi-Quellcode:
not A = true
zu oder wenn nicht, ist
Delphi-Quellcode:
not A
offensichtlich
Delphi-Quellcode:
false
, daraus folgt aber
Delphi-Quellcode:
A = true
. Also brauche ich im zweiten Teil des
Delphi-Quellcode:
or
das nicht mehr abfragen.

DeddyH 14. Feb 2012 15:44

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Eben, A kann ja nicht gleichzeitig true und false sein ;)

haentschman 14. Feb 2012 15:45

AW: Logischer Ausdruck - Vereinfachung möglich?
 
ok... einverstanden. Dafür leidet aber imho die Lesbarkeit um schnell die Logik des Ausdruckes zu erfassen. 8-)

Uwe Raabe 14. Feb 2012 16:04

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Zitat:

Zitat von haentschman (Beitrag 1151061)
ok... einverstanden. Dafür leidet aber imho die Lesbarkeit um schnell die Logik des Ausdruckes zu erfassen. 8-)

Das sehe ich jetzt aber nicht so. Wenn man die Tabelle entsprechend liest, ist das sehr leicht einsehbar:

A B Erg
0 0 1
0 1 1
1 0 0
1 1 1

A B Erg
0 0 1
0 1 1
1 0 0
1 1 1

Daraus kann man auch direkt

A B Erg
0 0 1
0 1 1
1 0 0
1 1 1

eine andere Lösung ablesen:
Delphi-Quellcode:
not (A and not B)
, was nach den bekannten Regeln in
Delphi-Quellcode:
not A or B
umgeformt werden kann.

TiGü 14. Feb 2012 16:15

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Vielen Dank, ich stand also doch auf den Schlauch!

Sailor 15. Feb 2012 09:14

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Das läßt sich am besten mit den Gesetzen der Aussagenlogik abhandeln (assosiative/kommutative/distributive/Morgansche Gesetze), hier also


NOT(a) OR (a AND b) -> (NOT(a) OR a) AND (NOT(a) OR b) -> NOT(a) OR b

Am besten, Du gurgelst mal unter "Klassische Aussagenlogik"

shmia 15. Feb 2012 15:27

AW: Logischer Ausdruck - Vereinfachung möglich?
 
Man kann diese logischen Ausdrücke auch online vereinfachen lassen:
http://www.elektroniker-bu.de/boolesche.htm
:angel:
Also ich würd' mir da gleich einen Bookmark setzen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz