Boucle pour loto [Résolu]

Signaler
Messages postés
90
Date d'inscription
lundi 25 juillet 2005
Statut
Membre
Dernière intervention
18 janvier 2006
-
Messages postés
1
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009
-
bonjoir j'ai fait ce code pour avoir tous les nombre possible dans le loto mais ca ne marche pas est ce que quelque un pourait m'aider

<?
$cs = array("0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,k18,19,20,21,22,23,24,25);


for($a=0;$i<sizeof($cs);$i++) {
for($b=0;$i<sizeof($cs);$i++) {
for($c=0;$i<sizeof($cs);$i++) {
for($d=0;$i<sizeof($cs);$i++) {
for($e=0;$i<sizeof($cs);$i++) {
for($f=0;$i<sizeof($cs);$i++) {


echo ''.$cs[$a].''.$cs[$b].''.$cs[$c].''.$cs[$d].''.$cs[$e].''.$cs[$f].'
';


}
}
}
}
}
}
echo 'fin'
?>

13 réponses

Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Hello,

<?php

$cs = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

for($a=0;$ a <sizeof($cs);$a++) {

for($b =0;$b<sizeof($cs);$b++) {

for($c= 0;$ c <sizeof($cs);$c++) {

for($d =0;d<sizeof($cs);$b++) {

for($e= 0;$ e <sizeof($cs);$e++) {

for($f =0;$f<sizeof($cs);$f++) {

echo ''.$cs[$a].''.$cs[$b].''.$cs[$c].''.$cs[$d].''.$cs[$e].''.$cs[$f].'
/>';

}

}

}

}

}

}

echo 'fin'

?>

<hr>Si ma reponse te convient, merci de l'accepter !
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
array(" ... vire les quotes là pour commencer. Ensuite je sais pas quel
est ton but, mais ton code là va te donner 26 puissance 6 tirages!
C'est énorme...






*****
THINK -> SEEK -> ASK
Messages postés
90
Date d'inscription
lundi 25 juillet 2005
Statut
Membre
Dernière intervention
18 janvier 2006

oui c'est ^parce que je ve tous les resultat possible mais avec ce code le resultat c'est
111111
111111
111111
...............
selement des 11111


<?
$cs = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
for($a=0;$i<sizeof($cs);$i++) {
for($b=0;$i<sizeof($cs);$i++) {
for($c=0;$i<sizeof($cs);$i++) {
for($d=0;$i<sizeof($cs);$i++) {
for($e=0;$i<sizeof($cs);$i++) {
for($f=0;$i<sizeof($cs);$i++) {
echo ''.$cs[$a].''.$cs[$b].''.$cs[$c].''.$cs[$d].''.$cs[$e].''.$cs[$f].'
';
}
}
}
}
}
}
echo 'fin'
?>
Messages postés
90
Date d'inscription
lundi 25 juillet 2005
Statut
Membre
Dernière intervention
18 janvier 2006

des 000000000 a la place des 1111111111
pardon
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
salut,

à chaque fois tu mets for($f=0;$i<sizeof($cs);$i++) alors que ce serait plutôt for($f=0;$i<sizeof($cs);$f++) il
me semble... mais de tte façon je doute que ça marche, le délai
d'exécution du script sera trop long... enfin faut voir. En tt cas ça
risque de chauffer
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
oui mince je voulais dire for($f=0;$i<sizeof($cs);$f++) mais je vois que jojo m'a précédé
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
rahhhh for($f=0;$f<sizeof($cs);$f++) c'est pas potible ça dsl :p
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
C'est pas potible ca, Non c'est pas potible ca !! Ca ca non, c'est pas
potible !! On n'as l'abbé Pierre II (Enfin, je crois que c'est lui qui
dit ca ... suis plus tres sûr ...)



PS : C'etait la minute de folie de Jojo en directe de PhpCs. A vous CodeSourceS. ^^

Attention, c'est contagieux ! Hey, mais revenez, partez pas comme ca ... BOn, j'arrete ^^

<hr>Si ma reponse te convient, merci de l'accepter !
Messages postés
13
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 janvier 2009

Bonjour tout le monde, cette réponse à été aceptée mais je constate 3 problemes:
1) il y a un $b++ à la place de $d++; on comprends le principe mais pour ceux qui voudraient faire du copier coller...
2) il n'y a pas de 0 au loto il faudrait donc que le tableau commence à 1
3) 2 boules ne pouvant sortir sur un même tirage,ce n'est pas 26 puissance 6 tirages mais 26!/6!(26-6)! tirages qu'il faudrait obtenir
ci-joint une légère modification pour arriver à ce résultat.
cordialement

Hello,
<?php
$cs = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
for($a=0;$ a <sizeof($cs);$a++)    {
for($b =$a+1;$b<sizeof($cs);$b++)    {
for($c= $ b+1 ;$c<sizeof($cs);$c++)    {
for($d =$c+1;$d<sizeof($cs);$d++)    {
for($e= $ d +1;$e<sizeof($cs);$e++)    {
for($f =$e+1;$f<sizeof($cs);$f++)    { 
 echo ''.$cs[$a].''.$cs[$b].''.$cs[$c].''.$cs[$d].''.$cs[$e].''.$cs[$f].'
/>';
    }
    }
    }
    }
    }
    }
echo 'fin'
?>
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Hello,

exacte ;)

On pourrais aussi simplifier le calcul de manière suivante :

<?php

// si besoin :  srand() ou mt_srand() pour intensifier le générateur de nombre aléatoire (< Php 4.2.0)
$grille = range(1,49); // On crée une grille (tableau) comportant les nombres allant de 1 à 49
$tirage = array_rand($grille, 6); // On prend 6 valeurs du tableau !

$resultats = array();
foreach( $tirage as $num )
{
    $resultats[] = $num;
}

echo 'Le tirage est :  [', implode('] - [', $resultats), ']';

?>

^^
<hr />Si ma réponse te convient, merci de l'accepter ! 
Messages postés
13
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 janvier 2009

'lu, merci pour l'illustration de la fonction array_rand() qui à ma connaissance n'existe pas en AS duquel je suis plus familier que le php.(J'en etais même allé jusqu'à m'ecrire une classe pour en disposer ;-( ).
Ceci etant, si je comprends bien le code proposé, il ne génère qu'un seul tirage, non? la problématique de départ consistait à générer l'ensemble des combinaisons possibles si je ne m'abuse.
aussi si tel etait le but, je ne pense pas que cette orientation consiste réellement en une simplification, vu qu'il faudrait pour chaque nouveau tirage vérifier s'il n'as pas été déjà généré, et réiterer jusqu'à l'obtention d'un nouveau tirage unique.Je pense qu'une telle procédure s'avererait particuliairement gourmande vers la fin, voire même au vu du nombre de combinaisons (+/- 14M) je ne sais pas si l'on peut esperer obtenir les dernieres combinaisons avant plusieurs décénies? qu'en penses-tu?
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Salut,

Euh, oui, il ne génère qu'un seul tirage et retourne une combinaison de 6 nombres différents. Ici c'est juste pour générer qu'un tirage possible. Ce sujet date, je n'y avait plus pensé ^^
Par contre, il est vrai que la combinaison n'est pas unique, donc pour avoir TOUTES les combinaisons, il faudrait une boucle très très gourmande ... et beaucoup de temps.

Il ne reste donc que les boucles for/while  ...
Mais je pense que l'on peut simplifier le code avec quelques fonctions array (je ne me souviens plus des noms). Je regarderais ça dans la soirée ... (par contre, je crois que ce sera plus gourmand niveau serveur)

<hr />Si ma réponse te convient, merci de l'accepter ! 
Messages postés
1
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009

