AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zufallsboolean

Ein Thema von Chemiker · begonnen am 13. Jul 2008 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#1

Zufallsboolean

  Alt 13. Jul 2008, 20:21
Delphi-Version: BDS 2006
Zufallsboolean
Folgende Funktion liefert Zufallsboolean.
Es wurde mit BDS 2006 entwickelt.
Delphi-Quellcode:
{*******************************************************************************
  Unit: uZufallsZahlen
  ltz.Ändr.: 13.07.2008
--------------------------------------------------------------------------------
  1.) Name:        function ZufallsBoolean(): boolean;
      ltz.Ändr.:    13.07.2008
      Beschreibung: Gibt zufällig TRUE oder FALSE als Boolean zurück
                    Um den Zufallszahlengenerator zu initialisieren, rufen Sie
                    Randomize einmal auf oder weisen der Variable RandSeed vor
                    dem Aufruf von ZufallsBoolean einen Wert zu.
--------------------------------------------------------------------------------
  2.) Name:        function StrZufallsBoolean(): string;
      ltz.Ändr.:    13.07.2008
      Beschreibung: Gibt zufällig 'TRUE' oder 'FALSE' als String zurück
                    Um den Zufallszahlengenerator zu initialisieren, rufen Sie
                    Randomize einmal auf oder weisen der Variable RandSeed vor
                    dem Aufruf von ZufallsBoolean einen Wert zu.

*******************************************************************************}

unit uZufallsZahlen;

interface

uses SysUtils, Math;


function ZufallsBoolean(): boolean;
function strZufallsBoolean():String;


implementation

function ZufallsBoolean(): boolean;
begin
  Result:= Random(2)=1; // 1=1 >> TRUE / 0=1 >> FALSE
end;

function StrZufallsBoolean():String;
begin
  Result:= BoolToStr(ZufallsBoolean(),true);
end;


end.
Vielleicht kannst ja jemand brauchen.

Bis bald Chemiker
Edit: function ZufallsBoolean geändert und Dax-Vorschlag übernommen.
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Zufallsboolean

  Alt 13. Jul 2008, 20:26
Verbesserungsvorschlag:
Delphi-Quellcode:
function ZufallsBoolean: Boolean;
begin
  Result := Random(2) = 1;
end;

function ZufallsBoolean(trueProzent: Double): Boolean;
begin
  Result := Random(100) < trueProzent;
end;
Es ist nett, dass du das zur Verfügung stellst, aber am Ende hat es dann doch nicht den gewissen Mehrwert.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zufallsboolean

  Alt 13. Jul 2008, 20:34
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen
result := Boolean(random(2));
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Zufallsboolean

  Alt 13. Jul 2008, 20:39
Da ist was dran, aber mit dem Vergleich finde ich es schöner

edit: Wenn ich mich Recht erinnere, ist Boolean in Delphi sogar 0 oder 1. Ich glaube mich daran zu erinnern, dass Delphi aus dem "not" ein Integer "xor 1" macht - damit wäre "not Boolen(2)" immer noch true.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Zufallsboolean

  Alt 13. Jul 2008, 20:47
Ja, ein Vergleich ist schöner. Schon allein deshalb, weil bei manchen Boolean-Typen, LongBool z.B., True nicht den Wert 1 hat, sondern $FFFFFFFF.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zufallsboolean

  Alt 13. Jul 2008, 20:51
Hallo,

Währe nett, wenn Ihr das vielleicht in die Cod-Lib irgendwie mit aufnehmen könnt, weil ich danach gesucht habe.

@ Dax: Deine Methode habe ich vorher so gehabt, wollte aber Sichersein das auch TRUE und FALSE rauskommt.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Zufallsboolean

  Alt 13. Jul 2008, 20:55
Es kommt True oder False raus, mit jeweils 50% Chance für n -> unendlich. Random(X) ist definiert als 0 <= Random(X) < X, somit wird aus Random(2) = 1 in 50% der Fälle True.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Zufallsboolean

  Alt 13. Jul 2008, 22:10
Eine andere Möglichkeit wäre noch:

Delphi-Quellcode:
function RandomBoolean: Boolean;
begin
  Result := Random() < 0.5;
end;
Dabei spart man sich die Umwandlung des Zufallswertes (der zwischen 0 und 1 liegt) in einen Integer, was u.U. schneller ist. Aber gut möglich, dass der Compiler das sowieso so optimiert.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#9

Re: Zufallsboolean

  Alt 13. Jul 2008, 22:32
Zitat von 3_of_8:
Ja, ein Vergleich ist schöner. Schon allein deshalb, weil bei manchen Boolean-Typen, LongBool z.B., True nicht den Wert 1 hat, sondern $FFFFFFFF.
laut dem freepascal ref.pdf dokument ist eine variable des LongBool typs true, wenn sie einen wert hat, der nicht 0 ist. selbiges gilt bei ByteBool und WordBool. auszug aus dem besagten dokument:

Delphi-Quellcode:
Name Size Ord(True)
Boolean 1 1
ByteBool 1 Any nonzero value
WordBool 2 Any nonzero value
LongBool 4 Any nonzero value
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Zufallsboolean

  Alt 13. Jul 2008, 22:34
Soweit ich weiss, ist das genau anders rum. Delphi erzeugt seine Zufallszahlen als einem Integer-Kongruenzgenerator und nutzt für die Periodizität das Überlaufverhalten der Integermultiplikation. Korrigiert mich, wenn ich falsch liege, ich hab schon so lange kein Delphi mehr
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 05:57 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