Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Überprüfen, ob drei Vergleiche gleich sind (https://www.delphipraxis.net/138606-ueberpruefen-ob-drei-vergleiche-gleich-sind.html)

Dax 13. Aug 2009 14:10

Re: Überprüfen, ob drei Vergleiche gleich sind
 
Um es schön in einer Zeiler zu halten, mit dem Wissen, dass Boolean = equivalent XNOR:
Delphi-Quellcode:
not ((not ((S1 = '') xor (S2 = ''))) xor (S3 = ''))

mleyen 13. Aug 2009 14:53

Re: Überprüfen, ob drei Vergleiche gleich sind
 
1. Später weiß bei sowas doch keiner mehr was der Programmierer da eigentlich wollte. (Dazu müsste man das bissl schon kommentieren)
2. Seh ich das richtig, das es falsch ist?
Wenn man alle 3 Strings voll übergibt, ergibt das xor ture wird negiert und false kommt raus.

Hier, eine funktionierende Variante mit nur einen Zugriff auf die Variablen:
Delphi-Quellcode:
function XZiseSeinVergleich(const S1, S2, S3: string): Boolean;
begin
  if Str1='' then
  begin
    if Str2='' then
      result := Str3=''
    else
      Result := false
  end
  else
  begin
    if Str2<>'' then
      result := Str3<>''
    else
      Result := false
  end;
end;

Dax 13. Aug 2009 15:01

Re: Überprüfen, ob drei Vergleiche gleich sind
 
Hm, du hast Recht. Beim schreiben hatte ich nicht beacht, dass xor nicht so einfach auf n Operanden erweiterbar ist :) Letztlich kommt es wohl immer aufs selbe raus: in Delphi geht das nur mit mehreren Zugriffen, oder nur mit mehreren Zeilen.

himitsu 13. Aug 2009 15:15

Re: Überprüfen, ob drei Vergleiche gleich sind
 
i hab's jetzt
Delphi-Quellcode:
if not (((S1 = '') xor (S2 = '')) or ((S1 = '') xor (S3 = ''))) then
// oder
if not (((S1 <> '') xor (S2 <> '')) or ((S1 <> '') xor (S3 <> ''))) then

xZise 13. Aug 2009 16:29

Re: Überprüfen, ob drei Vergleiche gleich sind
 
Zitat:

Zitat von himitsu
da muß man aufpassen

True (die Konstante):
BOOL (c) = LongBool (delphi) = -1 = $FFFFFFFF
WordBool (delphi) = -1 = $FFFF
bool (c) = ByteBool (delphi): -1 = $FF
Boolean (Delphi): 1 = $01

True (bei booleanischen Vergleichen):
alles: b<>0

True (bei binärischen Vergleichen):
alles: b=Wert

darum ist auch b=True so fartal, da dort wirklich geprüft wird, ob b genau dem True entspricht

False (die Konstante und bei Vergleichen):
alles: b=0

Joar genau, aber rein theoretisch müsste das ja klappen ;) Wenn auch nicht gerade sprachübergreifend sicher :mrgreen:

Zitat:

Zitat von Dax
Um es schön in einer Zeiler zu halten, mit dem Wissen, dass Boolean = equivalent XNOR:
Delphi-Quellcode:
not ((not ((S1 = '') xor (S2 = ''))) xor (S3 = ''))

Aber das wird nicht funktionieren: Und zwar nimmst du nicht beim Vergleich zu S3 nicht mit rüber, wie S1/S2 aussahen: S1 und S2 != '' und S3 = '' -> True, da ja S1 und S2 = '' genau gleich sind beim innersten Vergleich.

Zitat:

Zitat von himitsu
i hab's jetzt
Delphi-Quellcode:
if not (((S1 = '') xor (S2 = '')) or ((S1 = '') xor (S3 = ''))) then
// oder
if not (((S1 <> '') xor (S2 &lt;&gt; '')) or ((S1 &lt;&gt; '') xor (S3 &lt;&gt; ''))) then

Sieht interessant aus :D

Zitat:

Zitat von himitsu
[...]also so Schlimm ist dann ein Vergleich via = oder &lt;&gt; garnicht :angel:

Nein aber das holen des Wertes dauert schon, wobei ich da mal wieder zu pingelig bin.

Und es hört sich so schön an:
Delphi-Quellcode:
Result := ((S1 = '') = (S2 = '') = (S3 = ''))
Nun da ich eh die Werte zwischenspeichern "muss", werde ich himitsus letzte Variante nehmen.

MfG
xZise

himitsu 13. Aug 2009 17:30

Re: Überprüfen, ob drei Vergleiche gleich sind
 
Zitat:

Zitat von xZise
Nein aber das holen des Wertes dauert schon, wobei ich da mal wieder zu pingelig bin.

ob man da nun einen String-Zeiger holt oder einen Boolean, macht keinen großen Unterschied :-D

xZise 13. Aug 2009 17:46

Re: Überprüfen, ob drei Vergleiche gleich sind
 
Aus der Tabelle aber nicht mehr. (Imho)

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.
Seite 2 von 2     12   

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