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 :

Generation nombre aleatoire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 45
    Points
    45
    Par défaut Generation nombre aleatoire
    Bonjour, je voudrais savoir comment faire pour generer un nombre aleatoire entre 1 et 3

    et entre 10 et 25

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    T'as pas du chercher beaucoup.......
    rand

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Bonjour,

    Tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $choix = mt_rand(0,2);
     
    if($choix < 1)
    {
     $nombre = mt_rand(1, 3);
    }
    else
    {
     $nombre = mt_rand(10, 25);
    }
    mt_rand() est plus rapide et renvoi un résultat plus aléatoire que rand().

  4. #4
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut
    Encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $nombre_aleatoire_1_3 = rand(1, 3);
    $nombre_aleatoire_10_25 = rand(10, 25);
    echo "Nombre aléatoire entre 1 et 3 : ".$nombre_aleatoire_1_3."<br />";
    echo "Nombre aléatoire entre 10 et 25 : ".$nombre_aleatoire_10_25;
    ?>

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par elcoyotos Voir le message
    Encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $nombre_aleatoire_1_3 = rand(1, 3);
    $nombre_aleatoire_10_25 = rand(10, 25);
    echo "Nombre aléatoire entre 1 et 3 : ".$nombre_aleatoire_1_3."<br />";
    echo "Nombre aléatoire entre 10 et 25 : ".$nombre_aleatoire_10_25;
    ?>
    Non, car il cherche à obtenir un nombre entre 1 et 3 et entre 10 et 25.

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    En générant une table et en utilisant array_rand tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $bornes = array(array(1,3), array(10,25));
     
    $table = array();
    foreach ($bornes as $borne) {
      $table = array_merge($table, array_keys($a = array_fill($borne[0], $borne[1] - $borne[0] +1, 0)));
    }
     
    var_dump(array_rand($table));
    var_dump(array_rand($table));
    var_dump(array_rand($table));
    var_dump(array_rand($table));

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre = (mt_rand(0,2)<1)?mt_rand(1, 3):mt_rand(10, 25);

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par philodido Voir le message
    Encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre = (mt_rand(0,2)<1)?mt_rand(1, 3):mt_rand(10, 25);
    Je ne crois pas non car dans ton cas, la pondération sur les deux bornes est identique alors que la seconde à clairement plus d'éléments que la première.
    Les nombres 1 2 et 3 sortiront donc beaucoup plus souvent ce qui n'est pas vraiment aléatoire...

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Je ne crois pas non car dans ton cas, la pondération sur les deux bornes est identique alors que la seconde à clairement plus d'éléments que la première.
    Les nombres 1 2 et 3 sortiront donc beaucoup plus souvent ce qui n'est pas vraiment aléatoire...
    Il suffit de moduler la pondération afin d'établir un équilibre de probabilités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre = (mt_rand(1,18)<3)?mt_rand(1, 3):mt_rand(10, 25);

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Sinon : (un peu lourd mais bon)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do  {
      $nombre = mt_rand(1,25);
    } while ($nombre < 10 and $nombre > 3);

  11. #11
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par philodido Voir le message
    Il suffit de moduler la pondération afin d'établir un équilibre de probabilités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre = (mt_rand(1,18)<3)?mt_rand(1, 3):mt_rand(10, 25);
    C'est juste tant que l'on ne doit trouver qu'un nombre dans deux ranges.

    @Avalion
    Non c'est pas top... et comme je l'ai fait remarque plus haut c'est pas vraiment aléatoire.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    comme ça aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $range = array_merge(range(1, 3), range(10, 25));
    $nb = $range[array_rand($range)];

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    et comme je l'ai fait remarque plus haut c'est pas vraiment aléatoire
    Je ne suis pas d'accord : le 1 a autant de chance de sortir que le 25 avec la dernière proposition de Avalion...

    Edit : Sorry, j'avais pas vu que ta remarque concerne le post de Philodido...

  14. #14
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    C'est juste tant que l'on ne doit trouver qu'un nombre dans deux ranges.
    Ça tombe bien puisque c'est exactement ce que voulait faire l'utilisateur :

    Citation Envoyé par domino313131 Voir le message
    ...je voudrais savoir comment faire pour generer un nombre aleatoire entre 1 et 3 et entre 10 et 25

  15. #15
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    ...Edit : Sorry, j'avais pas vu que ta remarque concerne le post de Philodido...
    Ça ne concernait pas mon post. Regarde le "@Avalion" juste avant :

    Citation Envoyé par Benjamin Delespierre Voir le message
    @Avalion
    Non c'est pas top... et comme je l'ai fait remarque plus haut c'est pas vraiment aléatoire.

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Ça ne concernait pas mon post. Regarde le "@Avalion" juste avant
    Oui, tu as raison ; d'ailleurs autant ma remarque est vraie pour ta proposition, autant elle est fausse pour celle de Avalion.

  17. #17
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ne vous cassez plus la tête, je pense que Stealth à trouvé l'algo master (sur le même principe que le mien mais sans boucle).

  18. #18
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    non ya mieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $alea = rand(1,19);//19 = 25 - 6 
    if ( $alea > 3 )
    {
    $area += 6; // 6 = 10-4
    }

  19. #19
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Ca a l'air en effet pas mal (et simple) sauf qu'à mon avis, il vaut mieux remplacer 6 par 7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $alea = rand(1,18);//19 = 25 - 7
    if ( $alea > 3 )
    {
    $area += 7; // 7 = 10-3
    }

  20. #20
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    c'est ce que je me suis dit au début puis apres j'ai testé avec des cas limites, ça dépent comment on interprete les intervalles (ouvert ou fermés)

    si aléa vaut 3 alors il reste à 3.
    si aléa vaut 4 alors il faut qu'il se décale à 10 d'ou le +6...

Discussions similaires

  1. Generation d un nombre aleatoire special..
    Par SHINOOOO dans le forum C
    Réponses: 2
    Dernier message: 11/03/2010, 20h52
  2. generation de nombre aleatoire à mettre dans un tableau
    Par lecaire dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/05/2009, 18h10
  3. [langage] générer un nombre aléatoire gaussien
    Par kayari dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2005, 08h12
  4. nombres aleatoires en plsql
    Par al85 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 29/03/2005, 19h07
  5. nombre aleatoire
    Par Bob dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2002, 18h12

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