Jeux du nombre mysterieux

Signaler
Messages postés
28
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
6 avril 2003
-
Messages postés
28
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
6 avril 2003
-
comment faire pour réaliser un programme qui permet à l'utilisateur de deviner un nombre caché. L'ordinateur choisit un nombre aléatoire (un entier) entre 1 et 1000. Le joueur a le droit à un maximum de 10 essais pour deviner ce nombre caché. Pour chaque essai, l'ordinateur indique si le nombre entré par l'utilisateur est supérieur ou inférieur au nombre mystérieux ou s'il a bien deviné ce nombre. Si après 10 essais le joueur ne devine pas le bon nombre caché, on l'affiche et on affiche aussi un message lui souhaitant bonne chance à la prochaine partie. Le programme fonctionne tant que l'utilisateur décide de continuer
je declare nbreAlea, BORNE_SUP et BORNE_INF comme etant entiers et je sais que pour choisir un nombre au hasard jefais

nbreAlea = (int) ((BORNE_SUP-BORNE_INF +1)* Math.random() + BORNE_INF);


mais je me plante ds la suite :sad)
merci...

ne fais pas ce que je dis, ne dis pas ce que je fais :)
A voir également:

4 réponses

Messages postés
28
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
6 avril 2003
1
merci JHelp, tjrs cordiale....

a vrai dire oui g un peu de mal, mais je m'y habitude non pas parceque je ne potasse pas assez mais c que je m'y met tout seul sans cours :approve) et j'avoue que c pas facile, mais j'en ai fais du chemin...
merci encore

ne fais pas ce que je dis, ne dis pas ce que je fais :)
Messages postés
261
Date d'inscription
jeudi 5 septembre 2002
Statut
Membre
Dernière intervention
6 octobre 2005
11
A d'accord, si tu veux je peux t'apprendre. Je suis comme toi, j'ai appris à programmer tout seul, j'ai eu des cours bien des années aprés.
Je te donne un conseil pour bien programmer, il faut connaitre bien le sénario, ce que ton programme est censé faire. Et avancer en donnant de plus en plus de détail. Au départ on a en gros, on découpe en grosse tranche, puis on analyse chaque trcjnche, que l'on découpe en tranche, j'usqu'a obtenir l'algo.
Par exemple, pour ton probléme :
Au départ voici l'algo en gros :
1) On choisit au hazard une nombre
2) L'utilisateur saisie un nombre, selon le nombre saisie, on a trois actions possibles :
a) il est trop grand, alors on lui signale
b) il est trop petit, on lui signale
c) il a trouvé le bon nombre, dans ce cas il a gané
3) On recommence l'étape 2) 10 fois ou on arréte si l'utilisateur à gagné
4) Si l'utilisateur n'a pas trouver le nombre, on lui dit quel était le nombre à trouver

La partie 1), tu m'a signler que tu savias la faire, donc elle se suffit en elle même , pas besoin de la décortiquer plus en détail

L'étape 2), peute être décomposée ainsi :
a) l'utilisateur saisie un nombre
b) on fait le test nombreSaisie > nombreMisterieux ?, si c'est vrai, alors c'est trop grand
c) sinon on fiat le test nombreSaisie <nombreMisterieux ?, si c'est vrai, alors c'est trop petit
d) sinon, on est sur que nombreSaisie == nombreMisterieux, car il n'est ni trop grand, ni trop petit, cequi implique que l'on a trouvé le nombre

L'étape 3) On voit que l'on repéte l'étape 2), il s'agit donc d'une boucle autour de 2). Répéte t-on un certain nombre de fois déterminé, oui, mais au peut arreter la boucle avant la fin, cas on a trouvé le nombre. Donc ce n'est par un for. Il reste donc tant-que ou repeter. On veut que l'étape 2) soit executée au moins une fois, il s'agit donc d'un repeter

Pour l'étape 4), il suffit juste de tester si ça été trouver ou non. Si on a pas trouver alors on fait un affichage en conséquence

On remarque une chose, c'est que la notion que l'utilisateur est trouver ou non le nombre misterieux influence le comportement de l'étape 2), 3) et 4), il leur faut donc une variable déclaré avant l'étape 2), qu'il changeront ou testerons. Soit on a trouvé le nombre, soit non, cette variable est donc un booléen. On l'appel aTrouver, pour lui donné un nom significatif, au départ on a pas trouvé le nombre, elle est donc mise à faux.
Elle change de valeur dans de 2)d)
Elle est tester en 3) et en 4)

Ensuite, on en déduite l'algo que je t'ai donné

