cerede2000 a écrit :
bon alors j'ai un plateau comme ce ci de 9x9
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
et donc je genere un nombre aleatoie entre 0 et 8 en x et en y pour qu'il tire sur un case mai je veut qu'il ne soit tire que des cases comme ce ci
X X X X X
X X X X
X X X X X
X X X X
X X X X X
X X X X
X X X X X
X X X X
X X X X X
mai je n'arrive pas a trouve d'algo pour ce faire donc oila pourquoi je sollicite votre aide merci
Ben voilà, tout de suite, on comprend mieux !
Un petit schéma vaut souvent mieux qu'une grande explication (
dixit mon prof de Physique de Spé

).
cerede2000 a écrit :
alors eu je vai preciser je travaille en C et mon plateaux est de 9x9 et les cases sont tirer au hasard avec x=random(9) et y=random(9) voila!! c'est a partir de ca que je voudrai faire une parite pour qu'il ne tire qu'une case sur deux mais jy arrive pas
r une des 24 cases non marquées par X :do
{ x = rand ( 9 ) ;
y = rand ( 9 ) ;
} while ( !((x+y) % 2) ) ;
Voici l'algorithme bête et méchant en réutilisant ton tirage pour avoi
Pour avoir au contraire une des 25 cases marquées d'un X, il suffit d'enlever la négation (caractère '
!').
Le seul problème, c'est que cet algorithme a une probabilité non nulle de ne pas trouver de case valide en un temps fini, probabilité qui tend exponentiellement vers 0.
Mais bon, vu la vitesse de calcul, il faudrait vraiment utiliser toute la réserve de malchance disponible dans l'Univers pour ne rien trouver au bout de quelques microsecondes

.
Tiens, ça me rappelle le première cours de Physique Statistique de 1A où le prof, voulant démontrer par la pratique la 'nullité statistique du moment magnétique d'un grand système à deux états de spin', demande aux 10 élèves des premiers rangs de tirer chacun à pile ou face ... résultat : 10 piles

!
A l'inverse, l'algorithme de bobti89 marchera du premier coup ... à un petit détail près.
Comme on a
a = 2 * rand ( 40 ) ;, la toute dernière case, dans le coin x=y=8 (soit a == 80), ne sera jamais choisie.
Il faut donc
a = 2 * rand ( 41 ) ; ...
Plus exactement, dans la parenthèse du
rand, il faut arrondir à la valeur entière supérieure le résultat (Xmax * Ymax / 2) (ça existe,
ceil, en C ?).
Et de manière toute aussi générale, je préciserai que la valeur
9 utilisée pour le calcul de x et y correspond en fait à Xmax (Ymax n'intervient
que dans le calcul de a).
@++