Correction du morpion en c
dr_melik
Messages postés
43
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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();
}
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();
}
A voir également:
- Correction du morpion en c
- Activer correction automatique android - Guide
- Telecharger clavier français avec correction - Télécharger - Divers Utilitaires
- Le correcteur automatique de votre smartphone vous rend fou ? Voici comment le désactiver - Accueil - Mobile
- Mode correction word - Guide
- Correction yeux rouges windows 10 - Télécharger - Retouche d'image
6 réponses
Salut,
Qu'est-ce qui ne va pas dans ton programme ? Erreur de compilation ? Ou erreur de fonctionnement (si oui, précise laquelle)
Cordialement
Qu'est-ce qui ne va pas dans ton programme ? Erreur de compilation ? Ou erreur de fonctionnement (si oui, précise laquelle)
Cordialement
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 ;)
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); }
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.
(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.
Je sais bien que c'est l'initialisation.
Mais regarde ton code de plus près.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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
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