Voilà, j'espére t'avoir montrer comment on peut raisonenr.

JHelp
Messages postés
28
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
6 avril 2003
1
voila le travail que g faites sur ca, j'en suis un peu fier :big) , a noter qu'ont utilise une classe nomme Utile.java( rien a voire avec Java.Util) elle permet la lecture au clavier des entiers et carcateres au lieu de tjrs mettre le buffer...

public static void main(String[] args) throws IOException{
// le nombre d'essais permi
int nbEssais;
// Le nombre entré par le joueur
int nbUtilisateur;
// Nombre généré aléatoirement par l'ordinateur
  int nbOrdinateur;
// caractère permettant le choix final
    char carac ;
// constantes permettant de limiter le choix par l'ordinateurfinal double  BORNE_INF 1, BORNE_SUP 1000;
// Le nombre maximum de coups 
int nbMaxDeCoups = 10; // Methode pour permettre de refaire ou de quitter, boucle do while
do
     {
// Initialiser le nombre d'essais a 1
nbEssais = 1;
// Afficher la règle du jeu
System.out.println( " J'ai choisi un nombre entre 1 et 1000. Trouvez le en 10 essais ! ");
// Methode permettant de choisir un nombre aléatoirenbOrdinateur = ( int ) ((BORNE_SUP - BORNE_INF +1 ) * Math.random() + BORNE_INF);
// Saisir le nombre choisit par l'utilisateur
nbUtilisateur = Utile.lireEntier(" Entrez un nombre: ");
// Tant que l'utilisateur n'a pas trouvé le nombre  
    while ((nbUtilisateur < nbOrdinateur || nbUtilisateur > nbOrdinateur)  && nbEssais < nbMaxDeCoups   ) {
                    if ( nbUtilisateur < nbOrdinateur )
System.out.println ( " Essai #" + nbEssais + " Le nombre choisi est trop petit: ");

 					 else 
   System.out.println(" Essai #" + nbEssais + "  Le nombre choisi est trop grand: ");
// Saisir le nombre choisit par l'utilisateur
nbUtilisateur = Utile.lireEntier(" Entrez un nombre: ");

nbEssais ++ ;   }
  if ( nbEssais  ==  nbMaxDeCoups ){
    // verifier si le 10eme essai ne soit le bon ou pas
   if ( nbUtilisateur == nbOrdinateur)
           System.out.println ("Bravo vous avez trouvé le nombre" + nbOrdinateur 
           + " aprés " + nbEssais +" essai(s)");
   else
   System.out.println(" Désolé vous avez épuisez votre nombre d'essais ");
           }
   else 
          // Afficher un message de félicitation
     System.out.println ("Bravo vous avez trouvé le   nombre " + nbOrdinateur 
      + " aprés " + nbEssais +" essai(s)");
   	   
  
   System.out.print("\n\n\t\tVoulez vous recommencer(o/n)?\t ");
       
  carac = Utile.lireCaractere("");
       carac= Character.toUpperCase(carac);
     }while (carac =='O' );
      if ( carac == 'N')
  System.out.println(" Au revoir!  ");
  

    
}


et je trouve que ca marche bien, ok je c que g pas traite les erreures g suppose que l'ont entre un nombre lorsque l'ont le demande et un caractere sur demande aussi

ne fais pas ce que je dis, ne dis pas ce que je fais :)
Messages postés
261
Date d'inscription
jeudi 5 septembre 2002
Statut
Membre
Dernière intervention
6 octobre 2005
11
Et bien je te donne l'algo, à toi de le mettre en Java.
nombreMisterieux <-- choix du nombre
nbChoixEffectue <-- 0
aTrouver <-- Faux
Repeter
 | affichage d'annonce (ch'ais pas par exemple, il vous reste x essais pour trouver le nombre)
 | poposition <-- saisie d'un nombre
 | Si proposition >  nombreMisterieux Alors
 |  | affichacha trop grand
 | sinon si proposition <nombreMisterieux Alors
 |  | affichage trop petit
 | sinon
 |  | affichage bravo
 |  | aTrouver <-- Vrai
 | Fin Si
 | nbChoixEffectue <-- nbChoixEffectue
Jusqu'a nbChoixEfectue >= 10 OU aTrouver
Si NON(aTrouver)
 | affichage le nombre à trouver était nombreMisterieux
Fin-Si


Voilà.
Mais si tu as du mal sur ce genre d'algo, je te conseil de repotasser tes cours. C'est comme même un niveau de tré trés débutant en progrmation.

JHelp