AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Thema durchsuchen
Ansicht
Themen-Optionen

Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

Ein Thema von hoika · begonnen am 22. Feb 2016 · letzter Beitrag vom 24. Feb 2016
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:09
Hallo,

3 Variablen
Delphi-Quellcode:
var
  B1, B2, B3: Boolean;
  bOK: Boolean;
begin
  //
  bOK := ??
end;
bOK soll jetzt nur True sein, wenn nur einer der 3 Werte True ist.
Mein bisheriger Ansatz:

Delphi-Quellcode:
bOK := False;
if B1 then
begin
  bOK := True;
end;
if B2 then
begin
  if bOK then
  begin
    bOK := False;
    Exit;
  end;
  bOK := B2;
end;
if Be then
begin
usw.

Irgendwie ist heute Montag ...

Wie löst man das eleganter ???

Ich will nicht viele And's und Or's haben.

Delphi-Quellcode:
  if ((B1=True) and (B2=False) and (B3=False)) or
     ((B1=False) and (B2=True) and (B3=False)) or
     ((B1=False) and (B2=False) and (B3=True)) then
  begin
    bOK := True;
  end;
Naja, jetzt habe ich halt doch and's und or's ...


Heiko
Heiko

Geändert von hoika (22. Feb 2016 um 17:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:17
Mit einer OR Verknüpfung?

bOK := B1 or B2 or B3;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:19
bOK := B1 xor B2 xor B3;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:39
Warum XOR?

Ah ja. Stimmt. Hast Recht. Bei mir wäre bOK auch wahr, wenn zwei oder drei wahr wären, es darf aber nur einer wahr sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:43
Delphi-Quellcode:
w:=0;
if B1 then inc(w,1);
if B2 then inc(w,1);
if B3 then inc(w,1);
bok:=W=1;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:46
Hallo,
ja, mit dem Inc und Hochzählen sieht elegant aus
Da kommt man nach 17:00 nicht drauf ...

Ah so: elegant und trotzdem leserlich sollte es sein.

Jetzt schmeisse ich mal den Profiler an und mal schaun, was am schnellsten bei 1.000.000 Vergleiche ist.


Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:52
bOK := B1 xor B2 xor B3;
Ergibt für 3mal True wieder True



Delphi-Quellcode:
w:=0;
if B1 then inc(w,1);
if B2 then inc(w,1);
if B3 then inc(w,1);
bok:=W=1;
Gruß
K-H
Könnte man auch schreiben als

bOK := IfThen(B1, 1, 0) + IfThen(B2, 1, 0) + IfThen(B3, 1, 0) = 1;
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 17:54
Hallo,
ja, mit dem Inc und Hochzählen sieht elegant aus
Da kommt man nach 17:00 nicht drauf ...
Hmm, übersichtlich, ja als Array..
(Das XOR "gefällt" mir besser. -- Shit nicht zu ende gedacht)
(kommt wohl darauf an mit welchen Hilfskonstruktionen man zuerst gearbeitet hat)

Laß mal hören was effektiver ist.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (22. Feb 2016 um 17:57 Uhr)
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 18:13
Für den Datentype Boolean (WordBool ausgenommen) funktioniert folgendes:
bOk := Ord(b1) +Ord(b2) +Ord(b3) = 1 Ich ergänze:
Wenn man so etwas wie b1 := Boolean(11); macht wird es auch hässlich.

Geändert von HeZa (22. Feb 2016 um 18:16 Uhr) Grund: Ergänzung
  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
 
#10

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein

  Alt 22. Feb 2016, 19:41
Für den Datentype Boolean (WordBool ausgenommen) funktioniert folgendes:
bOk := Ord(b1) +Ord(b2) +Ord(b3) = 1 Ich ergänze:
Wenn man so etwas wie b1 := Boolean(11); macht wird es auch hässlich.
Korrekter wäre die Form bOk := Ord( b1 ) + Ord( b2 ) + Ord( b3 ) = Ord( true );
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
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 09:56 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