Christian Bliß: Zufallszahl

Hallo,

wie kann ich eine Zufallszahl erzeugen, die zwischen 2 vorgegebenen Ganzzahlen liegt?
Z.B. eine zufällig Ausgewählte Zahl zwischen 1 und 5, oder so.

MfG Christian

  1. Moin,

    wie kann ich eine Zufallszahl erzeugen, die zwischen 2 vorgegebenen Ganzzahlen liegt?
    Z.B. eine zufällig Ausgewählte Zahl zwischen 1 und 5, oder so.

    Lies am besten die Ausgabe von "perldoc -f rand". Dann sollte deine Frage beantwortet sein. Du musst aber daran denken, dass man am PC keine "echten" Zufallszahlen erzeugen kann.
    Falls du bessere Zufallszahlen brauchst, kannst du andere Verfahren einsetzen, die dann aber mehr Zeit und Resourcen brauchen. Oder aber spezielle Hardware.

    Grüße Andres Freund

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
  2. Servus,

    da fällt mir grad darauf ein...

    Zahlen zwichen 2 und 8
    Keine 2 erlaubt und keine 8 erlaubt..

    3.4.5.6.7

    das wäre dann int(rand(4)) + 3

    Als Erklärung:

    mit int() wandelst Du die Zahl aus randomize in eine echtzahl ohne nachkommastellen.
    rand(4) bedeutet es werden zahlen zwischen 0 und 4 0.1.2.3.4 erzeugt.

    mit dem +3 am schluss rechnest Du gewissermassen die untere Grenze hoch.

    also bei rand = 0 + 3 kommt eine drei heruas und das ist grösser als 2 siehe Bedingung oben.

    Ich hoffe Du hast es verstanden.

    Gruss Matze

    1. Moin Matze,

      das wäre dann int(rand(4)) + 3

      Das Problem hierbei ist, dass int() einfach die Nachkommastellen abschneidet. Daher kann die Zahl die höchste Zahl nahezu nie erreicht werden. Daher muss man ein anderes Verfahren anwenden.
      int(rand(4)+0.5) + 3 ist besser. Auf diese Weise wird bei Zahlen, deren Nachkommawert größer/gleich 0.5 ist, aufgerundet, was vorher nicht der Fall war. Allerdings funktioniert das so bei negativen Zahlen nicht. Da müsste man erst eine Funktion schreiben, was allerdings nicht schwer ist.

      Grüße Andres Freund

      --
      ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
      1. Servus,

        d.H. im Klartext ganz genau.... man sollte niemals um 3:00 morgen aus einem Script ein teil rauskopieren ohne 1 Minute darüber nachzudenken. *schähm

        das wäre dann int(rand(4)) + 3
        Das Problem hierbei ist, dass int() einfach die Nachkommastellen abschneidet. Daher kann die Zahl die höchste Zahl nahezu nie erreicht werden. Daher muss man ein anderes Verfahren anwenden.
        int(rand(4)+0.5) + 3 ist besser. Auf diese Weise wird bei Zahlen, deren Nachkommawert größer/gleich 0.5 ist, aufgerundet, was vorher nicht der Fall war. Allerdings funktioniert das so bei negativen Zahlen nicht. Da müsste man erst eine Funktion schreiben, was allerdings nicht schwer ist.

        gruss Matze

      2. Hi!

        das wäre dann int(rand(4)) + 3
        Das Problem hierbei ist, dass int() einfach die Nachkommastellen abschneidet. Daher kann die Zahl die höchste Zahl nahezu nie erreicht werden.

        Streiche "nahezu" und es stimmt. rand(EXPR) gibt niemals EXPR selbst zurueck, nur Zahlen, die kleiner sind als EXPR.

        Daher muss man ein anderes Verfahren anwenden.
        int(rand(4)+0.5) + 3 ist besser.

        Also runden statt einfach Stellen abschneiden. Gut, aber ist das notwendig? Der Fragesteller sagte zwar, die Zufallszahl soll zwischen zwei Ganzzahlen liegen, aber nicht, dass die Zufallszahl selbst ganz sein muss. Ausserdem hat er nicht gesagt, ob die Wertebereichsgrenzen in- oder exclusive sein sollen. Ich wuerde mit der Loesung erstmal warten, bis die Aufgabe genau gestellt ist.

        So long

        --
        Es gibt Diebe, die nicht bestraft werden und einem doch das Kostbarste stehlen: die Zeit.
            -- Napoleon Bonaparte
        1. Moin,

          Also runden statt einfach Stellen abschneiden. Gut, aber ist das notwendig? Der Fragesteller sagte zwar, die Zufallszahl soll zwischen zwei Ganzzahlen liegen, aber nicht, dass die Zufallszahl selbst ganz sein muss. Ausserdem hat er nicht gesagt, ob die Wertebereichsgrenzen in- oder exclusive sein sollen. Ich wuerde mit der Loesung erstmal warten, bis die Aufgabe genau gestellt ist.

          Ich habe das ja auch nur auf eine falsche Antwort von Matze hin gesagt. In meiner Antwort steht ja nur perldoc -f rand ;-).
          Wenn das runden auch bei negativen zahlen funktionieren soll, muss man es übrigens ein wenig anders machen: int(($zahl)+($zahl/abs($zahl))/2).

          Grüße Andres Freund

          --
          ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
      3. hi!

        das wäre dann int(rand(4)) + 3
        Das Problem hierbei ist, dass int() einfach die Nachkommastellen
        abschneidet. Daher kann die Zahl die höchste Zahl nahezu nie erreicht
        werden. Daher muss man ein anderes Verfahren anwenden.

        Wieso eigentlich? Widerspricht das der Aufgabenstellung, wenn die
        höchste Zahl nicht erreicht wird?

        bye, Frank!

        --
        Never argue with an idiot. He will lower you to his level and then
        beat you with experience.