Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Boolean-Werte addieren? (https://www.delphipraxis.net/126794-boolean-werte-addieren.html)

SirTwist 3. Jan 2009 23:34

Re: Boolean-Werte addieren?
 
Zitat:

Zitat von PeterPanino
Kann man Boolean-Werte eigentlich addieren? Und zwar so, dass aus der Summe ersichtlich ist, wie viele True- und wie viele False-Werte enthalten sind?

Hi,

ungetestet, aber wie wäre es mit einem
Delphi-Quellcode:
var
  summe: array[Boolean] of Integer;
Und dann benutzt du für deine einzelnen boolschen Ausdrücke
Delphi-Quellcode:
Inc(summe[boolausdruck]);
Gruß,
SirTwist

Namenloser 3. Jan 2009 23:51

Re: Boolean-Werte addieren?
 
Ich denke, es bleibt nichts anderes übrig, als stures Zählen.
Delphi-Quellcode:
function AddBooleanValues(Values: array of boolean): integer;
var
  i: integer;
begin
  result := 0;
  for i := 0 to high(Values) do
    if Values[i] then inc(result);
end;
Es kann entweder ein Boolean-Array übergeben werden oder sowas.

WInfo 3. Jan 2009 23:53

Re: Boolean-Werte addieren?
 
Moin, Moin,

z. B. mit der Klasse im beiliegenden Testprogramm.

Delphi-Quellcode:
PROGRAM Project1;
{$APPTYPE CONSOLE}

USES
  SysUtils,
  Windows;

TYPE
  TAddBool = CLASS
  strict private
    fAddArray: ARRAY [0..1] OF integer;
  public
    PROCEDURE Clear;
    PROCEDURE add(abool: boolean);
    PROCEDURE print;
  END;

{$region 'TAddBool'}
  PROCEDURE TAddBool.add(abool: boolean);
  BEGIN
    Inc(fAddArray[integer(not (aBool = False))]);
  END;
  PROCEDURE TAddBool.Clear;
  BEGIN
    ZeroMemory(@fAddArray, sizeof(fAddArray));
  END;
  PROCEDURE TAddBool.print;
  BEGIN
    writeln('True: ', fAddArray[1]);
    writeln('False: ', fAddArray[0]);
  END;
{$endregion}

VAR
  AddBool: tAddBool;
BEGIN
  AddBool := tAddbool.Create;
  TRY
    addbool.add(True);
    addbool.add(False);
    addbool.add(True);
    addbool.print;
    readln;
  FINALLY
    addbool.Free;
  END;
END.

omata 3. Jan 2009 23:57

Re: Boolean-Werte addieren?
 
Man kann auch den Ordinalwert eines Boolean bilden und um im Beispiel zu bleiben...
Delphi-Quellcode:
function AddBooleanValues(Values: array of boolean): integer;
var
  i: integer;
begin
  result := 0;
  for i := 0 to high(Values) do
    result:=result + ord(Values[i]);
end;

Namenloser 4. Jan 2009 00:01

Re: Boolean-Werte addieren?
 
Zitat:

Zitat von WInfo
Moin, Moin,

z. B. mit der Klasse im beiliegenden Testprogramm.

Delphi-Quellcode:
...

Vielleicht solltest du lieber einen Service schreiben und per COM darauf zugreifen :mrgreen:

@omata: Das ist halt riskant.

omata 4. Jan 2009 00:04

Re: Boolean-Werte addieren?
 
Zitat:

Zitat von NamenLozer
@omata: Das ist halt riskant.

Warum sollte das riskant sein? Der Ordinalwert von True und False wird sich niemals ändern. Wieso auch?

3_of_8 4. Jan 2009 00:07

Re: Boolean-Werte addieren?
 
Weniger riskant als eher grauenhafter Stil. Idealerweise soll Code wie Prosa lesbar sein, man liest ihn, und versteht sofort, was gemeint ist. Das hier ist weniger Prosa-Stil, sondern eher Gesetzestext-Stil. :mrgreen:

omata 4. Jan 2009 00:10

Re: Boolean-Werte addieren?
 
@3_of_8: das werde ich mir merken.

3_of_8 4. Jan 2009 00:18

Re: Boolean-Werte addieren?
 
Im Übrigen: Der Ordinalwert von True als LongBool, wie es glaube ich bei manchen C-Versionen genutzt wird, oder zumindest, und vor allem, wie es Windows in einigen Bibliotheksfunktionen nutzt, ist $FFFFFFFF. Wenn du deinen Code also mit LongBools machst, bekommst du am Ende die Anzahl der True-Werte negativ heraus. ;)

True ist eben nicht wirklich als Boolean(1) definiert, sondern als alles, was nicht False ist, und False ist Boolean(0).

omata 4. Jan 2009 00:20

Re: Boolean-Werte addieren?
 
Oh man, Leute ihr habt es immer noch begriffen. Naja egal, ich bin dann mal wieder weg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:16 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz