Georg: allgemein: random(x....y) ohne bestimmte Zahl

Hallo,

vom missglückten Topic versuche ich eine genauere Erklärung:

Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?

Beispiel: ich will eine Zufallszahl zwischen 1 und 100, aber es darf nicht die 50 sein.
Früher habe ich das umständlich über Schleifen und Abfragen gelöst.
Gerade kommt mir in den Sinn, zwei Random Abfragen zu machen, die die Bereiche links und rechts der zu vermeidenden Zahl abdecken.
Aber gibt's auch einen einfachen Formelweg dafür?

Ist nicht arg dringend, nur, im mich schlauer zu machen.
Danke für jedes Posting,
Grüße, Georg Neuhaus

  1. Hallo

    Aber gibt's auch einen einfachen Formelweg dafür?

    Spontan würde mir einfallen: Lasse dir eine Zahl zwischen 1 und 99 generieren. Falls sie größer als 49 ist addierst du einfach 1 dazu.

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
  2. Hallo Georg.

    Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?

    Nimm eine Schleife mit der Abbruchbedingung, dass die innerhalb der Schleife erzeugte Zufallszahl nicht die ist, die du ausschließen willst.

    Freundschaft!
    Siechfred

  3. Danke für Eure Tipps.
    Bisher habe ich es auch so wie Siechfred gemacht, bin aber mit der Lösung nicht zufrieden, weil sie theoretisch elend lange dauern kann.
    Hier ist meine bisherige Lösung, aber ich vermute, es gibt eine mathematisch geschickte:

    // eine Zahl zwischen 0 und 99 erzeugen
    // danach eine weitere Zahl zwischen 0 und 99, die aber
    // nicht der ersten entsprechen darf

    ersteZahl=random(100)
    zahlenbereichTiefer=random(ersteZahl-1);
    zahlenbereichHoeher=random(ersteZahl+1);

    zahlenBereichAuswaehlen=random(2); // ergibt entweder 0 oder 1

    // fuer einen der Zahlenbereiche entscheiden
    if (zahlenBereichAuswaehlen==0){
          zweiteZahl=zahlenbereichTiefer
    }else{
          zweiteZahl=zahlenbereichHoeher
    }

    --------------------------------

    Das scheint mir zumindest eine gerechte Methode zu sein.
    Noch irgendwelche Tipps?

    Georg

  4. Hallo,

    Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?

    Beispiel: ich will eine Zufallszahl zwischen 1 und 100, aber es darf nicht die 50 sein.

    Versuch mit JavaScript nach dem Schema:

    Zwei Zufallszahlen (von ... nicht-1 und nicht+1 ... bis) in ein Array legen und dann nochmals 0 bzw. 1 als Zufallswert bestimmen und das jeweilige Arrayelement zurueck geben.

    function Zufallszahl(von,bis,nicht)
    {
     var z;
     z=new Array(Math.round(von+(nicht-von-1)*Math.random()),Math.round(nicht+1+(bis-nicht-1)*Math.random()));
     return z[Math.round(Math.random())];
    }

    Ich habe mal 1000 "Ziehungen" mit von=1, bis=100, nicht=50 ausgefuehrt, die 50 war nicht dabei, 1 und 100 durchaus.

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
  5. Hi Georg,

    Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?

    Erzeuge ein Feld mit der Menge aller gewünschten Zahlen. (Bei dir also ein Feld mit 99 Elementen, dass die Zahlen 1-49 und 51-100 enthält.)

    Aus diesem Feld greifst du jetzt einen zufälligen Wert raus.
    Wenn du mehrere Werte die sich nicht wiederholen dürfen brauchst, kannst du das Feld auch zufällig umsortieren.

    http://www.dclp-faq.de/q/q-code-zufallszahlen.html

    Gruß,
      Carsten

    1. Hi,

      zwei super Tipps, vor allem der konkrete Code sieht meiner neuesten Überlegung sehr ähnlich, vielen Dank für Eure Mühe!

      Gruß,
      Georg