IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Générateur de nombres aléatoires


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de raffa
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 194
    Points : 159
    Points
    159
    Par défaut Générateur de nombres aléatoires
    Bonjour à tous,
    j'essaie de créer un générateur de nombres aléatoire, 6 nombres de 1 à 42 et il faut que chaque nombre soit différents (un truc genre Lotto):

    Voici le script:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
    // Entrée les valeurs minimum et maximum pour généré chaque nombres
    $min = 1;
    $max = 42;
    $t = ' - ';
     
    // On commence le script
     
    $a = mt_rand($min, $max);
    $b = mt_rand($min, $max);
    $c = mt_rand($min, $max);
    $d = mt_rand($min, $max);
    $e = mt_rand($min, $max);
    $f = mt_rand($min, $max);
    $g = mt_rand($min, $max);
     
    $a = '<span style="color:green;font-size:small;">'.$a.'</span>';
    $b = '<span style="color:green;font-size:small;">'.$b.'</span>';
    $c = '<span style="color:green;font-size:small;">'.$c.'</span>';
    $d = '<span style="color:green;font-size:small;">'.$d.'</span>';
    $e = '<span style="color:green;font-size:small;">'.$e.'</span>';
    $f = '<span style="color:green;font-size:small;">'.$f.'</span>';
    $g = '<span style="color:green;font-size:small;">'.$g.'</span>';
     
    if($a != $b && $a != $c && $a != $d && $a != $e && $a != $f) {echo '<strong>Chiffre du Lotto généré aléatoirement : </strong>'.$a.$t;} else {echo '<strong>Chiffre du Lotto généré aléatoirement : </strong>'.$g.$t;} 
    if($b != $a && $b != $c && $b != $d && $b != $e && $b != $f) {echo $b.$t;} else {echo $g.$t;} 
    if($c != $a && $c != $b && $c != $d && $c != $e && $c != $f) {echo $c.$t;} else {echo $g.$t;} 
    if($d != $a && $d != $b && $d != $c && $d != $e && $d != $f) {echo $d.$t;} else {echo $g.$t;}
    if($e != $a && $e != $b && $e != $c && $e != $d && $e != $f) {echo $e.$t;} else {echo $g.$t;}
    if($f != $a && $f != $b && $f != $c && $f != $d && $f != $e) {echo $f;} else {echo $g;}
     
    // Fin du script
    ?>

    Mais a un moment donné il y a toujours un ou 2 nombres qui sont le mêmes .
    Comment faire pour qu'il me génère à chaque fois 6 nombres différents ?

    Faudrait pouvoir dire au script que si un nombre est déjà généré, faut pas le généré a nouveau.

  2. #2
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $min = 1;
    $max = 42;
     
    $i=0;
    do
    {
    $val=mt_rand($min, $max);
    if(!in_array($val,$out){ $out[]=$val;$i++;};
    }while($i<6)
    je ne pas tester

  3. #3
    Expert éminent
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Points : 9 031
    Points
    9 031
    Par défaut
    Bonjour

    J'ai laissé mon script tel quel (avec les affichages de test), tu peut vérifier si ça fonctionne, et les enlever. J'ai aussi mis le max à 10 pour avoir plus de probabilités de tomber sur le même, idem tu peut remettre à 42.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    $min = 1;
    $max = 10;
     
    // On commence le script
     
      $tab = array();
     
    for ($i = 1; $i <= 6; $i++) {
     
     
       $a = mt_rand($min, $max);
     
       echo $i.' '.$a.' - '."<br>";
     
      if (in_array($a, $tab)) {
         $i = $i - 1;
      } else {
       $tab[] = $a;
      }
     
    }
     
    echo '<pre>';
    var_dump($tab);
    echo '</pre>';
    ?>
    Vous souhaitez participer à la rubrique (X)HTML/CSS, contactez moi.
    débutez avec les CSS
    Pas de MP pour des questions techniques ! Mode d'emploi du forum ; Règles ; Pensez à la balise code ; Pas de SMS !
    Votez pour les messages qui vous ont aidés...

  4. #4
    Membre habitué Avatar de raffa
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 194
    Points : 159
    Points
    159
    Par défaut
    Merci à vous deux,
    c'est parfait, exactement ce que je cherchais même si j'ai du mal à comprendre vos scripts.
    Merci

  5. #5
    Expert éminent
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Points : 9 031
    Points
    9 031
    Par défaut
    Pour mon code : for crée une boucle qui exécute ce qu'il y a entre les accolades 6 fois (en fonction de $i) : dans ces accolades on donne une valeur aléatoire à $a, on vérifie ensuite si cette valeur aléatoire est déjà dans le tableau $tab, si oui on n'ajoute pas cette valeur au tableau et on réduit $i de 1 (pour toujours avoir 6 chiffres), si non on ajoute cette valeur au tableau $tab qui donne au final les 6 résultats tous différents.

    Suffisait de demander si t'as une autre question, n'hésite pas...
    Vous souhaitez participer à la rubrique (X)HTML/CSS, contactez moi.
    débutez avec les CSS
    Pas de MP pour des questions techniques ! Mode d'emploi du forum ; Règles ; Pensez à la balise code ; Pas de SMS !
    Votez pour les messages qui vous ont aidés...

  6. #6
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    avec mt_rand donne un peu de linéarité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
     
    $min=1;
    $max=42;
    $out=array();
    $i=0;
    while($i<6)
    	{
    		$val=mt_rand($min,$max);
    		if(!in_array($val,$out))
    			{
    			$out[]=$val;
    			$i++;
    			};
    	};
    //Affichage
    echo '<pre>';
    print_r($out);
    echo '</pre>';

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Citation Envoyé par delphidelphi Voir le message
    avec mt_rand donne un peu de linéarité
    Extrait du manuel PHP :
    Note: Depuis PHP 4.2.0, vous n'avez plus besoin d'initialiser le générateur de nombres aléatoires avec srand() ou mt_srand() car c'est fait automatiquement.

  8. #8
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Citation Envoyé par jeca Voir le message
    Bonjour,


    Extrait du manuel PHP :
    Non je ne parle pas sur cette aspect mais si tu essaie ce code tu vas voir qui il y a un peu d'ordre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générateur de nombres aléatoire performant
    Par vinzzzz dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/03/2007, 16h41
  2. générateur de nombre aléatoire
    Par ndefta love dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/12/2006, 22h21
  3. Générateur de nombres aléatoires maxwelliens
    Par Selma_2037 dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/11/2006, 15h54
  4. Générateur de nombres aléatoires
    Par Grand sorcier dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 30/07/2006, 22h44
  5. Générateurs de nombres aléatoires
    Par Cheps dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/06/2006, 00h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo