Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1448 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

Un tirage du LOTO sans 2 fois le même numéro !

n°605478
chrisbk
-
Posté le 08-01-2004 à 11:55:51  profilanswer
 

Reprise du message précédent :
ouais, bon, laisse tomber

mood
Publicité
Posté le 08-01-2004 à 11:55:51  profilanswer
 

n°605490
jagstang
Pa Capona ಠ_ಠ
Posté le 08-01-2004 à 12:42:51  profilanswer
 

:kaola:

n°605504
Tentacle
Posté le 08-01-2004 à 13:24:03  profilanswer
 

Kristoph a écrit :

Pour optimiser la methode du crible c'est super facile quand même. Tu notes N le nombre d'elements restant et tu tire un nombre aléatoire x entre 1 et N inclus. Puis tu parcours ton tableau pour trouver le x eme élément non marqué.
 
Autre posibilité : utiliser une liste/vecteur contenant tous les elements et supprimer les elements au fur et à mesure qu'ils sortent.


 
C'est ce que j'ai proposé en gros, mais par besoin de vecteur vu qu'il suffit de mettre a la place de l'element tiré, le dernier element du tableau, et considerer ensuite qu'on a un element en moins (enfin c'est le meme principe quoi)

n°605724
maf2013
-Le Joueur-
Posté le 08-01-2004 à 17:00:14  profilanswer
 

pourquoi pas ça, tout simplement :
 
do
val=rand();
 
 for(j=0;j<i;j++)
 {
  if(val==tab[j]){val=50;}
 }
 
while(val>49)
tab[i]=val


---------------
-Le Joueur-
n°605732
Tentacle
Posté le 08-01-2004 à 17:19:05  profilanswer
 

maf2013 a écrit :

pourquoi pas ça, tout simplement :
 
do
val=rand();
 
 for(j=0;j<i;j++)
 {
  if(val==tab[j]){val=50;}
 }
 
while(val>49)
tab[i]=val


 
Parce que imagine que tu tires 48 numéros ... il ne reste qu'une possibilité et ton programme va faire beaucoup de boucles avant de tomber sur le numéro qui n'a pas été tiré. En fait au fur et à mesure du tirage, le programme mettra de plus en plus de temps pour tirer un numéro.

n°605826
LeGreg
Posté le 08-01-2004 à 20:15:23  profilanswer
 

jagstang a écrit :

ok ok...  
 

Code :
  1. cout << "resultats : 6, 13, 27, 29, 34, 40" ;


 
pis triés en plus


 
moi j'aime bien cette methode
 
LeGreg

n°605906
maf2013
-Le Joueur-
Posté le 08-01-2004 à 22:13:07  profilanswer
 

Si on veut jouer aux puristes c'est facile (par contre faire attention aux includes...):
 
  #include <iostream.h>  
   
  int main(void)  
  {  
      int val,i,k,ind;  
      int tab[49];  
      srand( (unsigned)time( NULL ) );  
      cout<<"Voici le tirage du LOTO : "<<endl;  
      for(i=0;i<49;i++)
      {
        tab[i]=i+1
      }
      for(i=0;i<6;i++)  
      {  
        ind=(rand()*(49-i))/RAND_MAX;
        val=tab[ind];
        for(k=ind;k<49-i;k++)
        {
          tab[k]=tab[k+1]
        }
        cout<<val<<" ";  
      }  
      cout<<endl<<"\nMerci !";  
      cin>>val;  
  }

n°605908
Taz
bisounours-codeur
Posté le 08-01-2004 à 22:17:48  profilanswer
 

je quitte ce sujet
 
« cout<<endl<<"\nMerci !"; »
 
fortune :o

n°605913
LeGreg
Posté le 08-01-2004 à 22:22:33  profilanswer
 

taz a écrit :

je quitte ce sujet
 


 
tu es bien la seule personne à devoir annoncer qu'elle quitte un sujet..
 
LeGreg

n°605914
chrisbk
-
Posté le 08-01-2004 à 22:23:12  profilanswer
 

LeGreg a écrit :


 
tu es bien la seule personne à devoir annoncer qu'elle quitte un sujet..
 
LeGreg


 
Y fait ca tout le temps, facon sa Seigneurie se retire, on est habitué :o


Message édité par chrisbk le 08-01-2004 à 22:23:18
mood
Publicité
Posté le 08-01-2004 à 22:23:12  profilanswer
 

n°606169
Tentacle
Posté le 09-01-2004 à 09:05:44  profilanswer
 

maf2013 a écrit :


        for(k=ind;k<49-i;k++)
        {
          tab[k]=tab[k+1]
        }


