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 3 von 4     123 4      
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#21

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

  Alt 23. Feb 2016, 10:39
Ich würde auch ein Bool Array vorziehen:
Delphi-Quellcode:
function IsNumberOfValuesSet(const AValues : array of Boolean; AMax : Integer = 1) : Boolean;
var
  LCount : Integer;
begin
  LCount := 0;
  for Result in AValues do
    if Result then
    begin
      Inc(LCount);
      if LCount > AMax then
        Break;
    end;
  Result := LCount = AMax;
end;

begin
  Writeln(IsNumberOfValuesSet([False]));
  Writeln(IsNumberOfValuesSet([False, True]));
  Writeln(IsNumberOfValuesSet([False, True, False]));
  Writeln(IsNumberOfValuesSet([False, True, False, True]));
  Writeln(IsNumberOfValuesSet([False, True, False, True], 2));
  Readln;
end.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 23. Feb 2016, 12:57
B1=True Wobei man das ja eigentlich nicht macht.

Die mathematischen Lösungen mit Ord gehen natürlich nur unter der Annahme, daß man davon ausgeht, daß nur True oder False drin steht.

Wobei True = not False, bzw. True <> "True".
Der Delphi-Boolean kennt ja 254 "True" und ein False, deswegen auch niemals B1=True
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EricMeyer

Registriert seit: 31. Mai 2012
Ort: Berlin
23 Beiträge
 
#23

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

  Alt 23. Feb 2016, 13:08
oder sowas

function CountTrues (ABoolean :array of Boolean):Integer
for i ...
result := result + ((-1)*strtoint(booltostr(ABoolean [i])))

Geändert von EricMeyer (24. Feb 2016 um 07:30 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#24

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

  Alt 23. Feb 2016, 13:12
B1=True Der Delphi-Boolean kennt ja 254 "True" und ein False, deswegen auch niemals B1=True
Fangen die modernen Delphi-Compiler (so ab Version XEx) diese Programmierschludrigkeit nicht endlich ab? Genaugenommen ist das ja kein Fehler, denn rein von der booleschen Logik ist true=true.

Und das "=true" passiert vermutlich auch so manchem gestandenen Programmierer dann und wann, das ist einfach mental zu aufdringlich. Dito: "=false" anstatt "if not"....

Geändert von Delphi-Laie (23. Feb 2016 um 13:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 23. Feb 2016, 13:22
Nein, das darf nicht abgefangen werden.

Es kommt auf die "Auswertung an, also ob man es logisch oder binär vergleich ... = ist in Pascal immer "binär".

Nur bei der Typkonvertierung zwischen Boolean/ByteBool/WordBool/LongBool/Variant wird der logische Wert konvertiert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TiGü

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

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

  Alt 24. Feb 2016, 11:38
Um das nochmal aufzugreifen:
(~a*~b*c)+(~a*b*~c)+(a*~b*~c) in http://www.elektroniker-bu.de/kvdiagramm.htm reingehauen und sehen, dass die DNF nicht vereinfacht werden kann.
Kannst auch die KNF nehmen ((a+b+c) * (~b+~c) * (~a+~c) * (~a+~b)), aber das bringt dich ja auch nicht wirklich weiter.

Also:
B1 := (not B1 and not B2 and B3) or
(not B1 and B2 and not B3) or
(B1 and not B2 and not B3);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 24. Feb 2016, 13:07
if Ord(A) + Ord(B) + Ord(C) <= 1 then (maximal 1) und if Ord(A) + Ord(B) + Ord(C) = 1 then (immer 1)
geht halt nur, wenn wirklich nur True und False drin stehen.
Einen Cast von Boolean auf Byte und zurück macht Delphi immer nur binär.

Es gibt in Pascal keine Möglichkeit zu steuern ob Binär oder Logisch konvertiert wird. (es gibt immer nur je Eines von Beidem)

if Ord(A <> False) + Ord(B <> False) + Ord(C <> False) = {<=} 1 then

NOT arbeitet bei einem Boolean logisch und nicht binär (glaub ich), also ginge auch
if Ord(not A) + Ord(not B) + Ord(not C) = {>=} 2 {3-1} then
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#28

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

  Alt 24. Feb 2016, 13:42
Wie wäre es, wenn man sich dafür eine Hilfsfunktion baut?

Pseudocode:
Code:
def OneIfTrue(mybool):
    return 1 if mybool else 0

def ExactlyOneIsTrue(b1, b2, b3):
    return OneIfTrue(b1) + OneIfTrue(b2) + OneIfTrue(b2) == 1
Fände ich am elegantesten, solange sich ein Array noch nicht lohnt.
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 24. Feb 2016, 13:51
OneIfTrue , bzw. IfThen(b1, 1, 0) sollten aber hoffentlich als Inline-Funktion vorliegen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#30

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

  Alt 24. Feb 2016, 13:52
Wie wäre denn:
b4 := Ord(b1 and True) + Ord(b2 and True) + Ord(b3 and True) = 1;
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 17:42 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