Jeu de la vie C
Sargarmatha
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous,
Voila je doit rendre un programme en langage C intitulé le jeu de la vie
mais voila après compilation et exécution de mon programme j'obtiens un message d'erreur : "erreur de segmentation"
De plus dans ma fonction comptage j'ai fait afficher le compteur mais celui m'affiche des nombres totalement aberrants .... Je pense que l'erreur se trouve au niveau des indices
de mon tableau
Si quelqu'un pouvais m'aider, ça fait des jours que je cherche la solution ....
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// fonction d'initialisation qui remplit un automate
void tableau ( int tab[50][50],int tab2[50][50])
{
int i,j;
for (i=0; i<50; i=i+1)
{
for (j=0; j<50; j=j+1)
tab[i][j]=0;
tab2[i][j]=0;
}
}
void saisie (int tab[50][50])//Fonction qui permet la saisie de cellules vivantes
{
int i,j,d; int a = 1;
printf ("\n combien de valeurs voulez vous entrer ? : ");
scanf ("%d", &d);
for(a=1;a<=d;a++)
{printf ("\n Entrer une coordonnee verticale: ");
scanf ("%d", &i);
printf ("\n Entrer une coordonnee horizontale : ");
scanf ("%d", &j);
tab[i+1][j+1]=1;
}
}
//fonction qui permet d'afficher le tableau avec les nouvelles coordonnées
void affichage ( int tab[50][50])
{
int i,j;
for (i=0; i<50; i=i+1)
{ printf("\n");
for (j=0; j<50; j=j+1)
printf("%d ", tab[i+1][j+1]);
}
}
// fonction de compatge
int comptage(int tab[50][50],int tab2[50][50])
{
int i,j,a;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
a=0;
if((i==0)&&(j==0))
{a=tab[i][j+1]+tab[i+1][j]+tab[i+1][j+1];}
if((i==49)&&(j==49))
{ a=tab[i-1][j-1]+tab[i-1][j]+tab[i][j-1];}
if((i==0)&&(j==49))
{a=tab[i][j-1]+tab[i+1][j]+tab[i+1][j-1];}
if((i==49)&(j==0))
{ a=tab[i-1][j]+tab[i-1][j+1]+tab[i][j+1];}
if((i==0)&&(j!=49)&&(j!=0))
{a=tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j]+tab[i+1][j+1]+tab[i][j+1];}
if((j==0)&&(i!=49)&&(i!=0))
{a=tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j]+tab[i+1][j+1]+tab[i][j+1];}
if((j==49)&&(i!=49)&&(i!=0))
{a=tab[i-1][j]+tab[i-1][j-1]+tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j+1];}
if((i==49)&&(j!=49)&&(j!=0))
{a=tab[i+1][j-1]+tab[i][j-1]+tab[i][j]+tab[i][j+1]+tab[i+1][j+1];}
if((j!=0)&&(j!=49)&&(i!=49)&&(i!=0))
{a=tab[i-1][j]+tab[i-1][j-1]+tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j]+tab[i+1][j+1]+tab[i][j+1]+tab[i-1][j+1];
printf("%d", a );
if ((tab[i][j]==1) && (a==1 || 0)) //1er cas
{tab2[i][j]=0;}
if ((tab[i][j]==1) && (a == 2 || 3)) //2eme Cas
{tab2[i][j]=1;}
if ((tab[i][j]==1) && (a>= 4)) //3eme Cas
{tab2[i][j]=0;}
if ((tab[i][j]==0) && (a == 3)) // 4eem Cas
{tab2[i][j]=1;}
}
}
}
return a ;
}
//fonction arret
void arret(int tab[50][50],int tab2[50][50])
{
int i,j;
int c=0;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
c=c+tab2[50][50];
}
}
return c;
}
//programme principale
main ()
{
printf("\n\n\n\n\n\n" );
printf(" -=> Bienvenu dans le jeu de la vie <=-" );
printf("\n\n\n\n\n\n" );
int a,i,j;
int tab[50][50];
int tab2[50][50];
tableau(tab,tab2);
saisie(tab);
affichage(tab);
printf("\n\n" );
comptage(tab,tab2);
}
Voila je doit rendre un programme en langage C intitulé le jeu de la vie
mais voila après compilation et exécution de mon programme j'obtiens un message d'erreur : "erreur de segmentation"
De plus dans ma fonction comptage j'ai fait afficher le compteur mais celui m'affiche des nombres totalement aberrants .... Je pense que l'erreur se trouve au niveau des indices
de mon tableau
Si quelqu'un pouvais m'aider, ça fait des jours que je cherche la solution ....
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// fonction d'initialisation qui remplit un automate
void tableau ( int tab[50][50],int tab2[50][50])
{
int i,j;
for (i=0; i<50; i=i+1)
{
for (j=0; j<50; j=j+1)
tab[i][j]=0;
tab2[i][j]=0;
}
}
void saisie (int tab[50][50])//Fonction qui permet la saisie de cellules vivantes
{
int i,j,d; int a = 1;
printf ("\n combien de valeurs voulez vous entrer ? : ");
scanf ("%d", &d);
for(a=1;a<=d;a++)
{printf ("\n Entrer une coordonnee verticale: ");
scanf ("%d", &i);
printf ("\n Entrer une coordonnee horizontale : ");
scanf ("%d", &j);
tab[i+1][j+1]=1;
}
}
//fonction qui permet d'afficher le tableau avec les nouvelles coordonnées
void affichage ( int tab[50][50])
{
int i,j;
for (i=0; i<50; i=i+1)
{ printf("\n");
for (j=0; j<50; j=j+1)
printf("%d ", tab[i+1][j+1]);
}
}
// fonction de compatge
int comptage(int tab[50][50],int tab2[50][50])
{
int i,j,a;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
a=0;
if((i==0)&&(j==0))
{a=tab[i][j+1]+tab[i+1][j]+tab[i+1][j+1];}
if((i==49)&&(j==49))
{ a=tab[i-1][j-1]+tab[i-1][j]+tab[i][j-1];}
if((i==0)&&(j==49))
{a=tab[i][j-1]+tab[i+1][j]+tab[i+1][j-1];}
if((i==49)&(j==0))
{ a=tab[i-1][j]+tab[i-1][j+1]+tab[i][j+1];}
if((i==0)&&(j!=49)&&(j!=0))
{a=tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j]+tab[i+1][j+1]+tab[i][j+1];}
if((j==0)&&(i!=49)&&(i!=0))
{a=tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j]+tab[i+1][j+1]+tab[i][j+1];}
if((j==49)&&(i!=49)&&(i!=0))
{a=tab[i-1][j]+tab[i-1][j-1]+tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j+1];}
if((i==49)&&(j!=49)&&(j!=0))
{a=tab[i+1][j-1]+tab[i][j-1]+tab[i][j]+tab[i][j+1]+tab[i+1][j+1];}
if((j!=0)&&(j!=49)&&(i!=49)&&(i!=0))
{a=tab[i-1][j]+tab[i-1][j-1]+tab[i][j-1]+tab[i+1][j-1]+tab[i+1][j]+tab[i+1][j+1]+tab[i][j+1]+tab[i-1][j+1];
printf("%d", a );
if ((tab[i][j]==1) && (a==1 || 0)) //1er cas
{tab2[i][j]=0;}
if ((tab[i][j]==1) && (a == 2 || 3)) //2eme Cas
{tab2[i][j]=1;}
if ((tab[i][j]==1) && (a>= 4)) //3eme Cas
{tab2[i][j]=0;}
if ((tab[i][j]==0) && (a == 3)) // 4eem Cas
{tab2[i][j]=1;}
}
}
}
return a ;
}
//fonction arret
void arret(int tab[50][50],int tab2[50][50])
{
int i,j;
int c=0;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
c=c+tab2[50][50];
}
}
return c;
}
//programme principale
main ()
{
printf("\n\n\n\n\n\n" );
printf(" -=> Bienvenu dans le jeu de la vie <=-" );
printf("\n\n\n\n\n\n" );
int a,i,j;
int tab[50][50];
int tab2[50][50];
tableau(tab,tab2);
saisie(tab);
affichage(tab);
printf("\n\n" );
comptage(tab,tab2);
}
A voir également:
- Jeu de la vie C
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Logo jeu - Télécharger - Jeux vidéo
- Jeux de moto: jeu de course 3d - Télécharger - Course
14 réponses
tu serais pas en DUT info toi ? j'ai eu le même sujet la semaine derniere :-p
deja question, on vous a déja parler de l'allocation dynamique de memoire ?
(je regarde vite fais ton code et je te dis quoi ... )
deja question, on vous a déja parler de l'allocation dynamique de memoire ?
(je regarde vite fais ton code et je te dis quoi ... )
if ((tab[i][j]==1) && (a==1 || 0)) //1er cas if ((tab[i][j]==1) && (a == 2 || 3)) //2eme Cas
...
les condition m'embete, ecrit plutot (a==1 || a = 0) ou (a==2 || a==3)
la fonction arret, on dirai que tu ne l'utilise pas. c'est normal ?
(au passage, le code, tu le compile avec quoi ? )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
a ok ok, en gros au lieu de ce limité a un tableau de 50 par 50, tu aurais pu en faire un de taille "variable".
pour la fonction de comptage, je vais la tester, la flemme de tout lire si c'est pas necessaire, je te tiens au courant ;-)
pour la fonction de comptage, je vais la tester, la flemme de tout lire si c'est pas necessaire, je te tiens au courant ;-)
bon y a l'air d'avoir un bug sur le commentaire d'avant, je test ta fonction de comptage et je te tiens au courant !
( tu travaill sous windows ? linux ? mac ? autre ? )
( tu travaill sous windows ? linux ? mac ? autre ? )
Oui mais on nous a dit de nous limiter à 50 par 50, normalement la fonction de comptage est bonne je l'ai vérifié et revérifie mais on sais jamais .... : -) et là je travaille sur Windows
ok ok mais la fonction arret, je comprend pas son utilité ...
et au passage, t'aurais vu l'alloc' dynamique, je t'aurais bien refilé mon code, mais la tu vas rien comprendre :-s
et au passage, t'aurais vu l'alloc' dynamique, je t'aurais bien refilé mon code, mais la tu vas rien comprendre :-s
lol ... la fonction arrêt sert a rien pour le moment, ce sera pour dire au programme de s'arrête si le tableau et rempli de 0 ou de 1 mais elle est pas encore fini.
en remaniant un peu ton code ( Kate accepte de compilé ça ?! 0_o, de mon coté, gcc m'a inondé d'erreurs, y a fallu biduoiller un chouilla )
et moi, de mon coté, j'ai pas de segfault, mais l'affichage se passe mal pour la toute derniere case,
et moi, de mon coté, j'ai pas de segfault, mais l'affichage se passe mal pour la toute derniere case,
salut
une erreur de segmentation, c'est une erreur d'accès mémoire.
comme tu utilises des tableaux, c'est souvent lié au fait d'accéder à un indice de tableau interdit (du genre tab[123] si le tableau est de taille 50 )
j'ai donc cherché dans ton code ce qui pouvait poser problème à ce niveau et j'ai trouvé ça :
en gros
si i vaut 49, tu vas essayer d'afficher tab[50][xx] qui n'existe pas...
(idem pour j)
et enplus il manque une accolade, non ?
une erreur de segmentation, c'est une erreur d'accès mémoire.
comme tu utilises des tableaux, c'est souvent lié au fait d'accéder à un indice de tableau interdit (du genre tab[123] si le tableau est de taille 50 )
j'ai donc cherché dans ton code ce qui pouvait poser problème à ce niveau et j'ai trouvé ça :
for (i=0; i<50; i=i+1) { printf("\n"); for (j=0; j<50; j=j+1) printf("%d ", tab[i+1][j+1]); }
en gros
si i vaut 49, tu vas essayer d'afficher tab[50][xx] qui n'existe pas...
(idem pour j)
et enplus il manque une accolade, non ?