Ca changerait quelque chose si plutôt tu faisais  

Code :
  1. tab[ind] = tab[48 - i]

eu lieu de décaler tout le tableau ?(je suis d'accord pour 49 éléments, on attendra pas des masses mais bon)
 
D'ailleurs dans ton code, à ce niveau il me semble qu'il y a une erreur: dans cette boucle, la valeur max de k va être 49-i-1 soit, pour i=0, 48. Donc tu vas avoir

Code :
  1. tab[48] = tab[49]

et là tu sors du tableau.

n°606249
blackgodde​ss
vive le troll !
Posté le 09-01-2004 à 10:44:30  profilanswer
 

taz a écrit :

bon sinon,  toujours personne pour recraché comment on se sert vraiment de rand() ? BlackGodess t'es ou ?
 
et on se calme, un peu avec le C++, ici c'est cat C :o
 
manque <cstdlib>
<ctime>
 
et toujours : allez voir chez Boost !


 
muh ?
 
(c++ : http://www.boost.org/libs/random/index.html)


---------------
-( BlackGoddess )-
n°606302
maf2013
-Le Joueur-
Posté le 09-01-2004 à 11:38:50  profilanswer
 

Tentacle a écrit :


Ca changerait quelque chose si plutôt tu faisais  

Code :
  1. tab[ind] = tab[48 - i]

eu lieu de décaler tout le tableau ?(je suis d'accord pour 49 éléments, on attendra pas des masses mais bon)
 
D'ailleurs dans ton code, à ce niveau il me semble qu'il y a une erreur: dans cette boucle, la valeur max de k va être 49-i-1 soit, pour i=0, 48. Donc tu vas avoir

Code :
  1. tab[48] = tab[49]

et là tu sors du tableau.
 


 
Oui, comme ça c'est nikel !!!
Désolé pour les indices, j'ai pô fai gaffe


---------------
-Le Joueur-
n°606320
Tentacle
Posté le 09-01-2004 à 12:10:53  profilanswer
 


 
')' en trop a la fin de l'url [:aloy]
 
Edit: argh non, c'est le forum qui a fait l'erreur lui même  :jap:


Message édité par Tentacle le 09-01-2004 à 12:11:46
n°606343
Tetedeienc​h
Head Of God
Posté le 09-01-2004 à 12:46:46  profilanswer
 

ben faut voir que pour 6 numéros sur 49, je vois pas l'intéret de s'emmerder :D
 
C'est clair que dans d'autres cas ca marche moins bien, mais la, bon :D

n°606377
Tentacle
Posté le 09-01-2004 à 13:13:48  profilanswer
 

tetedeiench a écrit :

ben faut voir que pour 6 numéros sur 49, je vois pas l'intéret de s'emmerder :D
 
C'est clair que dans d'autres cas ca marche moins bien, mais la, bon :D


 
Non mais imagine un peu : dans 200 ans, après une mutation génétique chez l'être humain, on sera doté de pouvoir phsychique qui nous permettront de deviner les résultats du Loto et il faudra sûrement augmenter le nombre de possibilités (enfin ça change rien ... dans 200 ans, on aura des ordinateur quantiques et tout le tintouin) [:arrakis99] (désolé c'est le début de la faim)

n°606432
Tetedeienc​h
Head Of God
Posté le 09-01-2004 à 13:46:33  profilanswer
 

Tentacle a écrit :


 
Non mais imagine un peu : dans 200 ans, après une mutation génétique chez l'être humain, on sera doté de pouvoir phsychique qui nous permettront de deviner les résultats du Loto et il faudra sûrement augmenter le nombre de possibilités (enfin ça change rien ... dans 200 ans, on aura des ordinateur quantiques et tout le tintouin) [:arrakis99] (désolé c'est le début de la faim)


 
Oui c'est sur mais bon :D
 
Si vous regardez votre code, quel % avez vous réutilisé, franchement ?
 
C'est bien le propre de la programmation moderne : proner la réutilisation, et personne ne le fait en fait.
 
Vivement la prog. par aspect pour ca :D

n°606452
Tentacle
Posté le 09-01-2004 à 13:53:56  profilanswer
 

tetedeiench a écrit :


 
Oui c'est sur mais bon :D
 
Si vous regardez votre code, quel % avez vous réutilisé, franchement ?
 
C'est bien le propre de la programmation moderne : proner la réutilisation, et personne ne le fait en fait.
 
Vivement la prog. par aspect pour ca :D


 
Je suis d'accord ...

n°606956
captainneu​neu
Posté le 10-01-2004 à 11:41:44  profilanswer
 

Citation :

for(i=0;i<iNbTirages;i++)
{
 srand((unsigned)time(NULL)+rand());
 do
 {
  iOK=1;
  iTmp=rand()%49;
  for(a=0;a<=i;a++)
  {
   if(tTirages[a]==iTmp)
    iOK=0;
  }
 }while(iOK=0);
 tTirages[i]=iTmp;
}
for(i=0;i<iNbTirages;i++)
{
 printf("\nLe resultat du tirage est : \n" );
 printf("%d, ",tTirages[i]);
}
   
 


 
voila, manque les declarations, allocations et autres librairies, mais le code tel qu'il est la devrait marcher.. dites moi si g faux..

n°606960
captainneu​neu
Posté le 10-01-2004 à 11:49:17  profilanswer
 

Citation :


#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
void main()
{
 int i,a;
 int iNbTirages;
 int iOK;
 int iTmp;
 int *tTirages;
 
 printf("combien de tirages?" );
 scanf("%d",&iNbTirages);
 tTirages=malloc(iNbTirages);
 
 for(i=0;i<iNbTirages;i++)
{
 srand((unsigned)time(NULL)+rand());
 do
 {
  iOK=1;
  iTmp=(rand()%49)+1;
  for(a=0;a<=i;a++)
  {
   if(tTirages[a]==iTmp)
    iOK=0;
  }
 }while(iOK=0);
 tTirages[i]=iTmp;
}
 
 printf("\nLe resultat du tirage est : \n" );
for(i=0;i<iNbTirages;i++)
{
 
 printf("%d, ",tTirages[i]);
}
   
 
}


 
voila, ya tout, et il fonctionne ;)

