Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > "Plus ou Moins" resolver > Lecture du sujet

"Plus ou Moins" resolver

La version inversée du programme "Plus ou Moins" du tuto

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Geneosis # Posté le 09/07/2008 à 17:19:22
Rien, c'est mieux que ça !
Avatar
Groupe : Membres
Comme je commençais à m'ennuyer à force d'optimiser le programme "Plus ou Moins" proposé dans le tutoriel, j'ai essayé de créer un programme inverse.

Je m'explique : Vous choisissez un nombre entier compris entre 1 et 100. Mon programme vous propose des valeurs et vous demande si c'est le nombre que vous aviez choisi. Quand vous répondez non, il vous demande si votre nombre est plus petit ou plus grand. Puis il fait une autre proposition en fonction de votre réponse et ainsi de suite...

Je pense avoir créé la technique la plus rapide pour que mon programme trouve le nombre choisi, mais j'aimerais l'avis d'un programmateur plus expérimenté. Voici donc le fammeux programme :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>

long choix_proposition(long p, long g)//Ceci est le calcul qui fournit la proposition de l'IA
{
     //On fait la moyenne entre le plus petit nombre possible et le plus grand.
     return (p+g)/2;
}

long indice_joueur()//Ceci demande au joueur si son nombre est plus petit ou plus grand
{
     long i;
     printf("1 -> Plus petit\n0 -> Plus grand\n");
     scanf("%ld", &i);
     return i;
}

int main(int argc, char *argv[])
{
    long petit=1, grand=100, proposition=50, reponse=1, coups=0, indice=1;
  printf("Choisissez un nombre entre 1 et %ld\n", grand);//Donne au joueur les valeurs parmi lesquelles il peut choisir son chiffre
  system("PAUSE");
  
  do
  {
  coups++;//incrémente le compteur de coups
  
  proposition=choix_proposition(petit, grand);
  printf("C'est le nombre %ld\n0 -> oui\n1 -> non\n\n", proposition);//Demande si la valeur proposée est juste
  scanf("%ld", &reponse);
  
  if(reponse)//J'utilise "reponse" comme une variable booléenne
  {
  indice=indice_joueur();
  
  if(indice)//Modifie les bornes des nombres possibles
  {
      grand=proposition;
  }
  else
  {
      petit=proposition;
  }
  
  }
  } while(reponse);
  
  printf("J'ai trouve le nombre mystere en %ld coups\n", coups);
  
  system("PAUSE");	
  return 0;
}
Édité le 23/07/2008 à 16:14:05 par Geneosis

Avec le temps grandit l'esprit...
Avec la vieillesse vient la sagesse...

Secret (cliquez pour afficher)
Et oui, c'est moi qui ait inventé ce dicton à la con :D .
Secret (cliquez pour afficher)
Non, je n'ai plus aucun secret à vous livrer :p .
Secret (cliquez pour afficher)
Mais faut vous le dire en quelle langue o_O J'AI PAS D'AUTRES SECRETS ! ! ! Votre curiosité vous perdra :colere:
.
 
