Exercice en C
Franck
-
Franck -
Franck -
Bonjour,
J'ai un programme a faire en C mais je ni arrive pas, c'est sous visual C++, quelqu'n pourrais t-il m'aidais ou me donner la solution.
Enoncer:
Le jeu simule la vie des cellulesd du damier(naissance,survie, mort). La simulation repose sur quatres règles
*Une cellule continue a vivre si elle a deux ou trois cellules voisines
*Meurt d'isolement si elle a moins de deux voisines
*Meurt d'étouffement si elle a plus de trois cellules voisines
*Une cellule nait dans un case vide, si trois cases voisines exactement sont occupées.
Toutes les cellules du damier évoluent simultanément à chaque saut de génération
Une cellule = "X"
Le damier sera représenté en machine sous la forme d'un tableau a une dimension
Réaliser un programme principal permettant, à l'utilisateur du programme, la saisie du nombre de cycle, puis l'initialisation du damier, et enfin la génération de la visualisation, de l'état suivant du damier.
il faut les fonctions suivantes:
initialisation du damier
affichage du damier
nb de voisins d'une cellule
calcul de la génration suivantes
Voila mon travail deja réalisé
/* Directives */
#include <stdio.h>
#define LARGEUR (6)
#define HAUTEUR (4)
/* Prototypes*/
int index (int,int);
void affiche_damier (char[]);
/* Programme principal*/
void main ()
{
char damier[]=
"X....."
".X...."
"..X..."
"...X..";
affiche_damier(damier);
nb_voisins (1,1,damier);
}
/* sous-programme index*/
int index (int l, int c)
{
return (l*LARGEUR+c); /* renvoie la place de la cellule*/
}
/* Affiche Damier*/
void affiche_damier(char table1[])
{int i,j;
for(i = 0; i <= HAUTEUR -1; i++) /*Pour toutes les hauteurs*/
{ for(j = 0; j <= LARGEUR -1; j++) /*Pour toutes les lmargeurs*/
printf("%c",table1[index(i,j)]); /*affiche le contenu mémoire*/
printf("\n"); /*retour a la ligne*/
}
}
/* sous-programme nb voisins */
int nb_voisins (int l, int c, char table2[])
{int nb; nb=0; /* initialise le nombre de voisins*/
if (table2[(index(l,c)-1)]=="X")
nb=nb+1;
else if (table2[(index(l,c)+1)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
return (nb); /*renvoie le nombre de voisins*/
}
/* sous-programme génération */
Meci a vous
J'ai un programme a faire en C mais je ni arrive pas, c'est sous visual C++, quelqu'n pourrais t-il m'aidais ou me donner la solution.
Enoncer:
Le jeu simule la vie des cellulesd du damier(naissance,survie, mort). La simulation repose sur quatres règles
*Une cellule continue a vivre si elle a deux ou trois cellules voisines
*Meurt d'isolement si elle a moins de deux voisines
*Meurt d'étouffement si elle a plus de trois cellules voisines
*Une cellule nait dans un case vide, si trois cases voisines exactement sont occupées.
Toutes les cellules du damier évoluent simultanément à chaque saut de génération
Une cellule = "X"
Le damier sera représenté en machine sous la forme d'un tableau a une dimension
Réaliser un programme principal permettant, à l'utilisateur du programme, la saisie du nombre de cycle, puis l'initialisation du damier, et enfin la génération de la visualisation, de l'état suivant du damier.
il faut les fonctions suivantes:
initialisation du damier
affichage du damier
nb de voisins d'une cellule
calcul de la génration suivantes
Voila mon travail deja réalisé
/* Directives */
#include <stdio.h>
#define LARGEUR (6)
#define HAUTEUR (4)
/* Prototypes*/
int index (int,int);
void affiche_damier (char[]);
/* Programme principal*/
void main ()
{
char damier[]=
"X....."
".X...."
"..X..."
"...X..";
affiche_damier(damier);
nb_voisins (1,1,damier);
}
/* sous-programme index*/
int index (int l, int c)
{
return (l*LARGEUR+c); /* renvoie la place de la cellule*/
}
/* Affiche Damier*/
void affiche_damier(char table1[])
{int i,j;
for(i = 0; i <= HAUTEUR -1; i++) /*Pour toutes les hauteurs*/
{ for(j = 0; j <= LARGEUR -1; j++) /*Pour toutes les lmargeurs*/
printf("%c",table1[index(i,j)]); /*affiche le contenu mémoire*/
printf("\n"); /*retour a la ligne*/
}
}
/* sous-programme nb voisins */
int nb_voisins (int l, int c, char table2[])
{int nb; nb=0; /* initialise le nombre de voisins*/
if (table2[(index(l,c)-1)]=="X")
nb=nb+1;
else if (table2[(index(l,c)+1)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
nb=nb+1;
else if (table2[index(l,c)]=="X")
return (nb); /*renvoie le nombre de voisins*/
}
/* sous-programme génération */
Meci a vous
A voir également:
- Exercice en C
- Transmath 3eme exercice ✓ - Forum Études / Formation High-Tech
- Corrigé d'un exercice du livre transmaths 3e - Forum Loisirs / Divertissements
- Fleur d'encre 5eme corrigé exercice - Forum PDF
- Corrigés 350 exercices niveau moyen ✓ - Forum Loisirs / Divertissements
- Livre du professeur 5eme fleur d'ancre ✓ - Forum PDF
2 réponses
Fais une structure de damier formée d'un tableau de tableau (une matrice donc) :
Truc dans le genre. C'est fait à l'arrache et tu peux faire beaucoup mieux en C++ mais bon apparemment tu veux le faire en C... Donc va pour du C ;-)
//define pour le devenir d'une case #define ETOUFFEMENT 1 #define SURVIE 2 #define ISOLEMENT 3 #define RESTE_MORTE 4 #define NAISSANCE 5 //define pour l'état actuel d'une case #define EN_VIE 6 #define MORTE 7 #include <stdlib.h> #include <stdio.h> struct damier{ int** data; //les cases contiennent EN_VIE ou MORTE unsigned int nb_ligne; unsigned int nb_colonne; }; //initialise un damier avec toute les cases à l'état MORTE damier *new_damier(unsigned int nb_ligne,unsigned int nb_colonne){ unsigned int i; damier *d=(damier *)malloc(sizeof(struct damier)); d->data=(int **)malloc(nb_ligne*sizeof(int*)); for(i=0;i<nb_ligne;++i){ d->data[i]=(int *)malloc(nb_colonne*sizeof(int)); d->data[i][j]=MORTE; } } unsigned int get_nb_ligne(damier d){ return d.nb_ligne; } unsigned int get_nb_colonne(damier d){ return d.nb_colonne; } //Change la valeur d'une cellule (MORTE ou EN_VIE) set(damier *d,unsigned int indice_ligne,unsigned int indice_colonne, int etat){ d->data[indice_ligne][indice_colonne]=etat; } //Retourne l'état d'une case int get(damier d,unsigned int indice_ligne,unsigned int indice_colonne){ return d.data[indice_ligne][indice_colonne]; } //Etat de d[ndice_ligne][indice_colonne] à la prochaine itération //Retourne l'état de la cse à la prochaine itération (ETOUFFEMENT,...) int etat_suivant_cellule(damier d,unsigned int indice_ligne,unsigned int indice_colonne){ //c'est ici que les règles de survie etouffement...interviennent } //Affiche un damier void show_damier(damier d){ unsigned int nbl=get_nb_ligne(d); unsigned int nbc=get_nb_colonne(d); for(lcur=0;lcur<nbl;++lcur){ for(ccur=0;ccur<nbc;++ccur){ printf("%d\t",get(d,lcur,ccur)); } printf("\n"); } } //Calcule le prochain damier damier etat_suivant_damier(damier d){ unsigned int lcur,ccur; unsigned int nbl=get_nb_ligne(d); unsigned int nbc=get_nb_colonne(d); damier * res=new_damier(nbl,nbc); for(lcur=0;lcur<nbl;++lcur){ for(ccur=0;ccur<nbc;++ccur){ set(res,lcur,ccur,etat_suivant_cellule(d,lcur,ccur); } } return res; } int main(){ //... }
Truc dans le genre. C'est fait à l'arrache et tu peux faire beaucoup mieux en C++ mais bon apparemment tu veux le faire en C... Donc va pour du C ;-)