![]() |
AW: "if boolean then if" ersetzen
Beide Varianten haben zumindest das selbe Ergebnis. Beweis durch Wahrheitstabelle:
Code:
showzero | y > 0 | ((showzero) || (y > 0)) | ((showzero) || ((-showzero) && (y > 0)))
0 | 0 | 0 | 0 0 | 1 | 1 | 1 1 | 0 | 1 | 1 1 | 1 | 1 | 1 |
AW: "if boolean then if" ersetzen
Zitat:
Mal mathematisch/logisch betrachtet:
Code:
A or ( not A and B ) = ( A or not A ) and ( A or B ) = A or B
(A or not A) ist immer WAHR! |
AW: "if boolean then if" ersetzen
Zitat:
Die beiden Lösungen unterscheiden sich in keiner Weise, das Ergebnis ist exakt identisch. Man kann sie auch ineinander umformen. Vorraussetzung: y und showzero bleiben bei mehrfacher Auswertung konstant. Ich definiere: a := showzero b := not showzero c := y > 0 xaromz Statement wird damit zu
Code:
Und das Distributivgesetz sagt:
a or (b and c)
Code:
Es gilt:
a or (b and c) = (a or b) and (a or c)
Code:
Damit wird die Formel zu:
a or b = a or (not a) = true
Code:
q.e.d.
true and (a or c) = a or c
Mit teilweiser Boolescher Auswertung (standardmäßig aktiviert) entspricht der Code komplett den Ursprungscode, bei deaktivierter teilweiser Auswertung wird in jedem Fall (y>0) geprüft, falls y also eine Funktion ist wird diese immer ausgeführt und nicht nur falls showzero falsch ist. Oha, roter Kasten. Aber das mit der teilweisen Auswertung hat noch keiner gesagt :mrgreen: |
AW: "if boolean then if" ersetzen
Jupp, das zweite Statment
Delphi-Quellcode:
entspricht ja
{... else} if y > 0 then
Delphi-Quellcode:
.
if not showzero and (y > 0) then
Nun kann man die Beiden also zusammenfassen
Delphi-Quellcode:
(wie xaromz es richtig gemacht hat)
if showzero or (not showzero and (y > 0)) then
Jetzt noch Kürzen, die Klammern auflösen usw.:
Delphi-Quellcode:
if showzero or (not showzero and (y > 0)) then
// beide AND-Teile in Klammern (damit der nächste Einfügeprozess einfacher zu erkennen ist) if showzero or ((not showzero) and (y > 0)) then // das OR auflösen, bzw. OR und AND austauschen ... also den linken OR-Teil in beide AND-Teile einfügen if (showzero or not showzero) and (showzero or (y > 0)) then // x or not x = true if true and (showzero or (y > 0)) then // nun nur noch "true and ..." rauskürzen und fertig if showzero or (y > 0) then [edit] menno :cry: |
AW: "if boolean then if" ersetzen
Falls es für die Diskussion noch erforderlich ist:
y ist eine Variable. Es soll nicht mehr passieren als dass alle Werte angezeigt werden, ausser eben der User will Null-Werte nicht angezeigt haben (und die Werte sind auch wirklich Null). Ich hoffe, ich hab durch meine urpsrüngliche Problemstellung niemanden auf die falsche Fährte gelockt. btw. "roter Kasten" wie/wo/was? |
AW: "if boolean then if" ersetzen
Der rote Kasten ist ein Hinweis, der eingeblendet wird, wenn während dem Schreiben einer Antwort neue Antworten anderer Benutzer hinzugekommen sind.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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