Hors ligne Dark Patate # Posté le 09/07/2008 à 18:05:10
Longue vie à Dark patate!
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
il marche mais tu as oublié un ; à
Code : C
1
2
3
long indice_joueur()//Ceci demande au joueur si son nombre est plus petit ou plus grand
{
     long i
Édité le 09/07/2008 à 18:05:43 par Dark Patate

VIVE LA REPUBLIQUE ET VIVE LA FRANCE, allons enfants de la patriiiiie le jour de gloire est arrivé...

Image utilisateur
Piquée à Vodka Orange (Merci pour cette superbe usebar)

 
Hors ligne 4drien # Posté le 09/07/2008 à 20:33:24
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Code : C
1
2
3
4
5
6
7
long choix_proposition(long p, long g)//Ceci est le calcul qui fournit la proposition de l'IA
{
     //On fait la moyenne entre le plus petit nombre possible et le plus grand.
     long t;
     t=p+g;
     return t/2;
}


Tu peux faire plus court :
Code : C
1
2
3
4
5
long choix_proposition(long p, long g)//Ceci est le calcul qui fournit la proposition de l'IA
{
     //On fait la moyenne entre le plus petit nombre possible et le plus grand.
     return (p+g)/2;
}

Image utilisateur

 
Hors ligne aiii # Posté le 09/07/2008 à 20:43:55
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Ton code à la compilation:
Code : Console
d:\Mes documents\Projet C\test\main.c|12|warning: function declaration isn't a prototype|
d:\Mes documents\Projet C\test\main.c||In function `indice_joueur':|
d:\Mes documents\Projet C\test\main.c|14|error: syntax error before "printf"|
d:\Mes documents\Projet C\test\main.c|15|error: `i' undeclared (first use in this function)|
d:\Mes documents\Projet C\test\main.c|15|error: (Each undeclared identifier is reported only once|
d:\Mes documents\Projet C\test\main.c|15|error: for each function it appears in.)|
d:\Mes documents\Projet C\test\main.c|19|warning: unused parameter 'argc'|
d:\Mes documents\Projet C\test\main.c|19|warning: unused parameter 'argv'|
||=== Build finished: 4 errors, 3 warnings ===|

Citation : Geneosis
Comme je commençais à m'ennuyer à force d'optimiser le programme "Plus ou Moins" proposé dans le tutoriel,

Sais-tu ce que veut dire "optimiser" ? Visiblement pas, car tu as choisi le type long.
Code : C
1
2
printf("1 -> Plus petit\n0 -> Plus grand\n");
scanf("%ld", &i);

Et si j'entre le caractère 'e' ? Ceci pourra t'aider ...
Ensuite, je pense que tu laisses trop le choix à l'utilisateur, qui peut tricher à volonté.

Édité le 09/07/2008 à 22:24:17 par aiii
 
Hors ligne Destin # Posté le 09/07/2008 à 21:40:40
Avatar
Groupe : Membres
Citation : Geneosis
Je pense avoir créé la technique la plus rapide pour que mon programme trouve le nombre choisi, mais j'aimerais l'avis d'un programmateur plus expérimenté. Voici donc le fammeux programme :


Ici, tu aura plus l'avis d'un programmeur qu'un programmateur ;).
 
Hors ligne sam101 # Posté le 10/07/2008 à 11:58:57
Avatar
Groupe : Membres
Citation : aiii
Ton code à la compilation:
Sais-tu ce que veut dire "optimiser" ? Visiblement pas, car tu as choisi le type long

Surtout que sur I386, la taille d'un long est égale a celle d'un int :-° .
Sinon, pour les remarques, je pense que beaucoup de gens codent içi en C99 sans meme le savoir .

=)..
 
Hors ligne Geneosis # Posté le 23/07/2008 à 16:21:35
Rien, c'est mieux que ça !
Avatar
Groupe : Membres
Merci pour ces précisions, Dark Patate et 4drien, j'aurais dû y penser...

Pour ce qui est des problèmes de saisie que tu me signale aiii, je n'avais pas lu le tutoriel non officiel que tu me propose, et j'essayerais d'améliorer tout ça un de ces jours... Mais sur ce point tu en fait un peu trop : le joueur est là pour se divertir, donc il n'a qu'à fournir au programme ce qu'il lui demande s'il veut pouvoir jouer en paix ^^

Avec le temps grandit l'esprit...
Avec la vieillesse vient la sagesse...

Secret (cliquez pour afficher)
Et oui, c'est moi qui ait inventé ce dicton à la con :D .
Secret (cliquez pour afficher)
Non, je n'ai plus aucun secret à vous livrer :p .
Secret (cliquez pour afficher)
Mais faut vous le dire en quelle langue o_O J'AI PAS D'AUTRES SECRETS ! ! ! Votre curiosité vous perdra :colere:
.
 
Hors ligne Nab # Posté le 23/07/2008 à 16:42:51
KISS
Avatar
Groupe : Membres
Citation : sam101
Surtout que sur I386, la taille d'un long est égale a celle d'un int :-° .

…mais pas sur un x86_64, architecture de plus en plus répandue.
De plus, utiliser long alors que int suffit et justifier ça en disant « owi mais s'pareil chez moi de toute façon » n'est pas une attitude à adopter, les différents types on été créés pour différentes utilisations ; qu'ils soit identiques sur une implémentation ne veut rien dire.

Image utilisateurGNU/Image utilisateurLinux - Image utilisateurDebian - Image utilisateurGNOME - Image utilisateurGTK+ - C - BaSH - Image utilisateurPython - Image utilisateur GIMP - Image utilisateur Blender

Ma bannière est inspirée de celle de iKs. D'ailleurs, si ça te dérange fais-le moi savoir, j'en changerai.
 
Hors ligne aska990 # Posté le 24/07/2008 à 00:24:45
Je vais manger moult frites !
Avatar
Groupe : Membres
Heu...c'est normal de ne pas pouvoir choisir le nombre ? Au lieu de ça le programme se met en pause :-°
 
