Ähm, Leute... jetzt mal ganz pragmatisch, ohne Ausschweife in Theorien über Zufall etc. (Auch wenn ich das ebenso interessant finde):
Die Variante mit einem zu gleichen Teilen gefüllten gemischten Array scheint mir doch sehr nach dem auszusehen, was der Fragesteller haben will!? Da hilft auch langes Lamentieren nix
.
Und um an der Fachsimpelei anzuknüpfen: Auch bei dieser Variante ist sehr wohl Zufall enthalten. Nicht was das Verhältnis der Vorkommen der Werte angeht, aber durchaus (ja nach verwendetem Mischalgo) in der Reihenfolge der Vorkommen. Ob nun das letzte Vorkommen mit Kenntniss aller vorigen determiniert ist, ist doch völlig unerheblich. Mit geeigneter Mischmethode ist das letzte Vorkommen genauso mit einer Wahrscheinlichkeit von 1:2 true (bzw. false) wie es an jeder anderen Stelle auch wäre (wenn das Array 1:1 true:false gefüllt ist).
Ich glaube nicht dass der Fragesteller ausdiskutieren wollte ob er nun (pseudo-)echten Zufall haben möchte / brauchen kann, sondern ganz einfach eine Lösung zu seinem Problem sucht. Diese wäre ein solches Array denke ich
Eine RandomBool-Funktion gibt es in Delphi nicht, allerdings stehen im Thread verteilt nun mehrere Wege das zu erreichen. Und wenn es nun unbedingt als Funktion sein soll... verpack es in eine
. Die Bedingung nach N Ziehungen aber je N/2 true und false zu erhalten garantiert diese Herangehensweise jedoch nicht. Dazu wäre es eben im Vorfeld nötig zu wissen wie viele Ziehungen letztlich gemacht werden sollen, und sich der Möglichkeit des Arrays zu bedienen.
Ohne Kenntnis über die Gesamtzahl der Ziehungen ließe sich das nur noch näherungsweise erzwingen, in dem man jedes Mal mitprotokolliert in welchem Verhältnis true/false aufgetreten sind, und die nächste Ziehung mit einer entprechend gegengerichteten Wahrscheinlichkeit durchzuführen. (Wie dies gemacht werden kann steht auch schon im Thread.) Bei dieser Variante ist es ebenfalls nicht garantiert ein 1:1 herauszubekommen, allerdings ließe sich so erreichen dass der "Zufall" schon früher als nach 1000 Ziehungen eine Ausgewogenheit erreicht. Wenn man die Wahrscheinlichkeit extrem setzt, so erhält man jedoch irgendwann ein alternierendes System bei dem lediglich true/false/true/false/... erzeugt wird -> also voll deterministisch. D.h. mit dieser Variante lässt sich der (Pseudo-)Zufall quasi stufenlos in eine deterministische Folge wandeln, die zwar frühe Ausgewogenheit immer wahrscheinlicher macht, aber eben den "Zufall"
unwahrscheinlicher
Und nu geh ich schlafen
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel