![]() |
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 |
AW: Logischer Ausdruck - Vereinfachung möglich?
Delphi-Quellcode:
müsste passen.
if not a or b then
|
AW: Logischer Ausdruck - Vereinfachung möglich?
Hallo...
ist doch ok...
Delphi-Quellcode:
Zur Sicherheit würde ich aber noch "not A" klammern...
If not A or (A and B) then
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: |
AW: Logischer Ausdruck - Vereinfachung möglich?
Zitat:
Delphi-Quellcode:
zu oder wenn nicht, ist
not A = true
Delphi-Quellcode:
offensichtlich
not A
Delphi-Quellcode:
, daraus folgt aber
false
Delphi-Quellcode:
. Also brauche ich im zweiten Teil des
A = true
Delphi-Quellcode:
das nicht mehr abfragen.
or
|
AW: Logischer Ausdruck - Vereinfachung möglich?
Eben, A kann ja nicht gleichzeitig true und false sein ;)
|
AW: Logischer Ausdruck - Vereinfachung möglich?
ok... einverstanden. Dafür leidet aber imho die Lesbarkeit um schnell die Logik des Ausdruckes zu erfassen. 8-)
|
AW: Logischer Ausdruck - Vereinfachung möglich?
Zitat:
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:
, was nach den bekannten Regeln in
not (A and not B)
Delphi-Quellcode:
umgeformt werden kann.
not A or B
|
AW: Logischer Ausdruck - Vereinfachung möglich?
Vielen Dank, ich stand also doch auf den Schlauch!
|
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" |
AW: Logischer Ausdruck - Vereinfachung möglich?
Man kann diese logischen Ausdrücke auch online vereinfachen lassen:
![]() :angel: Also ich würd' mir da gleich einen Bookmark setzen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz