cs_simon0000
Messages postés90Date d'inscriptionlundi 25 juillet 2005StatutMembreDernière intervention18 janvier 2006
-
28 août 2005 à 19:39
yanic2020
Messages postés1Date d'inscriptiondimanche 18 janvier 2009StatutMembreDernière intervention18 janvier 2009
-
18 janv. 2009 à 17:25
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
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 28 août 2005 à 19:56
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...
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 28 août 2005 à 21:42
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
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 28 août 2005 à 22:02
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 !
syl20dies
Messages postés13Date d'inscriptionmardi 21 octobre 2008StatutMembreDernière intervention29 janvier 2009 21 oct. 2008 à 09:25
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
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 25 oct. 2008 à 12:39
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 !
syl20dies
Messages postés13Date d'inscriptionmardi 21 octobre 2008StatutMembreDernière intervention29 janvier 2009 26 oct. 2008 à 19:11
'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?
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 26 oct. 2008 à 19:34
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 !
yanic2020
Messages postés1Date d'inscriptiondimanche 18 janvier 2009StatutMembreDernière intervention18 janvier 2009 18 janv. 2009 à 17:25
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' && retenue == false && 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' && 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' && 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' && 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;
}