• 30-03-2010, 17:12:38
    #1
    Merhaba,bi sorum var şimdi ben 40 tane sayı alıcam en düşük 300.000 en yüksek 15.000.000 olucak,ama önceki sayıdan her zaman büyük olucak, yani 300.000 den başladıysa birdahaki sayı 300.000 den büyük olucak,ancak yapamadım bu olayı yani eğer küçük ise döngüyü tekrar çalıştırmam gerek kuramadım mantığı kodları görünce anlarsınız zaten bi bakarsanız sevinirim.


    <?php
    $min=300000;
    $max=15000000;
    session_start();
    $_SESSION['son']=$min;
    for($i=1;$i <= 40; $i++) {
        $tut=rand($min,$max);
        if ($tut > $_SESSION['son']) {
            echo "Seviye:".$i." - ".$tut."<br />";
            $_SESSION['son']=$tut;
            
        }else{
            ///İŞTE BU KISIMDA NE YAPACAĞIMI KURAMADIM
        }
    }
    ?>
  • 30-03-2010, 17:32:45
    #2
    $secil=array();
    $sayac="0";
    $min="300";
    $max="1500";
    while(!isset($liste[39])) {
    $bul = rand($min,$max);
    if (!in_array($bul, $secil)) {
    $secil[$sayac] = $bul;
    }
    }
    sort($secil);
    o verdiğin sistem yerien şu şekilde bir kod oluşturdum. sonucunda $secil dizisinin içerisinde 40 adet sayı küçükten büyüğe sıralanmış halde bulunuyor. bu kod bloğundan sonra while veya for döngüsü ile $secil dizinin içeriğine istediğini yaptırabilirsin, istediğin şekilde kullanabilirisn.

    kontrol etmeden yazdım, yazım hatası falan çıkabilir.
  • 30-03-2010, 17:49:00
    #3
    O algoritma ile her seferinde 40 sayı üretilemeyebilir.rand max a çok yakın bir değer bulduğunda sıkıntı olacaktır.aşağıdaki işini görebilir.Ama rand ile max a yakın değer alırsa son sayılar ard arda gelecektir yine.hiç üretmemesinden iyidir belkide

    $min=300000;
    $max=15000000;
    $toplam=40;
    for($i=1;$i <= $toplam; $i++) {
        $m=$toplam-$i;
        $min=rand($min+1,$max-$m);
        echo "Seviye:".$i." - ".$min."<br />";
    }
  • 30-03-2010, 18:31:38
    #4
    ZorbAA adlı üyeden alıntı: mesajı görüntüle
    $secil=array();
    $sayac="0";
    $min="300";
    $max="1500";
    while(!isset($liste[39])) {
    $bul = rand($min,$max);
    if (!in_array($bul, $secil)) {
    $secil[$sayac] = $bul;
    }
    }
    sort($secil);
    o verdiğin sistem yerien şu şekilde bir kod oluşturdum. sonucunda $secil dizisinin içerisinde 40 adet sayı küçükten büyüğe sıralanmış halde bulunuyor. bu kod bloğundan sonra while veya for döngüsü ile $secil dizinin içeriğine istediğini yaptırabilirsin, istediğin şekilde kullanabilirisn.

    kontrol etmeden yazdım, yazım hatası falan çıkabilir.
    bunu çalıştıramadım

    MKBTR adlı üyeden alıntı: mesajı görüntüle
    O algoritma ile her seferinde 40 sayı üretilemeyebilir.rand max a çok yakın bir değer bulduğunda sıkıntı olacaktır.aşağıdaki işini görebilir.Ama rand ile max a yakın değer alırsa son sayılar ard arda gelecektir yine.hiç üretmemesinden iyidir belkide

    $min=300000;
    $max=15000000;
    $toplam=40;
    for($i=1;$i <= $toplam; $i++) {
        $m=$toplam-$i;
        $min=rand($min+1,$max-$m);
        echo "Seviye:".$i." - ".$min."<br />";
    }
    bundada son sayılar şöyle geliyor

    Seviye:15 - 14999974
    Seviye:16 - 14999975
    Seviye:17 - 14999977
    Seviye:18 - 14999978
    Seviye:19 - 14999979
    Seviye:20 - 14999980
    Seviye:21 - 14999981
    Seviye:22 - 14999982
    Seviye:23 - 14999983
    Seviye:24 - 14999984
    Seviye:25 - 14999985
    Seviye:26 - 14999986
    Seviye:27 - 14999987
    Seviye:28 - 14999988
    Seviye:29 - 14999989
    Seviye:30 - 14999990
    Seviye:31 - 14999991
    Seviye:32 - 14999992
    Seviye:33 - 14999993
    Seviye:34 - 14999994
    Seviye:35 - 14999995
    Seviye:36 - 14999996
    Seviye:37 - 14999997
    Seviye:38 - 14999998
    Seviye:39 - 14999999
    Seviye:40 - 15000000
  • 30-03-2010, 18:52:49
    #5
    rand kafasına göre maksimuma doğru töleranslı çalışıyor gibi

    aşağıdaki kod işine yarayacak sanırım.

    $min=300000;
    $max=15000000;
    $toplam=40;
    for($i=1;$i <= $toplam; $i++) {
        $maxs=($max*$i)/$toplam;
        $min=rand($min+1,$maxs);
        echo "Seviye:".$i." - ".$min."<br />";
    }
  • 30-03-2010, 19:04:23
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
    <?php
    $dizi = array();
    $min = 300000;
    $max = 15000000;
    while(count($dizi) < 40) {
      $r = rand($min,$max);
      if (!in_array($r, $dizi)) $dizi[] = $r;
    }
    sort($dizi);
    print_r($dizi); 
    ?>
  • 30-03-2010, 19:04:28
    #7
    ufak 2 hata yapmışım, test etmemeiştim zaten hata olabilir demiştim. Test ettim şimdi düzeltip sorunsuz halini veriyorum, istediğiniz şekilde modifiye edebilirsiniz

    $secil=array();
    $sayac="0";
    $min="300";
    $max="1500";
    while(!isset($secil[39])) {
    $bul = rand($min, $max);
    if (!in_array($bul, $secil)) {
    $secil[$sayac] = $bul;
    $sayac++;
    }
    }
    sort($secil); 
    //buradan sonrası sayıları görmek için
    for($i=0;isset($secil[$i]);$i++) {
    echo $secil[$i].'<br />';
    }
  • 30-03-2010, 19:07:16
    #8
    MKBTR adlı üyeden alıntı: mesajı görüntüle
    rand kafasına göre maksimuma doğru töleranslı çalışıyor gibi

    aşağıdaki kod işine yarayacak sanırım.

    $min=300000;
    $max=15000000;
    $toplam=40;
    for($i=1;$i <= $toplam; $i++) {
        $maxs=($max*$i)/$toplam;
        $min=rand($min+1,$maxs);
        echo "Seviye:".$i." - ".$min."<br />";
    }
    evet istediğimi verdi bu sağol hocam