J'ai l'impression que ce topic va devenir mythique

!
the_chojin (./15) :
Zephyr (./12) :
Si tu fais "Math.random () * N", tu obtiendras un nombre décimal X tel que 0 <= X < N, et donc si tu fais (int)(Math.random () * N), en supprimant toutes les décimales, tu as un nombre entier compris entre 0 et N-1 inclus. Il suffit d'ajouter 1 pour avoir le résultat de ta question b, la réponse de the_chojin était donc fausse.
Tiens exact, j'étais persuadé que floor arondissais ... comme round :/
Le terme
floor est un mot anglais dont la traduction française littérale est
plancher.
Le plancher, c'est ce qui constitue le bas d'une pièce, c'est également l'entier qui représente la borne inférieure d'un intervalle [N;N+1[
/ N entier, l'entier vers lequel sera ramené tout réel de cet intervalle par
floor().
Mais une pièce a également un plafond, tout comme un intervalle ]N-1;N]
/ N entier a une borne supérieure entière vers lequel peut être ramené tout réel de cet intervalle.
Et en anglais,
plafond se dit
ceiling... d'où la méthode
ceil() dont je vous laisse deviner l'utilité...
Sur un réel, le transtypage
(int) fonctionne comme un
floor(), donc comme
Math.random() donne un résultat réel dans [0;1[,
Math.random() * (N+1) donne un résultat réel dans [0;N+1[, donc
(int) (Math.random() * (N+1)) donne un résultat entier dans [[0;N+1[[, c'est-à-dire dans [[0;N]], justement ce qui est demandé pour
hasard0().
N+1)) ) ;
}
On a donc :/** Retourne un entier entre 0 et N inclus */
int hasard0( int N ) {
return ( (int) (Math.random() * (
Ceux qui savent compter ici verront que
hasard0(X) donne (X+1) résultats possibles.
On veut que
hasard1(N) donne un résultat entre 1 et N, soit N résultats possibles : comme il faut utiliser
hasard0(), est-ce vraiment si difficile que ça de trouver quel paramètre X utiliser ?
Et une fois X trouvé en fonction de N, est-ce vraiment si difficile que ça de trouver quel ajustement faire pour obtenir le résultat escompté ?
C'est peut-être loin pour certains, mais la manipulation d'entiers — représentés par des cailloux, des bananes, des barres de chocolat ou tout ce qui peut convenir —, ça s'apprend à l'école primaire, hein...
Quoiqu'il en soit, ce n'est pas ici un problème de Java ni même d'algo, juste du dénombrement (
ie. savoir compter sur ses doigts).