1

salut tout le monde
est ce que quelqu'un peu m aider sur cet exercices:

je vois pas ce qui faut utiliser pour retourner un nombre au hasard compris entre 0 et le nombre introduit!

a) Ecrire une fonction dénommée hasard0 prenant en paramètre un entier et retournant un entier.
L'entier retourné sera compris entre 0 et l'entier passé en paramètre.
b) Ecrire une fonction dénommée hasard1 prenant en paramètre un entier et retournant un entier.
L'entier retourné sera compris entre 1 et l'entier passé en paramètre. Pour ce faire, vous ferez
appel à la fonction hasard0.

cordialement.

2

Indice : cherche du côté de "Random" ^^
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

3

oui merci mais je le savais
mais j comprend pas comment l utiliser
j ai chercher et que dalle
c est mal expliquer ou bien c est moi qui est con

4

C'est bien expliqué.
Je te laisse tirer la douloureuse conclusion.

5

ok
merci beaucoup les gars
vous m avez vraiment bien aider

6

enfin
j ai trouver pour le a mais pas le b
j vois pas comment il faut faire pour que l entier soit compris entre 1 et le nombre rentré en parametre et pas entre 0 et le nombre

(int) Math.floor(Math.random()*nbr);

7

(int) Math.floor(Math.random()*(nbr-1))+1; //nbr>1

8

merci beaucoup the_chojin
je l aurai jamais trouver
merci infiniment


9

mouais, ce qui est idiot avec le fait qu'il t'ait directement donné la solution, c'est que tu n'as pas forcément compris pourquoi et comment trouver la prochaine fois... en gros c'est inutile :/
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

10

Peut être qu'il n'en a rien à faire de l'info et qu'il veut se débarrasser de cette exercice? Et si il aime l'info, il y a plein d'autre chose où il peut essayer de chercher la solution par lui même. Moi je suis pour donner les solutions rapidement smile

11

ok
bin quelqu un peut m expliquer comment on trouve cette methode avec d autre exemple
et merci davance

12

bon :

Tu veux un entier aléatoire compris entre 1 et N, N étant ton paramètre. Tu peux utiliser une fonction, Math.random () qui génère un nombre aléatoire X tel que 0 <= X < 1, il ne reste donc plus qu'à changer de domaine.

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.

Pour la question a, vu que tu veux un nombre compris entre 0 et N au lieu de 0 et N-1, il faut augmenter le nombre de possibilités au lieu de décaler le domaine, c'est donc au moment de la multiplication qu'il faut ajouter 1 à N pour obtenir "N+1" possibilités différentes plutôt que "N", ce qui donne donc "(int)(Math.random () * (N + 1))".

Mais franchement si tu luttes sur ce genre d'exos, reprends sérieusement des cours d'algorithmique plutôt que de java, dans un premier temps :/
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

13

ok merci
mais faut pas oublier aussi que c est ma premiere annee en informatique et
qu on ne fait pas ca au cours d algorithme

et qu au cours de java le prof nous explique que dalle

14

Heu si tu arrives pas a trouver comment passer d'un nombre entre 0 et 1 a un nombre entre 0 et N (oui il peut y avoir des trucs tres complique derriere, mais pas la), c'est un probleme d'algorithmie ou de logique, comme tu veux.

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 :/

16

donc c est juste pour etre sur que j ai compris
pour le a c est: nbr=(int)(Math.random()*(N+1));
ex: si N=0 alors nbr=0
et si N=1 alors nbr doit avoir ou bien 1 ou 0

et pour le b c est: nbr=(int)(Math.random()*N)+1;
ex: si N=1 alors nbr=1
et si N=0 alors nbr doit avoir 1 ou bien 0 mais le problem c est que j obtient tjs 1 et jamai 0

cordialement.

17

Heu ! VOus n'avez pas oublié que pour b) il faut faire appel à hasard0 ?
Le gentil timide du 64

18

J'ai l'impression que ce topic va devenir mythique grin !
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).
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

19

b) moi je le voyais comme ça

*** appeler hasard0 (ce qui est demandé)
*** utiliser une structure while

plutot que de mettre la formule directe.

J'avais un prof assez sévère mais juste pour faire attention à ce genre de détail
Le gentil timide du 64

20

Mais elle aurait fait quoi ta boucle while ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

21

Elle aurait vérifié, tant que cela se serait avéré nécessaire, que le résultat du tirage aléatoire ne valût pas 0.
Je pense que la finalité de la question est de montrer que l'on peut y arriver sans devoir établir une fonction plus compliquée à mettre en oeuvre.
Le gentil timide du 64

22

/** Retourne un entier entre 1 et N inclus */
int hasard1( int N ) {
	int r ;
	do {
		r = hasard0(N) ;
	} while ( r == 0 ) ;
	return r ;
}
Ce... machin... est complètement tripaf...
Faire un while pourri uniquement parce que l'on n'a pas envie de sa casser le cul à calculer a et b dans int hasard1( int N ) { return ( a + hasard0( N + b ) ) ; } (diantre, que c'est compliqué !), c'est... inqualifiable sick...

Par contre, pour faire mieux, il faudrait vérifier dans hasard0 que N >= 0 (inutile de vérifier dans hasard1 que N >= 1), et, peut-être, lever une exception ou afficher un message d'erreur.
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

23

Genre tu en fais pas un peu trop la ?

24

Ça se voit tant que ça trifus ?
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

25

a mon avis... oui