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 Loisirs / Divertissements
- Corrigés 350 exercices niveau moyen ✓ - Forum Loisirs / Divertissements
- Cahier transmath 3° ex 6p37, 6et7p27 et 5p65 svp c'est urgent! ✓ - Forum Études / Formation High-Tech
- Le corrigé de cet exercice - Forum Programmation
- Fleur d'encre 5eme corrigé exercice ✓ - 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 ;-)