HASARD

cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 - 24 mai 2003 à 12:51
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 19 sept. 2010 à 14:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9950-hasard

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
19 sept. 2010 à 14:05
Plutôt 16 que 15.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
9 mai 2006 à 09:38
c'est <<, pas >>.

ça donnerait:

int r1 = rand();
int r2 = rand();
int r = r1 << 15 + r2;

ça ça peut marcher, j'imagine.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 mai 2006 à 12:31
rectification de mon code :
rand()>>15+rand()/(MAXRAND+MAXRAND>>15)-1 ?
tu as parlé d'un nombre entre -1 et 0...
regardes :
rand() tient sur 15 bits, donc, rand>>15+rand tient sur 30 bits, et est corect niveau répartition.... (>>n est un décalage de n bits)
dans un générateur de nombres aléatoires, on prend souvent les bits un par un...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
8 mai 2006 à 12:26
rien compris :/
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 mai 2006 à 12:00
la encore ça dépend de ce que tu veux faire...

rand()>>15+rand()/MAXRAND/MAXRAND-1 ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
8 mai 2006 à 11:27
ah non, ça n'a aucune rapport :)

on dit pseudo aléatoire pour un ordinateur, parce que, par définition, une liste aléatoire c'est une liste pour laquelle la manière la plus courte de la spécifier, c'est de la donner intégralement. autrement dit: il n'existe aucun algorithme efficace pour la construire. dans le cas d'un ordi, c'est évidemment loupé: t'écriras tjs un algo pour générer une liste "aléatoire", donc on dit "pseudo aléatoire".

mais ici, c'est pas le problème. le souci, c'est que les nombres ne sont pas donnés selon une répartition homogène sur ton intervalle 0 - MAXRAND², et ça c'est assez grave....
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 mai 2006 à 11:22
ouais, avec ça, t'as pas une répartition parfaitement aléatoire, juste pseudo...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
8 mai 2006 à 11:17
ça va biaiser ton résultat, car certains nombres seront plus souvent formés que d'autres. exemple:

pour obtenir 1, tu dois avoir rand() 1 et rand() 1 (les deux fois) -> une combinaison

pour obtenir 12, tu peux avoir: 1 et 12, 2 et 6, 3 et 4, 4 et 3, 6 et 2, 12 et 1 -> 6 combinaisons

pour obtenir 0, il te faut un zéro, et n'importe quoi d'autre -> 2*MAXRAND - 1 combinaisons

c'est plus du tout du tout du tout une répartition linéaire ! et la somme, c'est encore pire ^^
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
7 mai 2006 à 21:21
et rand()*rand()/MAXRAND/MAXRAND-1 ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
7 mai 2006 à 01:25
hmm, la fonction standard du C (à savoir: rand() ) ne renvoie qu'un nombre ENTIER allant de 0 à RANDMAX (ou MAXRAND, je sais plus), qui vaut, on va dire le plus souvent, 32767 (2^15 - 1).

Si tu veux récupérer des nombres "avec des chiffres après la virgule", libre à toi de faire une division, mais sois bien conscient du fait que les nombres tirés ne forment que 2^15 (32768) possibilités: n'espère pas faire un tirage sur 0 - 1 avec 5 décimales!
jsabrina Messages postés 4 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 6 mai 2006
6 mai 2006 à 11:09
mais comment je doit codé ma fonction, jusque là je suis arrivée à un chois simple mais si je met un interval specifique(en plus je veux que se nombre ai des chiffres aprés la virgule ) je n'ai que 0.00000 ????????????? et donc forcement je suis perplexe...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 mai 2006 à 10:50
comment dire... t'as plein de solutions... soit tu fais un % et t'auras un nombre qu'on estimera comme pas du tout aléatoire... soit tu codes toi même ta fonction (c'est marrant à faire)...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 mai 2006 à 10:50
comment dire... t'as plein de solutions... soit tu fais un % et t'auras un nombre qu'on estimera comme pas du tout aléatoire... soit tu codes toi même ta fonction (c'est marrant à faire)...
jsabrina Messages postés 4 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 6 mai 2006
6 mai 2006 à 10:46
Bonjour;
j'aimerais savoir comment choisir un nombre aléatoirement dans un interval fixe......Merci de me répondre c'est trés urgent..
jsabrina Messages postés 4 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 6 mai 2006
6 mai 2006 à 10:36
Bonjour;
j'aimerais savoir comment choisir un nombre aléatoirement dans un interval fixe......Merci de me répondre c'est trés urgent..
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
2 mai 2006 à 21:41
Faut pas acheter de magasines pour ça :)

Ce code... mince, ça doit être un des premiers posts funto - kirua - amk :p

Et un des plus inutiles aussi ...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 mai 2006 à 21:30
toi qui est fort en math, et qui n'est pas totalement hermétique aux systèmes libres, tu peux t'acheter un linux mag, (si tu es interessé, je le cherches) ou tu trouveras de la doc sur les algorithmes qui génèrent un nomrbe aléatoire...

