AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi prozentualer Anteil bei Zufallszahlen
Thema durchsuchen
Ansicht
Themen-Optionen

prozentualer Anteil bei Zufallszahlen

Ein Thema von freak4fun · begonnen am 10. Mai 2006 · letzter Beitrag vom 17. Mai 2006
Antwort Antwort
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

prozentualer Anteil bei Zufallszahlen

  Alt 10. Mai 2006, 13:22
Hallo,
Ich erstelle ein Feld mit 10 x 10 Feldern. Die Felder sind mit 1 und Null beschrieben. Die Beschriftung erfolgt zufällig. Wie kann ich erreichen, dass 70% der Zahlen eine 1 sind?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#2

Re: prozentualer Anteil bei Zufallszahlen

  Alt 10. Mai 2006, 13:26
Delphi-Quellcode:

  zahl:=random(9)+1; // 1..10
  if zahl in 1..7 then result:=1 else result:=0;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: prozentualer Anteil bei Zufallszahlen

  Alt 10. Mai 2006, 13:27
entweder du nimmst ein Array[100] füllst es zu 70% mit der einen Zahl und den Rwest mit der Anderen, mischst das und verteilst den Inhalt auf die 10x10 Felder, dann hast du genau 70% Verteilung,

oder fals es nur "ungefähr" 70% sein sollen, dann halt Random direkt versenden und je nach Wertebereich deine Werte einsetzen.
If Random < 0.7 Then x := 1 Else x := 0;
@arbu man:
random(9)+1 = 1..9, da random(9) = 0..8 ist

also wie wäre es dann damit?
Delphi-Quellcode:
zahl:=random(10); // 0..9
if zahl in 0..6 then result:=1 else result:=0;

zahl:=random(10); // 0..9
if zahl < 7 then result:=1 else result:=0;

if random(10) < 7 then result:=1 else result:=0;

[edit]schreibfehler...schreibfehler...nmachtrag...schrei bfehler
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 freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: prozentualer Anteil bei Zufallszahlen

  Alt 10. Mai 2006, 13:34
Danke himitsu. Da es nicht genau 70% sein müssen hab ich mich für die zweite Variante entschieden. Sie ist doch etwas besser als die Version von arbu man, dem ich natürlich auch danke.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: prozentualer Anteil bei Zufallszahlen

  Alt 17. Mai 2006, 15:36
OK, dank dem zuvielen ODER und der wohl unglücklich gewählten Position für dat Beispiel war's wohl etwas misverständlich ... du mußt die 1. Variante nehmen, wenn du genau 70% willst, denn die 2. Variante gibt nur mit einen zufälligen Wahrscheinlichkeit zufällig 70% aus

Also entweder du legst vorher die 70%ige Verteilung fest, oder du mußt wärdend der Berechnung die tatsächliche Verteilung ermitteln und daran dann die zukünftige Verteilung festlegen.

Delphi-Quellcode:
For i := 0 to 99 do
  If i >= 70 Then X[i] := 0 Else X[i] := 1;
For i := 0 to irgendwas do
  Tausche(X[Random(100)], X[Random(100)]);
//in X[0..99] steht jetzt die genau 70%-Verteilung
Delphi-Quellcode:
For i := 0 to 99 do
  If Random => 0.70 Then X[i] := 0 Else X[i] := 1;
//in X[0..99] steht jetzt eine zufällig 70%ige Verteilung
RANDOM gibt ja "zufällig" Werte mit eine relative gleichmäßigen Verteilung aus, aber das auch nur über eine große Anzahl an Werten.

Hier wäre mal ein Beispiel, wie man eventuell (ist zwar nicht unbedingt do optimal gelöst) die Verteilung wärend der Berechnung beeinflussen kann.
Delphi-Quellcode:
For i := 0 to 99 do Begin

  // Verteilung berechnen
  If i > 0 Then Begin
    A := 0;
    For i2 := 0 to i - 1 do
      A := A + X[i2];
    A := A / i;
  End Else A := 0.5;

  // anhand der aktuellen Verteilung eventuell die Werte festlegen
  If (i >= 70) and (A >= 0.7) Then X[i] := 0
  Else (i >= 30) and (A < 0.3) Then X[i] := 1
  Else X[i] := Random(2);

End;
die letzte Abfrage sollte man aber eher so machen, daß nicht mit festen Wahrscheinlichkeiten gerechnte wird, sondern mit Dynamische.

Bei :=0/1 ist die Wahrscheinlichkeit ja 100% und bei :=Random(2) ist sie 50%, daß eine bestimmte Zahl (nicht) gezogen wird.

Besser wäre es halt, wenn da je nach aktueller Verteilung nur angegeben wird mit welcher Wahrscheinlichkeit eine bestimmt Zahl als nächstes kommen soll/muß.

So nach dem Motto,
If Random <= A Then X[i] := 0 Else X[i] := 1; oder so ähnlich.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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:35 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