Devinette avec Random

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Devinette avec Random

Message par methodiX le Ven 25 Jan - 1:46

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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par suneddine le Ven 25 Jan - 2:22

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 - 2:47, édité 6 fois
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3788
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Ven 25 Jan - 2:23

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). Wink

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
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Napoléon le Ven 25 Jan - 10:43

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.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5338
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Ven 25 Jan - 12:21

nabiL a écrit:Je te félicite pour ta réponse. Elle est très claire et bien rédigée.
Merci Smile
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. Smile

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par manianis le Ven 25 Jan - 16:42

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
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par suneddine le Ven 25 Jan - 22:16

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.
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3788
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par suneddine le Ven 25 Jan - 22:20

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.
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3788
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Ven 25 Jan - 23:10

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 ! Smile

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.
Wink

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par suneddine le Ven 25 Jan - 23:16

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?
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3788
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Ven 25 Jan - 23:20

mosa a écrit:c'est possible?
Vous n'avez pas de compilateur à votre disposition pour le vérifier ?

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par manianis le Sam 26 Jan - 0:36

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
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par manianis le Sam 26 Jan - 1:08

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
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par methodiX le Sam 26 Jan - 1:10

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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Sam 26 Jan - 1:12

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.
Smile

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par methodiX le Sam 26 Jan - 1:16

manianis Smile félicitation pour la deuxième solution là où l'ordinateur devine la solution!!!

Juste une remarque funny: lorsque min devient supérieur ou égal à max, et que l'humain insiste encore sur le fait que le nombre proposé par l'ordinateur n'est pas correct, l'ordinateur doit annoncer que l'humain a commis une erreur dans ses réponses !!!

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par methodiX le Sam 26 Jan - 1:18

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.

hé oui, on peut tout faire même en C. Pas besoin du VB pour amuser l'utilisateur Smile

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par methodiX le Sam 26 Jan - 1:19

Revenons aux mathématiques maintenant:
Qui peut calculer le nombre maximal (moyen) des propositions qui peuvent être donné par l'ordinateur pour deviner le nombre secret ??

(preuve mathématique souhaitée)

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par manianis le Sam 26 Jan - 1:31

methodiX a écrit:manianis Smile félicitation pour la deuxième solution là où l'ordinateur devine la solution!!!

Juste une remarque funny: lorsque min devient supérieur ou égal à max, et que l'humain insiste encore sur le fait que le nombre proposé par l'ordinateur n'est pas correct, l'ordinateur doit annoncer que l'humain a commis une erreur dans ses réponses !!!

A vous de développer cette amélioration.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par manianis le Sam 26 Jan - 1:33

methodiX a écrit:Revenons aux mathématiques maintenant:
Qui peut calculer le nombre maximal (moyen) des propositions qui peuvent être donné par l'ordinateur pour deviner le nombre secret ??

(preuve mathématique souhaitée)

La preuve est trés simple. Comme l'ordinateur utilise une méthode dichotomique il faudra chercher :
2^x=1000 --> Ln(1000)/Ln(2)=9,xxx=10 essais

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Sam 26 Jan - 3:54

methodiX a écrit:hé oui, on peut tout faire même en C. Pas besoin du VB pour amuser l'utilisateur Smile
Je ne suis pas sûr de comprendre. Est-ce un sarcasme ?

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par suneddine le Sam 26 Jan - 9:19

Timon a écrit:
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

oui, tu as raison
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3788
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par manianis le Sam 26 Jan - 15:57

Timon a écrit:
methodiX a écrit:hé oui, on peut tout faire même en C. Pas besoin du VB pour amuser l'utilisateur Smile
Je ne suis pas sûr de comprendre. Est-ce un sarcasme ?

Sarcasme ? Que voulez-vous dire ?

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Timon le Sam 26 Jan - 17:22

J'ai cru y voir une forme de moquerie mais je me suis probablement trompé. Smile

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par methodiX le Sam 26 Jan - 17:49

Timon a écrit:J'ai cru y voir une forme de moquerie mais je me suis probablement trompé. Smile

Je suis loin de me moquer des gens. Sad

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Devinette avec Random

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum