php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Zahl Prozentual ausgeben (zufällig)


 
Miguel1st
19-02-2007, 22:04 
 
Hallo zusammen

Ich habe ein Problem und komme hier nicht weiter. Deshalb möchte ich euch mal um Rat fragen. Folgendes:

- Ich habe 4 Zahlen bzw. 4 Variablen
- Diese sollen zufällig ausgegeben werden, allerdings nicht jede Zahl gleich oft.
Häufigkeit (Beispiel, sollte man beliebig wählen können)

- Var 1 = 15 %
- Var 2 = 15 %
- Var 3 = 30 %
- Var 4 = 40 %

Das ganze sollte auch um 1 Variable erweitert werden können.

Ich habe überlegt, das ganze mit einer Zufallszahl 1-100 und switch oder if/elseif Abfragen zu machen. Aber gibts da nicht sauberere oder einfachere Lösungen...?

 
Shurakai
20-02-2007, 00:27 
 
Ich glaube deine Lösung ist schon ziemlich gut. Also die zufällig generierte Zahl sagt dann welche Variable genommen wird - je nachdem, in welchem Prozentbereich sie kommt.

Mathematisch gesehen muss man natürlich noch voraussetzen, dass das ein LaPlace-Versuch ist, was man aber durchaus kann.

 
3DMax
20-02-2007, 00:52 
 
die prozente ergeben in summe 100, die zufallszahl ist eine zahl im bereich von 1 bis 100.
also die prozente solange addieren, wie deren summe kleiner als die der zufallszahl ist.

wenn da jetzt kein grober denkbolzen drinnsteckt, sollte der ansatz passen:

$vars=array('var1'=>15, '$var2'=>15, 'var3'=>30, 'var4'=>40);

$rand=rand(1, 100);

$sum=0;
foreach($vars as $key => $percent)
{
$sum+=$percent;
if($sum<$rand)
continue;
else
break;
}

echo 'Var: '.$key.' Prozent: '.$percent.' Zufallszahl: '.$rand.'<br />';

 
wahsaga
20-02-2007, 08:52 
 
Man könnte schon vorher summieren, dann spart man sich das bei der Ermittlung einer neuen Zahl, braucht dort dann nur noch einfache Vergleiche.
die prozente ergeben in summe 100, die zufallszahl ist eine zahl im bereich von 1 bis 100.
Beim Hinzufügen eines neuen Wertes muss man dann entweder wieder auf 100% "normalisieren" - oder man wählt stattdessen die Zufallszahl aus dem Bereich 1 bis $gesamtsumme.

 
Miguel1st
20-02-2007, 12:13 
 
Ok ich werde es mal versuchen, danke.
Das mit dem normalisieren muss man allerdings wirklich regeln. Aber so oft wird das nicht geändert.


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:40 Uhr.