Code :template<class X>
std::string Ensemble<X>::binaryincrementation(std::string origine) const
//Cette fonction permet de réaliser l'incrémentation unaire d'une chaine de caratère formée uniquement par une suite de 0 ou de 1.
{
 unsigned int cpt=1;//Ceci nous limite malheureusement à une chaine de 32000 caractères (mais qui va calculer 2^32000 opérations ? =) )
 bool retenue=false;
 while ( cpt <= origine.length() )
    {
       if ( origine[ origine.length() - cpt ] == '0' &amp;&amp; retenue == false &amp;&amp; cpt == 1)
 //cette condition n'est valable que pour le dernier caractère de la chaine que l'on veut
 //incrémenter car il est strictement impossible que l'on arrive sur un caractère de la chaine
 //avec un 0 et la retenue à false car si la retenue est à false, cela implique que l'opération
 //d'incrémentation sur le caractère qui le suit n'à pas engendré de retenue.
 {
  origine[origine.length() - cpt] = '1';
  return origine;
 }
           
 if ( origine[ origine.length() - cpt ] == '0' &amp;&amp; retenue == true )
 //l'opération précédente à engendré une retenue que l'on applique sur ce caractère
 //(cette condition n'est jamais vraie pour le premier caractère)
 {
  origine[origine.length() - cpt] = '1';
  return origine;
 } 


 if ( origine[ origine.length() - cpt ] == '1' &amp;&amp; retenue == true )
 //l'opération précédente à engendré une retenue, et l'application de la retenue ici génère
 //également une retenue que l'on appliquera sur le caractère précédent
 {
  origine[origine.length() - cpt] = '0';
  retenue = true;
 }  


 if ( origine[ origine.length() - cpt ] == '1' &amp;&amp; retenue == false )
 //cette opération n'est vraie que dans le cas ou l'on est sur le dernier caractère de la chaine
 //et que la retenue est à false.
 {
  origine[origine.length() - cpt] = '0';
  retenue = true;
 }   
      cpt++;
   }   
 return origine;
}


template<class X>
Ensemble< Ensemble<X> > Ensemble<X>::question14()
//méthode permettant de retouner un ensemble de sous-ensembles d'une ensemble donné
{
 unsigned int cpt=1;
 const unsigned int taille=Size();
 std::string compteur, complement;
 Ensemble< Ensemble<X> > retour;
 Ensemble<X> *temporaire=NULL;
 element * navigation;
 //on initialise la chaine de base ainsi que son complément pour pouvoir appliquer la méthode de construction
 //de l'ensemble final.
 while ( cpt <= taille )
  //ici on préfère utiliser une constante que de faire appel à la fonction size à chaque boucle
  //qui impliquerait à chaque fois un parcours de l'ensemble à chaque itération.
  {
  compteur=compteur+'0';
  complement=complement+'1';
  cpt++;
 }
 cpt=1;
 //pour chaque valeur de compteur allant de sa valeur initiale jusqu'à ce qu'il ait la même valeur
 //que son complément original, on ajoute l'élément i de l'ensemble d'origine à l'ensemble n élément de retour
 //(ou n est l'énième itération ) en fonction de la valeur du caractère positionné à (longueur de retour - i)
 //dans compteur. Si ce caractère est à 1 alors on l'inclut à l'ensemble n, sinon, on ne l'inclut pas.
 //
 // on donne l'ensemble e contenant les éléments de type int {0,1,2,3}
 //
 // e [ 3 ][ 2 ][ 1 ][ 0 ]
 //compteur    0    0    0    0   => on ajoute l'ensemble vide
 //    0    0    0    1   => on ajoute l'ensemble {0}
 //    0    0    1    0   => on ajoute l'ensemble {1}
 //    0    0    1    1   => on ajoute l'ensemble {0,1}
 while ( compteur != complement )
  {
  //on crée un sous-ensemble dynamiquement en mémoire
  temporaire = new Ensemble<X>;
  while ( cpt <= taille ) //taille vaut la même chose que compteur.length()
   {
   if ( compteur[ taille - cpt ] == '1' )
    //si le caractère vaut 1 alors on ajoute l'élément au sous-ensemble
    {
    temporaire->Add((*this)[cpt]);
   }
   cpt++;
  }
  cpt=1;
  //on ajoute le sous-ensemble de l'itération à l'ensemble final
  retour.Add( *temporaire );
  compteur=binaryincrementation(compteur);
 }


 //cette façon de faire implique que l'on fasse la même opération lorsque compteur vaut complement
 //a savoir que c'est le sous-ensemble qui contient tous les éléments de l'ensemble original.
 temporaire = new Ensemble<X>;
 while ( cpt <= taille )
  {
  temporaire->Add((*this)[cpt]);
  cpt++;
 }
 //on ajoute le dernier cas
 retour.Add( *temporaire );
 return retour;
}