AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"if boolean then if" ersetzen

Ein Thema von cltom · begonnen am 5. Sep 2011 · letzter Beitrag vom 5. Sep 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#11

AW: "if boolean then if" ersetzen

  Alt 5. Sep 2011, 11:29
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
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: "if boolean then if" ersetzen

  Alt 5. Sep 2011, 11:32
Hallo,

das eine Programm ruft die Funktion auf, wenn a) showzero gesetzt ist oder b) y größer Null ist.

Das andere Programm ruft die Funktion auf, wenn a) schowzero gesetzt ist oder b) y größer Null ist, aber showzero nicht gesetzt ist.

Gruß
xaromz
Und wo ist jetzt der Unterschied in beiden Aussagen?

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!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

AW: "if boolean then if" ersetzen

  Alt 5. Sep 2011, 11:35
Das kommt immer darauf an, was gewollt ist. Die beiden Lösungen unterscheiden sich fundamental in ihrer Aussage. Wenn die einfache Variante gemeint ist, dann ist das in Ordnung, aber die Aussage, dass die beiden Statements praktisch gleichwertig sind ist grob falsch. So gesehen war auch der Ursprungscode falsch.
Falls y keine Funktion ist, sondern eine Variable gilt:
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:
a or (b and c)
Und das Distributivgesetz sagt:
Code:
a or (b and c) = (a or b) and (a or c)
Es gilt:
Code:
a or b = a or (not a) = true
Damit wird die Formel zu:
Code:
true and (a or c) = a or c
q.e.d.

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#14

AW: "if boolean then if" ersetzen

  Alt 5. Sep 2011, 11:37
Jupp, das zweite Statment {... else} if y > 0 then entspricht ja if not showzero and (y > 0) then .

Nun kann man die Beiden also zusammenfassen
if showzero or (not showzero and (y > 0)) then (wie xaromz es richtig gemacht hat)

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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Sep 2011 um 11:41 Uhr)
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#15

AW: "if boolean then if" ersetzen

  Alt 5. Sep 2011, 12:11
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?
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#16

AW: "if boolean then if" ersetzen

  Alt 5. Sep 2011, 12:22
Der rote Kasten ist ein Hinweis, der eingeblendet wird, wenn während dem Schreiben einer Antwort neue Antworten anderer Benutzer hinzugekommen sind.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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