Michael W.: Zufallszahlen

Hallo,

Ist es denn so schwer eine zufallszahl zu erzeugen, deren anzahl der ziffern in der variable $anzahl_der_ziffern steht?

ich dachte da so prompt an eine schleife:

<?php
$anzahl_der_ziffern = '5';
for($i=0; $i = $anzahl_der_ziffern; $i++)
{
   $ziffern[] = mt_rand(0,9);
}
$zahl = join("", $ziffern);
echo $zahl;
?>

gibt dann je nach dem eine zahl mit $anzahl_der_ziffern aus.
aber eben immer die selbe.
also hab ich versucht es mit millisekunden zu lösen, aber da kommt ja innerhalb der schleife auch immer das selbe raus.
was macht man da? die $anzahl_der_ziffern geht hat einen maximalwert von ca. 20 mehr muss nicht sein. und je nach usereingabe soll eine zahl von 1-20 ziffern erzeugt werden.

wie?

MfG
Michael Wölk

  1. Hi Michael,

    <?php
    $anzahl_der_ziffern = '5';
    for($j = 1; $j <= 100; $j++){
      for($i=0; $i <= $anzahl_der_ziffern; $i++){
       $ziffer = $ziffer.mt_rand(0,9);
      }
      echo $ziffer." ";
      if($j % 5 == 0){
        echo "<br>";
      }
      $ziffer = "";
    }
    ?>

    was gibt Dir denn dieses Skript aus???
    Nicht das Richtige???
    In Deinem Skript war ein kleine Fehler (was allerdings dazu ge-
    führt haben dürfte, dass das Skript gar nicht geht:
    for($i=0; $i = $anzahl_der_ziffern; $i++)
                 ^

    Gruss vom Horst

    1. Hi Horst,

      <?php
      $anzahl_der_ziffern = '5';
      for($j = 1; $j <= 100; $j++){
        for($i=0; $i <= $anzahl_der_ziffern; $i++){
         $ziffer = $ziffer.mt_rand(0,9);
        }
        echo $ziffer." ";
        if($j % 5 == 0){
          echo "<br>";
        }
        $ziffer = "";
      }
      ?>

      ganz ehrlich? - da blicke ich nicht durch (oder wills zumindest net)
      ich habs aber mal getestet: es sollen nicht massig zahlen rauskommen sondern "zufällig" eine von denen, oder?

      for($i=0; $i = $anzahl_der_ziffern; $i++)

      ja das war nicht kopiert, sondern so geschreiben (ungetestet ausm kopf).

      bei deinem script musste ausserdem noch ein $anzahl_der_ziffern--; eingebaut werden damit es auch der wahrheit enspricht.

      aber warum funktioniert das in php nicht so wie sich wohl jeder am anfang von mt_rand() verspricht. so wie ich hier mein script gepostet hab (bis auf <= ) erwarte ich von der neuen version, dass das funktioniert. kann man damit rechnen und vorallem WER macht eine "neue" version? wie lange dauert sowas? an wem muss ich mich wenden um das problem zu schildern? ich meine das ist doch ein problem oder ist das ok so, das es nicht funktioniert. wurde damit was berücksichtigt oder ist es wirklich nur ein fehler? wenn damit etwas berücksichtigt wurde dann erwarte ich das in der neuen version, eine extra funktion mt_random() oder sowas gibt die in meinem, hier geposteten, script auch wie erwartet funktioniert...
      kann man damit rechnen?

      MfG
      Michael Wölk

      1. Hi Michael,

        mein Skript sollte 100 Zahlen ausgeben (bzw 100 * 5 Ziffern)!
        100 damit Du siehst, dass die alle unterschiedlich sind.
        Ich habe das ganze nicht über ein Array gelöst, ansonsten ist
        es ganauso wie Deines.

        es sollte also eigentlich das tuen, was Du willst:
        <?php
        $anzahl_der_ziffern = '5';
        for($i=0; $i <= $anzahl_der_ziffern; $i++){
          $ziffer = $ziffer.mt_rand(0,9);
        }
        echo $ziffer;
        }
        ?>

        Probiers nochmal aus...

        Gruss vom Horst

        1. tja, da war noch eine Klammer zuviel
          jetzt läufts aber:

          <?php
          $anzahl_der_ziffern = '5';
          for($i=0; $i <= $anzahl_der_ziffern; $i++){
            $ziffer = $ziffer.mt_rand(0,9);
          }
          echo $ziffer;
          ?>

          gibt bei mir
          895109
          dann
          604198
          usw aus... also nicht die gleichen Zahlen.

          1. Hi,

            tja, da war noch eine Klammer zuviel
            jetzt läufts aber:

            <?php
            $anzahl_der_ziffern = '5';
            for($i=0; $i <= $anzahl_der_ziffern; $i++){
              $ziffer = $ziffer.mt_rand(0,9);
            }
            echo $ziffer;
            ?>

            gibt bei mir
            895109

            895109?? 895109??? gibt er bei mir des öfteren aus!!!
            und wenn er bei dir schon 895109 was er bei meinen anderen scripten auch des öfteren ausgegeben hat dann ist das doch server abhängig oder? die zahl geht mir so auf den sack! 895109 hier 895109 dort. man ist das jetzt ne zufallszahl oder was?

            MfG
            Michael Wölk

            1. und wenn er bei dir schon 895109 was er bei meinen anderen scripten auch des öfteren ausgegeben hat dann ist das doch server abhängig oder? die zahl geht mir so auf den sack! 895109 hier 895109 dort. man ist das jetzt ne zufallszahl oder was?

              ach was sag ich da: "server abhängig"- son quak: software abhängig!

            2. so besser:

              <?php
              $anzahl_der_ziffern = '5';
              for($i=0; $i <= $anzahl_der_ziffern; $i++){
                mt_srand((double)microtime()*1000000);
                $ziffer = $ziffer.mt_rand(0,9);
              }
              echo $ziffer;
              ?>

              viele grüße vom horst

              ps Nicht verzweifeln :)

              1. gut!
                selbst in einer 50stelligen zahl erkenne ich keine wiederholungen:

                1. 062189994705864778766644926684873227720142185142517
                2. 040609532860858766820900781438454966539990321580635
                3. 940856279701878455561882672363892403726694441522035
                4. 021003131296475040411706891874806985451998951394760

                das kann man so lassen! danke!

                MfG
                Michael Wölk

                1. Hi Michael,

                  dieses Skript zeigt, wie häufig welche Zahl auftaucht
                  <?php

                  $anzahl_der_ziffern = 2;
                  while($j < 500){
                    for($i=0; $i <= $anzahl_der_ziffern; $i++){
                      mt_srand((double)microtime()*1000000);
                      $ziffer = $ziffer.mt_rand(0,9);
                    }
                    $array[$ziffer] ++;
                    $ziffer ="";
                    $j++;
                  }
                  foreach ($array as $key => $val){
                   if($val > 1){
                    echo "********";
                  }
                    echo "$key $val<br>";
                  }
                  ?>

                  Viele Grüße
                  vom Horst

  2. Hallo, es muss heissen:

    for($i=0; $i == $anzahl_der_ziffern; $i++)

    nicht:

    for($i=0; $i == $anzahl_der_ziffern; $i++)

    MfG
    Maike