Accueil > Forum > > > > Tirer un nombre au hazard
Tirer un nombre au hazard
samedi 27 décembre 2008 à 18:53:39 |
Tirer un nombre au hazard

lolosav
|
Bonjour et bonne fêtes à tous !
je vous expose mon probléme ! je suis en train de créer un jeu-question ! je vais entrer dans un tableaux un nombre (10 pour commencer) qui correspondra une question , rep , etc ex $test[0 ]---question 0, rep,soluce , etc ca, ca marche (je vais chercher dans une Bdd que j'ai crée) Mon probléme j'arrive à faire une boucle for jusque 10 avec rand pour avoir 10 questions au hazard ,mais je n'arrive pas a faire le test pour qu'il ne reprenne pas le même nombre ! un de mes test
<?php $i=0; $test[0]=rand(1,10); do { $i++; $num = rand(1,10); for ($a=0;count($test);$a++) { if ($test[$a]=$num) { echo 'test:',$test[$a],"<br>"; break; }else{ $test[$a]=$num; } } } while ($i<10); ?> voila merci pour votre aide
|
|
samedi 27 décembre 2008 à 19:31:48 |
Re : Tirer un nombre au hazard

kohntark
|
Réponse acceptée !
Salut,
Franchement je n'ai rien compris à ton code. Tu te compliques beaucoup la tâche. Est ce que ce code réponds à ta demande ou il y a un truc que je n'ai pas capté ?
$nb_questions = 10; $mem = array(); $i = 0;
do { if ($i >= $nb_questions) break; $rand = rand(1,$nb_questions); if (!in_array($rand, $mem)) { array_push($mem, $rand); echo 'question n°'.$rand.'<br />'; } else continue; $i++; } while (true);
Cordialement,
Kohntark -
|
|
samedi 27 décembre 2008 à 19:57:19 |
Re : Tirer un nombre au hazard

lolosav
|
merci J'ai l'impression que oui ! Pourrais tu m'expliquer un peu ton code ! Car j'en comprend un peu mais j'ai l'impression que tout est condensé !
|
|
samedi 27 décembre 2008 à 20:34:39 |
Re : Tirer un nombre au hazard

kohntark
|
Réponse acceptée !
Re,
$nb_questions = 10; // nombre total de questions $mem = array(); // init du tableau qui contiendra les n° des questions déjà tirées $i = 0; // init var permettant de sortir de la boucle
do { if ($i >= $nb_questions) break; // toutes les questions ont été tirées, on sort $rand = rand(1,$nb_questions); // num aléatoire entre 1 et le nb de questions disponibles if (!in_array($rand, $mem)) { // si le n° de la question n'a pas encore été tiré ($rand) array_push($mem, $rand); // on le rentre dans le tableau echo 'question n°'.$rand.'<br />'; // on pose la question } else continue; // le n° de question aléatoire a déjà été tiré, on continue avec un nouveau nombre aléatoire $i++; // incrémente le nombre de questions posées } while (true);
Attention, ce script n'est valable que si tu n'as pas beaucoup de questions, car il perds du temps à chaque fois qu'il rencontre un nombre déjà tiré (dans ce cas là il refait une boucle (continue))
Je pense que le mieux est de faire ainsi : $t = range(1, $nb_questions); // génère un tableau entre 1 et le nombre de questions dispo $t = array_rand ($t); // mélange aléatoirement le tableau
foreach ($t as $k=>$v) { // pour chaque valeur du tableau echo 'question n°'.$v.'<br />'; // on pose la question correspondante }
C'est beaucoup plus simple, beaucoup moins lourd et vraiment plus rapide.
Cordialement,
Kohntark -
|
|
samedi 27 décembre 2008 à 21:18:04 |
Re : Tirer un nombre au hazard

kohntark
|
Salut,
Je viens de m'apercevoir qu'il y a une erreur d'inattention dans mon code, il faut remplacer : $t = range(1, $nb_questions); // génère un tableau entre 1 et le nombre de questions dispo $t = array_rand ($t); // mélange aléatoirement le tableau par : $tt = range(1, $nb_questions); // génère un tableau entre 1 et le nombre de questions dispo $t = shuffle($tt); // mélange aléatoirement le tableau
Par curiosité je viens de faire un bench sur le premier et le seconde code : Temps d'éxécution :
Pour 100 questions : 1er code : 0.00318 sec (341 nombres aléatoires déjà tiré = 341 boucles do pour rien) 2eme code : 0.00026 sec
Pour 10000 questions : 1er code : 14.25654 sec (21902 nombres aléatoires déjà tiré !!) 2eme code : 0.02322 sec
Cordialement,
Kohntark-
|
|
samedi 27 décembre 2008 à 23:12:59 |
Re : Tirer un nombre au hazard

lolosav
|
Ouah !!! merci pour ta réponse ! C'est triste mais je viens de m'apercevoir que vraiment j'ai du boulot en Php!!! Mais d'un autre coté tant mieux !
Pour revenir au code : je ne comprend pas :"else continue" , le continue , c'est une fonction ?
et aussi "while (true);" qu'est ce qui doit être vrai ?
Merci de prendre de temps ;)
|
|
dimanche 28 décembre 2008 à 11:30:09 |
Re : Tirer un nombre au hazard

kohntark
|
Réponse acceptée !
Salut, Jette un oeil à ces 2 liens : continuedo whileif (!in_array($rand, $mem)) { [...] } else continue; $i++;=> si le nombre a déjà été tiré (il est déjà dans le tableau $mem), on "continue", c'est à dire qu'on reboucle (do) sans exécuter le reste de la boucle ($i++) while(true);=> cette condition est toujours vrai, la sortie de la boucle do ne se fait pas par ce while, mais par le break. Ca reviens au même que d'écrire ça : } while ($i > $nb_questions); (et de supprimer le if($i>=...) de la boucle do) Cordialement. Kohntark -
|
|
dimanche 28 décembre 2008 à 15:17:20 |
Re : Tirer un nombre au hazard
|
Cette discussion est classée dans : nombre, test, question, rand, hazard
Répondre à ce message
Sujets en rapport avec ce message
Question en php... [ par schlim ]
J'ai une question.J'ai un tableau avec un certain nombre de nombre....Ce que je cherche c une fonction qui me permettrais de garder les doublons et él
empecher un nombre d'etre choisit au hasard. [ par tomatokatchup ]
est il possible d'empecher un nombre d'tre choisit au hasart par la fonction rand() tout en gardant une selection comprise entre deux chiffre.exemple:
test d'ergonomie [ par hackademius ]
salut a tous , je sais que ce ne pas l'endroit ideal pour poster ce genre de message, mais bon , je sais qu'ici , il y ades pros du php et css, donc j
gestion des pages dans le forum [ par davwart ]
Bonjour,petite suggestion concernant le forum :vu que en face de la liste de chaque question apparait le nombre de réponse, ne serait-il pas possible,
Nombre Aléatoir RAND [ par m2rtech ]
Bonjour, Je voudrais generer un nombre aléatoir à 6 chiffres avec rand();<font color=
export CSV particulier URGENT HELP!!! [ par ronanT95 ]
Bonjour à tousje requiert votre aide pour un souci sur lequel j'ai buté toute la journée. voilà, pour ma boite, j'ai créé une interface qui me permet
Nombre de requêtes [ par Garno ]
Bonjour a tous, Ma question est une question totalement théorique que je me pose depuis quelques temps. Je travaille a la conception d'un "framework"
Question sur une erreur [ par defkrie ]
Voici une portion de code qui me pose souci$test="abcdefghijklmnopqrstuvwxyz";$chaine="Le chat est mort.";for($i=0;$i if(ereg(substr($chaine,$i
Erreur de script [ par defkrie ]
$test="abcdefghijklmnopqrstuvwxyz";$chaine="Le chat est mort.";for($i=0;$iif(ereg(substr($chaine,$i,1),$test)){echo substr($chaine,$i,1).":True";}}voi
Question sur base de donnée [ par keep cool ]
Bonjour, je me demande s'il est possible qu'un résultat d'une base de donnée donne accésà un lien. je m'explique: je prend l'exemple d'une liste de pa
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|