Posez votre question Signaler

Correction du morpion en c

dr_melik 46Messages postés 18 janvier 2008Date d'inscription - Dernière réponse le 17 févr. 2008 à 15:17
Bonjour,
svp j'ai fait un programme du morpion en c mais i y a eu des fautes que je n'ai pas pu les corriger,
donc svp qui peut m'aider à trouver la solution est me donner la correction.
cé urgent
#include<stdio.h>
#include<conio.h>
#define Lmax 3
#define Cmax 3
typedef int tab[Lmax][Cmax];
tab t;
void Miseazero(tab t)
{
int i,j ;
for(i=0;i<Lmax;i++)
for(j=0;j<Cmax;j++)
t[i][j]=0;
}
void affichetableau(tab t)
{
int i,j;
for(i=0;i<Lmax;i++){
for(j=0;j<Cmax;j++)
printf("%d ",t[i][j]);
printf("\n\n\n");
}
}
int coupvalide(tab t,int a,int b)
{
int trouve=0;
if(t[a][b]==0)
trouve=1;
else trouve=0;
return(trouve);
}
int ver(tab t)
{
int i,j,cond=0;
do
{
j=0;
for(i=0;i<Lmax;i++)
if (t[i][j]==1||t[i][j]==2)
cond=1;
j++;
}
while(j<3);
return(cond);
}
int lignehor(tab t)
{
int i,j,cond=0;
do
{
i=0;
for(j=0;j<Cmax;j++)
if(t[i][j]==1||t[i][j]==2)
cond=1;
i++;
}
while(i<3);
return(cond);
}
int lignediagD(tab t)
{
int i,cond=0;
for(i=0;i<Lmax;i++)
if(t[i][i]==1||t[i][i]==2)
cond=1;
return(cond);
}
int lignediagG(tab t)
{
int i,j,cond=0;
for(i=0;i<Lmax;i++)
for(j=2;j<1;j--)
if(t[i][j]==1||t[i][j]==2)
cond=1;
return(cond);
}
int saisieval(tab t,int a,int b,int numjoueur)
{
int cond=0;
if(coupvalide(t,a,b)==1)
{
t[a][b]=numjoueur;
cond=1;
}
else
cond=0;
return(cond);
}
void main()
{
int l,c,a,b,i=1;
clrscr();
Miseazero(t);
affichetableau(t);
getch();
do
{
if(i%2==1)
{
do{
printf("le joueur1 joue");
printf("\n taper l :");
scanf("%d",&l);
printf("\n taper c :");
scanf("%d",&c);
}
while((saisieval(t,l,c,1)==0)||((l>3)&&(c>3)));
affichetableau(t);
}else
{
do{
printf("le joueur2 joue");
printf("\n taper a :");
scanf("%d",&a);
printf("\n taper b :");
scanf("%d",&b);
}while((saisieval(t,a,b,2)==0)||((a>3)&&(b>3)));
affichetableau(t);
}
i++;
}
while((i<10)&&(ver(t)==0)&&(lignehor(t)==0)&&(lignediagD(t)==0)&&(lignediagG(t)==0));
if(i==9) printf("execo");
else if((i-1)%2==1) printf("le joueur1 a gagner");
else if((i-1)%2==0) printf("le joueur2 a gagner");
getch();
}
Lire la suite 

Correction du morpion en c »

6 réponses
Réponse
+0
moins plus
Salut,

Qu'est-ce qui ne va pas dans ton programme ? Erreur de compilation ? Ou erreur de fonctionnement (si oui, précise laquelle)

Cordialement
Ajouter un commentaire
Réponse
+0
moins plus
Re,
En fait, j'ai vu des choses bizarres dans ton code. Tu as mis i=0, dans la boucle do while(i<3). Je pense donc que ton programme devait rester indéfiniment dans une fonction. Je te corrige la fonction, je te laisse rectifier les autres fonctions qui ont la même erreur.
De plus, ta condition pour voir si trois pièces d'une même couleur sont alignées, sont fausses. Je te laisse y réfléchir dessus, si tu trouves vraiment pas, repasse sur le forum, on t'aidera ;)

int lignehor(tab t)
{
  int i,j,cond=0;
  i=0;
  do
    {
      for(j=0;j<Cmax;j++)
	if(t[i][j]==1||t[i][j]==2)
	  cond=1;
      i++;
    }
  while(i<3);
  return(cond);
}
Ajouter un commentaire
Réponse
+0
moins plus
salut,mais désolé je n'ai pas compris la faute
(i=0) c'est une initialisation et tu vois qu'après je l'ai incrémenté :

for(j=0;j<Cmax;j++)
if(t[i][j]==1||t[i][j]==2)
cond=1;
i++;
et j'espère que tu me donne la correction le plus tot que possible et merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
Je sais bien que c'est l'initialisation.
Mais regarde ton code de plus près.
int ver(tab t)
{
    int i,j,cond=0;
    do
    {
         j=0;
        for(i=0;i<Lmax;i++)
        if (t[i][j]==1||t[i][j]==2)
            cond=1;
        j++;
    }
    while(j<3);
    return(cond);
} 

Tu définis j=0, dans la boucle do while. Donc ton code va incrémenter j, puis mettre j à 0, puis incrémenter j, puis mettre j à 0.
Il faut donc que tu sortes j de la boucle do while. Regarde mon post précédent, je t'ai apporté la correction.
Sinon je t'ai demandé quelles étaient tes erreurs ? Compilation, erreur de fonctionnement, ...
Et je te maintiens toujours que tes fonctions pour vérifier s'il y a un gagnant sont fausses.

Et enfin, lorsque tu postes un code, utilise la touche "conservation automatique du code" à droite du bouton "souligné". Et indente ton code, car c'est illisible. Merci

Cordialement
Ajouter un commentaire
Réponse
+0
moins plus
merci mais j'ai un problème au niveau de cette ligne
void main()
{
int l,c,a,b,i=1;
clrscr();
Miseazero(t);
affichetableau(t);
getch();
ainsi que pour le test du gagnant.et merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
Tu as un problème, c'est vague. Erreur de compilation ? Et mets ton message d'erreur. Si tu mets pas ça, on pourra pas trop t'aider.
Le test du gagnant, tu dois vérifier si trois cases sont alignées. Par exemple : if( t[0][0]==t[0][1] && t[0][0]==t[0][2] && t[0][0]!=0) printf("aligné");

Cordialement
Ajouter un commentaire
Ce document intitulé « correction du morpion en c » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?