Hors ligne Geneosis # Posté le 29/07/2008 à 15:56:05
Rien, c'est mieux que ça !
Avatar
Groupe : Membres
Le nombre, tu le choisit dans ta tête gros malin ^^ c'est l'ordi qui essaye de le deviner : j'ai bien précisé que ce programme avait un fonctionnement inverse à celui du tutoriel
Édité le 29/07/2008 à 15:58:09 par Geneosis

Avec le temps grandit l'esprit...
Avec la vieillesse vient la sagesse...

Secret (cliquez pour afficher)
Et oui, c'est moi qui ait inventé ce dicton à la con :D .
Secret (cliquez pour afficher)
Non, je n'ai plus aucun secret à vous livrer :p .
Secret (cliquez pour afficher)
Mais faut vous le dire en quelle langue o_O J'AI PAS D'AUTRES SECRETS ! ! ! Votre curiosité vous perdra :colere:
.
 
Hors ligne -ed- # Posté le 29/07/2008 à 17:47:52
C is a sharp tool
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : Geneosis
Comme je commençais à m'ennuyer à force d'optimiser le programme "Plus ou Moins" proposé dans le tutoriel, j'ai essayé de créer un programme inverse.

C'est OK, mais c'est pas ergonomique. Il faudrait utiliser +, - et = en un seul menu.
Code : Console
Je propose 23

+ - = ?
_

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>

/* Ceci est le calcul qui fournit la proposition de l'IA */
long choix_proposition (long p, long g)
{
/* On fait la moyenne entre le plus petit nombre possible et le plus grand. */

   return (p + g) / 2;
}

int main (void)
{
   int petit = 1, grand = 100, coups = 0;
   int trouve = 0;
/* Donne au joueur les valeurs parmi lesquelles il peut choisir son nombre */
   printf ("Choisissez, dans votre tete, un nombre entre 1 et %d\n"
           "Puis <enter> pour démarrer :\n", grand);
   getchar ();

   do
   {
      int reponse;
      int proposition;
/* incrémente le compteur de coups */
      coups++;

      proposition = choix_proposition (petit, grand);
/* Demande si la valeur proposée est juste */
      printf ("Est-ce le nombre %d ?\n" "= + - ?\n\n", proposition);
      reponse = getchar ();
      if (reponse != '\n')
      {
         getchar ();
      }

      switch (reponse)
      {
      case '=':
         trouve = 1;
         break;
      case '-':
         grand = proposition;
         break;
      case '+':
         petit = proposition;
         break;

      }
   }
   while (!trouve);

   printf ("J'ai trouve le nombre mystere en %d coups\n", coups);

   return 0;
}

Code : Console
Choisissez, dans votre tete, un nombre entre 1 et 100
Puis <enter> pour continuer :

Est-ce le nombre 50 ?
= + - ?

-
Est-ce le nombre 25 ?
= + - ?

+
Est-ce le nombre 37 ?
= + - ?

-
Est-ce le nombre 31 ?
= + - ?

+
Est-ce le nombre 34 ?
= + - ?

+
Est-ce le nombre 35 ?
= + - ?

=
J'ai trouve le nombre mystere en 6 coups

Process returned 0 (0x0)   execution time : 27.749 s
Press any key to continue.

Il n'y a plus qu'à faire un client et un serveur et à les faire jouer l'un contre... (+/- vs solver)... C'est les vacances, à vos claviers...

Ca commence par la définition d'un protocole...

Édité le 30/07/2008 à 08:36:48 par -ed-

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne aska990 # Posté le 30/07/2008 à 08:18:59
Je vais manger moult frites !
Avatar
Groupe : Membres
Oups désolé

Il y a tellement de sujet sur les plus ou moins que je sais pas toujours sur lequel je réponds :lol:
 
Hors ligne Geneosis # Posté le 05/08/2008 à 15:01:28
Rien, c'est mieux que ça !
Avatar
Groupe : Membres
C'est pas grave aska990 ^^
Pour ce qui est de ton idée -ed-, elle est très bonne ! Je crois qu'on aura du mal à trouver mieux, je vais marquer le problème comme résolu.

Mais cela n'empêche personne de proposer de nouvelles idées, il peut très bien y avoir d'autres techniques tout aussi valables ^^

Avec le temps grandit l'esprit...
Avec la vieillesse vient la sagesse...

Secret (cliquez pour afficher)
Et oui, c'est moi qui ait inventé ce dicton à la con :D .
Secret (cliquez pour afficher)
Non, je n'ai plus aucun secret à vous livrer :p .
Secret (cliquez pour afficher)
Mais faut vous le dire en quelle langue o_O J'AI PAS D'AUTRES SECRETS ! ! ! Votre curiosité vous perdra :colere:
.
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 168 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0336s (0.0163s)