Jeu Vache Taureau

Jeu Vache Taureau - C - Programmation

Marsh Posté le 31-10-2012 à 09:11:21    

il y'a des erreurs de compilation que je n'arrive pas à les résoudre :((((((
j'arrive pas à écrire le processus du jeu moyennant les fonctions que j'ai réalisé
voila mon essai:
 

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. int InitialiserTableau(int sol[])
  6. {
  7.     int sol[4],n_hazard,k,l,h,m,p;
  8.     do
  9.       {
  10.         n_hazard=rand()%(10000);
  11.         h=n_hazard;
  12.         k=(h/1000);
  13.         l=((h/100)%10);
  14.         m=((h/10)%10);
  15.         p=(h%10);
  16.         sol[0]=p;
  17.         sol[1]=m;
  18.         sol[2]=l;
  19.         sol[3]=k;
  20.       }
  21.     while((k==0)||(k==l)||(k==m)||(k==p)||(l==m)||(l==p)||(m==p));
  22.     return h;
  23. }
  24. int LireEssai(int essai[])
  25. {
  26.     int essai[4],n1,l1,m1,p1,k1;
  27.     printf("donner un essai de 4 chiffres de la forme WXYZ et tel que W>0:\n" );
  28.     scanf("%d",&n1);
  29.     k1=(n1/1000);
  30.     l1=((n1/100)%10);
  31.     m1=((n1/10)%10);
  32.     p1=(n1%10);
  33.     essai[0]=p1;
  34.     essai[1]=m1;
  35.     essai[2]=l1;
  36.     essai[3]=k1;
  37.     if((k1==0)||(k1==l1)||(k1==m1)||(k1==p1)||(l1==m1)||(l1==p1)||(m1==p1)||((n1/10000)!=0))
  38.     {
  39.        printf("nombre refus, \n" );
  40.        return 0;
  41.     }
  42.     else
  43.        return n1;
  44. }
  45. int Nb_Vache(int sol[],int essai[])
  46. {
  47.     int j,i,vache;
  48.     vache=0;
  49.     for(i=0;i<4;i++)
  50.     {
  51.        for(j=0;j<4;j++)
  52.        {
  53.            if(sol[i]==essai[j])
  54.            if(i!=j)
  55.            {
  56.               vache++;
  57.            }
  58.        }
  59.     }
  60.    return vache;
  61. }
  62. int NB_Taureau(int sol[],int essai[])
  63. {
  64.     int i,taureau=0;
  65.     for(i=0;i<4;i++)
  66.     {
  67.        if(sol[i]==essai[i])
  68.        taureau++;
  69.     }
  70.     return taureau;
  71. }
  72. int Afficher_Resultat_Essai( int essai[])
  73. {
  74.     int n1,mille_n1,cent_n1,dix_n1,un_n1,k1,l1,m1,p1,T,V;
  75.     n1=LireEssai(essai[]);
  76.     mille_n1=n1/1000;
  77.     cent_n1=(n1%1000)/100;
  78.     dix_n1=((n1%1000)%100)/10;
  79.     un_n1=((n1%1000)%100)%10;
  80.     if(mille_n1==k1)
  81.     T=1;
  82.     else if((mille_n1==l1)||(mille_n1==m1)||(mille_n1==p1))
  83.     V=1;
  84.     if(cent_n1==l1)
  85.     T=T+1;
  86.     else if((cent_n1==k1)||(cent_n1==m1)||(cent_n1==p1))
  87.     V=V+1;
  88.     if(dix_n1==m1)
  89.     T=T+1;
  90.     else if((dix_n1==k1)||(dix_n1==l1)||(dix_n1==p1))
  91.     V=V+1;
  92.     if(un_n1==p1)
  93.     T=T+1;
  94.     else if((un_n1==k1)||(un_n1==l1)||(un_n1==m1))
  95.     V=V+1;
  96. }
  97. void main()
  98. {
  99.   int t1,t2,sol[4],essai[4],i,V=0,T=0,x;
  100.   t1=InitialiserTableau(sol);
  101.   t2=LireEssai(essai);
  102.   printf("Tapez un essai de 4 chiffres \n" );
  103.   getch();
  104.   if(i==0)
  105.   scanf("%d",&t2);
  106.   i=i+1;
  107.   V=Nb_Vache(t1,t2);
  108.   T=NB_Taureau(t1,t2);
  109.   Afficher_Resultat_Essai(t2);
  110.   while(T<4);
  111.   getch();
  112. }


Message édité par sabeurios89 le 31-10-2012 à 09:12:40
Reply

Marsh Posté le 31-10-2012 à 09:11:21   

Reply

Marsh Posté le 31-10-2012 à 09:54:16    

Vous auriez pu copier les erreurs, cela aurait été plus simple pour nous :)
 
* Ligne 8  : vous redéfinissez une variable qui a le même nom que le paramètre de la fonction (sol)
 
* Ligne 27  : vous redéfinissez une variable qui a le même nom que le paramètre de la fonction (sol)
 
* Ligne 76 : pour passer un tableau en paramètre, il ne faut indiquer que le nom de la variable ("LireEssai(essai)" )
 
* Ligne 108 & 109 & 110 : Vous passez des entiers à des fonctions qui attendent des tableaux en paramètres
 
* La fonction "Afficher_Resultat_Essai" ne renvoie pas de valeurs (ce qui n'est pas forcément étonnant vu son nom, par ailleurs très mal choisi car elle n'affiche rien ...), mais elle est déclarée "int"
 
Une fois cela corrigé, cela compile (la bonne exécution sera (éventuellement) une autre paire de manches, au vu du nombre de variables qui sont utilisées avant d'être initialisées ...  :D )
 
Par exemple, l'instruction en ligne 122 a de bonnes chances de générer une boucle infinie (si T < 4).


Message édité par Farian le 31-10-2012 à 09:56:07
Reply

Marsh Posté le 31-10-2012 à 10:57:24    

Merci Fabian ça m'a beaucoup aidé surtout à comprendre mes fautes mais je veux vous signaler que je suis encore débutant(j'ai seulement 2 mois que je fais la programmation) donc veuillez tester et corriger mes erreurs afin d'avoir un code parfaitement exécutable parce que malgrès votre aide la compilation contient encore des erreurs que je n'arrive pas à les résoudre

Reply

Marsh Posté le 31-10-2012 à 11:06:49    

Si je comprends bien, vous envoyez un code qui ne compile pas, et qui ne fonctionnera sans doute pas (aucune attaque dans cette phrase, c'est à peu près toujours le cas pour le premier jet d'un programme) et vous demandez aux forumeurs de vous fournir un code qui marche parfaitement ? En laissant le soin aux-dits forumeurs de deviner, à partir du code, ce que doit faire le programme (si j'ai bien compris c'est une sorte de "Mastermind" avec 4 "slots" ) ?
 
Si c'est le cas, je vais passer mon tour et laisser une éventuelle bonne âme se charger de ce boulot.
 
Maintenant si vous vous servez des aides apportées pour avancer dans l'élaboration de votre programme et revenez plus tard pour régler d'autres points, là ok, je suis prêt à vous apporter mon aide.
 
Par exemple, vous me dites que votre programme ne compile toujours pas, malgré les modifications que vous avez apportées. Ok ! Mais quelles sont ces modifications ? Quelles sont les erreurs que vous avez ? J'ai fait l'exercice tout à l'heure d'apporter des corrections à chacun des points que je vous ai listés et, chez moi, le programme compilait ...
 
Pour l'exécution, ce sera un autre problème, il faudra sans doute revoir des bouts d'algorithmes.
 
Pour résumer, montrez-nous les progrès que vous réalisez, on vous aidera à aller un peu plus loin et à résoudre par vous-même les différents problèmes rencontrés.

Reply

Marsh Posté le 31-10-2012 à 12:26:01    

Code :
  1. void main()
  2. {
  3.   int t1,t2,sol[4],essai[4],i,V=0,T=0,x;
  4.   t1=InitialiserTableau(sol);
  5.   t2=LireEssai(essai);
  6.   printf("Tapez un essai de 4 chiffres \n" );
  7.   getch();
  8.   if(i==0)
  9.   scanf("%d",&t2);
  10.   i=i+1;
  11.   V=Nb_Vache(t1,t2);
  12.   T=NB_Taureau(t1,t2);
  13.   Afficher_Resultat_Essai(t2);
  14.   while(T<4);
  15.   getch();
  16. }


 
La logique de ce genre de jeux ça doit être:
1) Initialiser le jeu
2) boucler sur
   a) faire jouer l'utilisateur
   b) évaluer sa réponse  
   continuer si on n'a pas évalué sa réponse comme juste
3) demander s'il veut rejouer et retourner en 1 si oui.
 
Ici, déjà, vous évaluez la réponse avant de la demander, ça peut surement pas marcher.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 31-10-2012 à 12:56:58    

En fait si, car LireEssai fait déjà une demande à l'opérateur,  (et le fait qu'une proposition invalide soit saisie est mal géré).
 
De même, Afficher_Resultat_Essai appelle Lire_Essai, ce qui redemande à l'opérateur une valeur ...
 
Globalement à peu près tout le code est là, mais il y a du boulot pour remettre tout ça en forme (et gérer les cas d'erreurs).
 
Ensuite, si on veut optimiser/faire du code plus propre, il y a moyen aussi :D

Reply

Marsh Posté le 31-10-2012 à 15:11:18    

Citation :

En fait si, car LireEssai fait déjà une demande à l'opérateur,

Ah oui, j'avais pas fait gaffe :lol:  
 

Citation :

Globalement à peu près tout le code est là, mais il y a du boulot pour remettre tout ça en forme

Certes oui.
Déjà, il faudrait qu'il apprenne à mettre des { et } autour des blocs allant avec un if ou un while...
 
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed