AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
Zitat:
Delphi-Quellcode:
drüber ;-)
{Assembler-Code macht folgendes:
w:=0; if B1 then inc(w,1); if B2 then inc(w,1); if B3 then inc(w,1); bok:=W=1;} |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
Delphi-Quellcode:
bOK := (B1 xor B2 xor B3) and not (B1 and B2 and B3);
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
Meine Anerkennung! |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Eventuell so?
Delphi-Quellcode:
function IsOneOfThree( const B1, B2, B3: Boolean ): Boolean;
begin Result := ( B1 xor B2 xor B3 ) and not ( B1 and B2 and B3 ); end; function IsOneOfFour( const B1, B2, B3, B4: Boolean ): Boolean; begin Result := IsOneOfThree( IsOneOfThree( B1, B2, B3 ), B4, False ); end; |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Für die beliebige Anzahl an Bool-Werten (Array) würde mir jetzt eher so etwas vorschweben:
Delphi-Quellcode:
function IsOnlyOneTrue(const BoolArr: TArray<Boolean>): Boolean;
var I: Integer; begin Result := False; for I := Low(BoolArr) to High(BoolArr) do if BoolArr[I] then if Result then Exit(False) else Result := True; end; |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Hallo,
nachdem ich den Code gezeigt habe, wurde mir gesagt "Falsch!", der erste True-Wert wird genommen, egal wie viele True sind ;) Heiko |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
bOK := (B1 xor B2 xor B3 xor B4) and not (B1 and B2 and B3 and B4) vermutlich aber falsch, wie mir jetzt dämmert, weil das Zwischenergebnis der xor-Operationen ständig alterniert (ich bin jetzt auf die Schnelle zu bequem zum Denken oder Probieren). Es kommt also darauf an, daß die Anzahl der Operanden (un)gerade bleibt. Bei 5 Operanden bOK := (B1 xor B2 xor B3 xor B4 xor B5) and not (B1 and B2 and B3 and B4 and B5) sollte es aber wieder stimmen. Edit: Asche auf mein Haupt, es klappt weder mit 4en noch mit 5en. Ist wohl doch nicht verallgemeinerbar. Schade. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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