une histoire de nombres primitifs, de nombres premiers et d'autres choses du genre... (reste de divisions, et grosses optimisations par décalages de bits)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 juin 2003 à 20:36
ben j'ai mis ça pr les temps plus durs (où je n'ai rien en tête) là ce n'est plus d'application.
Quant au second projet, je suis bien le seul à programmer et j'essaye autant que possible de paufiner l'aspect technique, mais pour la partie contenu, j'ai deux amis très calés, et ça réduit fameusement et le travail, et l'ennui de la chose (j'ai souvent développé des architecture de sites sans jamais mettre de contenu parce que ça m'énerve tout simplement)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
13 juin 2003 à 19:38
Ben alors, pourquoi tu dis "Si (...) vous voudriez que nous travaillions un petit peu ensemble, envoyez moi un mail" sur ton site ?
De toutes façons, faire 2 gros projets tout seul, ça va être dur, mais si tu t'en sens capable, bonne chance !
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 juin 2003 à 18:52
seul, et je travail toujours seul ^^
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
13 juin 2003 à 08:39
Correction : Kylix n'est pas Open source, il est en version Open; comme t'as les version Enterprise, Professional, t'as la version Open, qui est la plus basse dans la hiérarchie et la plus dépourvue de fonctionnalités, mais qui est gratuite.

Ton projet 1 m'intéresse. Tu le fais tout seul ou tu as une équipe ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 juin 2003 à 07:40
1/ Créer un moteur de jeu pr rpg en 2D (opengl / C++). avancement: 0%
2/ Créer un site qui soit incontestablement le meilleur sur Final Fantasy IX grâce au PHP et au travail acharné. avancement: 60%


Kylix est open source ??????????????
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
12 juin 2003 à 22:57
Ah ben d'accord, mais je préfère rester dans la légalité le + possible, et je vais peut-être télécharger la version Open de Kylix que je mettrai sous mon Linux, je sais pas...
Sans être indiscret, c'est quoi tes 2 gros projets ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 juin 2003 à 21:16
eh bien ce site est comme qui dirait ma honte :-D mais je cherche un hébergeur pr mon nouveau modulable hyper top :-P

des projets en commun... désolé mais j'ai déjà deux gros projets bien en route qui me demandent plus que mon temps libre.

l'IDE, je me suis arrangé... www.borland.fr j'ai commandé le CD il est arrivé, je me suis enregistré puis pr le reste, j'ai fait comme tlm ... tu comprends?
note que tu peux soit télécharger le fichier (174Mo si ma mémoire est ok), soit commander le CD gratuitement (même pr la belgique, la preuve ;-))
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
12 juin 2003 à 17:06
De rien :)
Pour le compilo de Borland, je l'ai déjà téléchargé, mais c'est pas pareil qu'avoir l'IDE : déjà l'IDE est en version 6 alors que le compilo n'est disponible qu'en version 5.5, mais surtout, le compilo gratuit n'a pas la VCL, donc n'est pas à 100% compatible.
A propos, L'IDE, tu l'as eu comment ? Ca m'énerve de pas l'avoir !

Je suis allé sur ton site; si tu as une idée de projet commun (en C/C++), ça m'intéresserait.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 juin 2003 à 10:54
tu sais que le compilo de borland est gratuit? (enfin, peut être pas celui de C++ Builder, mais je pense que c le même. je me trompe?)

je ne suis aps vexé parce que je sasi que tu as raison. D'ailleurs par la suite j'ai posté deux classes en PHP dont je suis assez content. Et puis au passage ça m'aura permit d'apprendre qq ch ;-)

merci pr le comment
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
12 juin 2003 à 10:06
GetTickCount(), c'est pas ANSI, c'est pas portable. Moi, je préfère utiliser srand(time(NULL)) pour initialiser le générateur de nombres aléatoires.
AmK>> void main(), c'est pas ANSI non plus, mais la plupart des compilateurs l'acceptent. Il vaut mieux utiliser
int main(int argc, char* argv[] )
{
// Code...
return 0; // Ou return EXIT_SUCCESS; , pour ça inclure <stdlib.h>
}

Kirua>> random() et randomize(), c'est spécifique à C++ Builder, même si c'est dans les fichiers d'includes standard. Evite de les utiliser, et utilise plutôt ce que AmK ou moi t'avons donné. Borland a tendance à "inventer" des fonctions "standards", comme gotoxy(), clrscr(), textcolor(), textbackground(), setcursortype(), wherex(), wherey().
Si tu veux que ton code soit utile, il faut qu'il soit utilisable par le plus de codeurs possibles, et tout le monde n'a pas le même compilateur (C++Builder, le seul qui me manque :-( ).
Et aussi, essaie la prochaine fois, sans vouloir te vexer, de mettre des programmes complets, je veux dire avec un main, et compilables avec un copier-coller, ou alors zippés.
Continue, et bonne chance pour la suite !
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
25 mai 2003 à 15:28
une seule fois suffit c'est une sorte d'initialisation ,

PS : tu peux aussi utiliser srand(NULL ())
mais ça va te generer un nombre aleatoire une seule fois seulement essaye et tu verras :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 mai 2003 à 13:30
ah ok merci :-)
le srand() je l'utilise chaque fois ou une seule fois?
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
25 mai 2003 à 13:16
exemple :

#include "time.h"

void main()
{
int a;

srand(GetTickCount ());
a=rand()%30;
printf(" %d",a);
}

ce code va donner un nombre aleatoire a a entre 1 et 30
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 mai 2003 à 00:31
GetTickCount c rapport au temps d'exécution de windows. comment tu fais ton compte ?
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
24 mai 2003 à 12:51
ps : ya mieu encore pour les nombres aleatoires par exemple avec GetTickCount et srand tu peux donner un nombre aleatoire compris entre 2 nombres avec le modulus %

c'est plus pratique je pense
++
Rejoignez-nous