Devinette avec Random
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: C/C++
Page 1 sur 2•
Page 1 sur 2 • 1, 2 
Devinette avec Random
Ecrire un programme qui permet de faire deviner un nombre choisi
aléatoirement entre 0 et 100 (fonction
random de la librairie stdlib). le
programme signalera à chaque tentative si le nombre proposé est plus
petit ou plus grand que la solution.
C'est un exercice qui m'a été proposé.
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)

methodiX- Admin


- Messages : 811
Inscrit le : 22 Mar 2007
Localisation : marsa - IPEST
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Devinette avec Random
- Code:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
srand(time(NULL));
int a,b;
a = rand()%100;
printf("deviner la solution");
scanf("%d",&b);
if (a<b)
{printf("ce nombre est plus grand que la silution");}
else
{ if (a>b)
{printf("ce nombre est plus petit que la solution");}}
else{printf("bravo");}
Dernière édition par le Ven 25 Jan - 0:47, édité 6 fois
mosa- Modérateur




- Messages : 635
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles
Feuille de personnage
Capacité linguistique:


(995/1000)
Re: Devinette avec Random
methodiX a écrit:[...] (fonction random de la librairie stdlib)[...]
Attention, random() n'est pas une fonction standard. Il est préférable d'utiliser rand() (déclarée dans le fichier d'en-tête stdlib.h).
EDIT :
mosa a écrit:
- Code:
void main()
La norme n'autorise pas cette écriture.
main() doit renvoyer une valeur de type int. Tout code ne respectant pas cette règle invoque un comportement indéterminé.
Bref, voici les deux signatures reconnues (du moins, tant qu'on veut écrire du code portable) :
- Code:
int main(void)
int main(int argc, char **argv)
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Devinette avec Random
Je te félicite pour ta réponse. Elle est très claire et bien rédigée.
Il manque juste un petit truc, c'est qu'il ne s'agit pas d'une seule tentative proposée par l'utilisateur, mais de plusieurs jusqu'à ce que le nombre secret soit trouvé. Pensez à la boucle While.
Il manque juste un petit truc, c'est qu'il ne s'agit pas d'une seule tentative proposée par l'utilisateur, mais de plusieurs jusqu'à ce que le nombre secret soit trouvé. Pensez à la boucle While.
Nabil - tunis
خير الناس أنفعهم للناس
خير الناس أنفعهم للناس

nabiL- Admin


- Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Devinette avec Random
nabiL a écrit:Je te félicite pour ta réponse. Elle est très claire et bien rédigée.
Merci
Il manque juste un petit truc, c'est qu'il ne s'agit pas d'une seule tentative proposée par l'utilisateur, mais de plusieurs jusqu'à ce que le nombre secret soit trouvé. Pensez à la boucle While.
En effet.
Il faut aussi rappeler que l'énoncé indique :
entre 0 et 100
Donc, en appliquant un modulo 100, la valeur 100 n'a aucune chance d'apparaître :
- Code:
rand() % 101
J'ai d'autres remarques mais je vous laisse d'abord terminer votre code.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Devinette avec Random
Je propose une autre amélioration c'est d'ajouter un score et de permettre aussi à l'ordinateur de deviner un nombre que l'humain cache.
manianis- Admin


- Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Devinette avec Random
- Code:
i=0;
do
{
printf("deviner le nombre");
scanf("%d",&b);
i=i+1;}
while(a!=b)
certes, il y a une autre amélioration plus intelligente si à chaque itération on sait si le nombre proposé est plus grand que le nombre secret ou non.
mosa- Modérateur




- Messages : 635
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles
Feuille de personnage
Capacité linguistique:


(995/1000)
Re: Devinette avec Random
manianis a écrit:Je propose une autre amélioration c'est d'ajouter un score et de permettre aussi à l'ordinateur de deviner un nombre que l'humain cache.
j'ai pas encore réfléchi à cette amélioration dans mon essai situé ci-dessus.
mosa- Modérateur




- Messages : 635
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles
Feuille de personnage
Capacité linguistique:


(995/1000)
Re: Devinette avec Random
mosa a écrit:
- Code:
i=0;
do
{
printf("deviner le nombre");
scanf("%d",&b);
i=i+1;}
while(a!=b)
C'est (presque) correct si on excuse l'oubli du point-virgule. Il ne reste plus qu'à indiquer à l'utilisateur à chaque itération si la valeur entrée est supérieure ou inférieure à celle attendue.
Cependant, veillez à la présentation de votre code : indentation, nommage, etc.
Plus de détails ici
- Code:
compteur = 0;
do
{
printf("Devinez le nombre secret : ");
scanf("%d", &valeur_entree);
compteur = compteur + 1;
}while(valeur_entree != valeur_attendue);
Ensuite, il faut savoir que suivant les implémentations, un appel de printf(), dans lequel ne figure pas le caractère de saut de ligne '\n', peut retarder l'affichage. Il est donc possible que l'utilisateur doive taper quelque chose pour voir enfin s'afficher "Devinez le nombre secret : ".
C'est pourquoi on va forcer l'affichage :
- Code:
compteur = 0;
do
{
printf("Devinez le nombre secret : ");
fflush(stdout);
scanf("%d", &valeur_entree);
compteur = compteur + 1;
}while(valeur_entree != valeur_attendue);
Ainsi, l'affichage se fait au moment voulu, quelle que soit la machine !
Enfin, je vous déconseille l'usage de scanf() qui n'est réservée qu'à ceux qui ont l'habitude du langage (et du temps à perdre). Si vous vous en sentez le courage, lisez ceci.
Sinon, si vous tenez vraiment à scanf(), la lecture de ce document s'impose.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Devinette avec Random
- Code:
i=0;
do
{
printf("deviner le nombre");
scanf("%d",&b);
if (a>b) {printf("oups, ce nombre est plus petit que la solution");}
else
{ if (a
else{printf("vraiment chapeau to you");}}
i=i+1;}
while(a!=b);
c'est possible?
mosa- Modérateur




- Messages : 635
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles
Feuille de personnage
Capacité linguistique:


(995/1000)
Re: Devinette avec Random
mosa a écrit:c'est possible?
Vous n'avez pas de compilateur à votre disposition pour le vérifier ?
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Devinette avec Random
Je propose une amélioration. L'utilisateur devra deviner en moins de 10 essais.
- Code:
int essai=10;
do
{
printf("deviner le nombre");
scanf("%d",&b);
if (a>b) {
printf("oups, ce nombre est plus petit que la solution");
} else if (a < b) {
printf("oups, ce nombre est plus grand que la solution");
} else {
printf("vraiment chapeau to you");
}
essai--;
} while(a!=b && essai > 0);
manianis- Admin


- Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Devinette avec Random
Comme tout le monde fait des propositions j'ai moi aussi concotté le programme C++ suivant, l'ordinateur devra deviner en 10 essais maximum :
- Code:
#include <iostream>
using namespace std;
int main()
{
cout << "Sélectionner un nombre entre 0..1000 je vais le deviner en moins de 10 essais." << endl;
char rep;
int min,
max,
prop,
essais;
min = 0; max = 1000; essais = 10;
do
{
prop = (min + max) / 2,
essais--;
cout << endl << endl << "Essai : " << (10-essais) << endl;
cout << "Je propose : " << prop << endl << endl;
cout << "Que pensez vous." << endl;
cout << "< : si votre nombre est inférieur à ma proposition" << endl;
cout << "> : si votre nombre est supérieur à ma proposition" << endl;
cout << "= : si j'ai trouvé" << endl;
do {
cout << "Votre réponse (<, >, =) : " ;
cin >> rep;
} while (rep != '<' && rep != '>' && rep != '=');
if (rep == '<') {
max = prop-1;
}
else if (rep == '>') {
min = prop+1;
} else {
cout << "j'ai trouvé " << prop << " en " << (10-essais) << " essais !" << endl;
}
} while (essais > 0 && rep != '=');
if (rep != '=')
cout << "Je n'ai pas trouvé votre nombre" << endl;
return 0;
}
// 835
manianis- Admin


- Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Devinette avec Random
Bravo manianis !!!
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)

methodiX- Admin


- Messages : 811
Inscrit le : 22 Mar 2007
Localisation : marsa - IPEST
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Devinette avec Random
manianis a écrit:Je propose une amélioration. L'utilisateur devra deviner en moins de 10 essais.
- Code:
int essai=10;
do
{
printf("deviner le nombre");
scanf("%d",&b);
if (a>b) {
printf("oups, ce nombre est plus petit que la solution");
} else if (a < b) {
printf("oups, ce nombre est plus grand que la solution");
} else {
printf("vraiment chapeau to you");
}
essai--;
} while(a!=b && essai > 0);
C'est pas mal mais il reste encore des variables au nom abscons (a et b).
Aussi, j'insiste sur la nécessité de la présence soit de fflush(stdout) soit du caractère '\n'. Voici ce que ce code donne chez moi :
deviner le nombre1
oups, ce nombre est plus petit que la solutiondeviner le nombre2
oups, ce nombre est plus petit que la solutiondeviner le nombre3
oups, ce nombre est plus petit que la solutiondeviner le nombre4
oups, ce nombre est plus petit que la solutiondeviner le nombre5
vraiment chapeau to you
Et enfin, je pense que l'utilisateur apprécierait de voir un petit message de consolation lorsqu'il n'a pas réussi à deviner le nombre secret.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Page 1 sur 2 • 1, 2 