n°606964
captainneu​neu
Posté le 10-01-2004 à 11:51:06  profilanswer
 

oups, desole
il marche pas encore
laissez moi 5 min de plus :D
 
edit : ouais, probleme resolu, erreur de debutant !!
remplacer dans mon code while(iOK=0) par while(iOK==0)
 
j'ai honte
lol
bon, bref, il marche bien, manque l'automate d'etat fini pour verifier que l'utilisateur ne demande pas plus de 49 tirages, ce qui entraine bien entendu un plantage
;)


Message édité par captainneuneu le 10-01-2004 à 11:56:29
n°606997
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 12:42:21  profilanswer
 

relis le topic en entier au lieu de poster 3 conneries
 

n°607007
Tentacle
Posté le 10-01-2004 à 13:10:44  profilanswer
 

captainneuneu a écrit :


Code :
  1. do
  2. {
  3.  iOK=1;
  4.  iTmp=(rand()%49)+1;
  5.  for(a=0;a<=i;a++)
  6.  {
  7.   if(tTirages[a]==iTmp)
  8.    iOK=0;
  9.  }
  10. }while(iOK=0);




 

jagstang a écrit :

relis le topic en entier au lieu de poster 3 conneries


 
Effectivement, il y a un épisode qui a du être mal lu  :whistle:


Message édité par Tentacle le 10-01-2004 à 13:11:19
n°607017
captainneu​neu
Posté le 10-01-2004 à 13:39:32  profilanswer
 

Tentacle a écrit :


 
 
 
Effectivement, il y a un épisode qui a du être mal lu  :whistle:


 
ben, en fait je vois pas ou est le probleme
si c pour un probleme de lenteur alors c ridicule car je vois pas ce qui ralentit pour selectionner 49 nombres et parcourir un pauvre tablo
 
de plus, mon prog utilise moins de memoire que celui qui alloue un tableau a 49 cases d'office
 
enfin bon, soyez plus clair


Message édité par captainneuneu le 10-01-2004 à 13:48:36
n°607023
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 13:46:00  profilanswer
 

c'est ça ouais...  :hello:

n°607024
captainneu​neu
Posté le 10-01-2004 à 13:48:21  profilanswer
 

jagstang a écrit :

c'est ça ouais...  :hello:  


 
en fait, j'aurais prefere une explication sur le fait que mes codes soient des conneries

n°607026
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 13:51:35  profilanswer
 

bordel cette méthode a dèjà été postée.

n°607028
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 13:54:12  profilanswer
 

pis sinon :
 
- malloc mal utilisé (n*sizeof())
- pas de désallocation de la mémoire
- aucune initialisation des variables
 
Alors le "Y'a tout, ça fonctionne" n'est pas un gage de reconaissance de qualité pour ton code
 

n°607030
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 13:55:19  profilanswer
 

je parle même pas du nommage des variables que je trouve hideux

n°607031
captainneu​neu
Posté le 10-01-2004 à 13:55:26  profilanswer
 

ouais, je viens de voir, c la methode que maf2013 a poste.. mais je reste donc sur ma position, ca prend rien comme temps de parcourir 48 cases d'un tablo de int, et moins d'utilisation memoire, lors des tirages < 49 numeros
donc bon, c une solution qui me semble correcte

n°607032
captainneu​neu
Posté le 10-01-2004 à 13:57:03  profilanswer
 

oups, desole pour le free
mon malloc est bien utilisé, car sizeof(int)= 1 ca revient au meme que de faire ce que g fait
les variables sont initialisées au cour du prog dans les for ou autres, je vois pa le prob
pour le nom, c une question de gout

n°607033
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 13:58:13  profilanswer
 

- Sur cette architecture int=1, mais ça n'est pas toujours le cas.
- Tu confonds initialisation et affectation

n°607034
captainneu​neu
Posté le 10-01-2004 à 13:59:04  profilanswer
 

oki pour les initialisations
tu peux me donner un exemple ou int!=1 stp ? ca m'interesse

n°607035
Kristoph
Posté le 10-01-2004 à 14:01:15  profilanswer
 

captainneuneu a écrit :

oki pour les initialisations
tu peux me donner un exemple ou int!=1 stp ? ca m'interesse


 
N'importe quel ordinateur plus puissant qu'un CPC ?

n°607036
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 14:02:19  profilanswer
 
n°607037
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 14:04:11  profilanswer
 

Citation :

Le type int se décline en trois versions dont deux sont synonymes. Leur longueur n'est pas fixée par l'ANSI et la prudence s'impose donc. Un int prend 16 bits sur les systèmes 16 bits, 32 bits sur les systèmes 32 bits et 64 bits sur les quelques systèmes qui fonctionnent déjà en 64 bits. On le considère comme le type de base. Enfin, ceci est théorique parce qu'on trouve des compilateurs qui ne respectent pas cette règle. Les dérivés de int sont le short int et le long int. Sur les systèmes 16 et 32 bits, short int est censé faire 16 bits et long int 32 bits, donc seul int varie. Je n'ai pas encore eu l'occasion de tester de système 64 bits, mais il est probable qu'un int prenne 64 bits, ainsi qu'un long int et qu'un short int prenne 32 bits.
 
Un conseil: le C dispose d'un opérateur appelé sizeof() qui retourne la taille d'une variable ou d'un type en bytes. Pour la portabilité de vos programme, utilisez toujours sizeof au lieu de vous fier à la taille d'un type sur votre système à vous, e.g.
 
taille = sizeof( int );
plutôt que
taille = 4;


Message édité par jagstang le 10-01-2004 à 14:04:37
n°607038
captainneu​neu
Posté le 10-01-2004 à 14:05:24  profilanswer
 
n°607055
printf
Baston !
Posté le 10-01-2004 à 14:23:24  profilanswer
 

captainneuneu a écrit :

oki pour les initialisations
tu peux me donner un exemple ou int!=1 stp ? ca m'interesse


 
Ton PC [:le kneu]


---------------
Un matin je me lèverai et il fera beau.
n°607057
captainneu​neu
Posté le 10-01-2004 à 14:25:11  profilanswer
 


 
c ce que g cru comprendre en lisant le lien justement
c sizeof(char)=1
pas sizeof(int)
donc mon malloc est faux
je me demande pkoi mon prog marche alors ?
en fait, je pense qu'il planterait au moment du free

n°607062
jagstang
Pa Capona ಠ_ಠ
Posté le 10-01-2004 à 14:40:49  profilanswer
 

il marche parce que tu as de la chance

n°607075
printf
Baston !
Posté le 10-01-2004 à 15:00:54  profilanswer
 

captainneuneu : tu as essayé ton programme pour un tirage de 48 nombres ?


---------------
Un matin je me lèverai et il fera beau.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
[PHP] Vote une fois par jourcomment un popup peut fermer 2 popup à la fois !!! Aidez moi SVP
comment appliquer n fois un template?Des scripts .reg avec deux \\ qui donnent un seul \ une fois inscrit
[GTK]recuperer le numero de ligne selectionne dans une CLISTJ'ai encore buggé !! ... en MySQL cette fois ! :)
Compteur PHP - Comment ne pas compter plusieurs fois la même connectioScript de validation de numero de telephone...
[Delphi] tirage aléatoire suivant une loi normale ?Symbole pour le numéro de ligne ?
Plus de sujets relatifs à : Un tirage du LOTO sans 2 fois le même numéro !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR