Programmation du jeu de la vie
Fermé
#include#1
Messages postés
6
Date d'inscription
dimanche 7 septembre 2014
Statut
Membre
Dernière intervention
8 septembre 2014
-
7 sept. 2014 à 19:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 sept. 2014 à 14:03
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 sept. 2014 à 14:03
A voir également:
- Programmation du jeu de la vie
- 94 jeu - Télécharger - Puzzle & Réflexion
- Application de programmation - Guide
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu du pendu - Télécharger - Vie quotidienne
9 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
8 sept. 2014 à 08:07
8 sept. 2014 à 08:07
Bonjour,
"je ne sais meme pas par ou commencer"
Commence par lire les consignes...
Question 4. Écrire une procédure SortirDamier
Question 5. Écrire une procédure NombreVoisin à trois paramètres
Question 6. Écrire une procédure Transfert à deux paramètres
Question 7. écrivez une procédure GénérationSuivante
Tout est prémâché pour y aller progressivement, tu n'as même pas à réfléchir par où commencer, tu as juste à suivre les étapes les unes après les autres...
Voir aussi : Demander de l'aide pour vos exercices sur CCM
"je ne sais meme pas par ou commencer"
Commence par lire les consignes...
Question 4. Écrire une procédure SortirDamier
Question 5. Écrire une procédure NombreVoisin à trois paramètres
Question 6. Écrire une procédure Transfert à deux paramètres
Question 7. écrivez une procédure GénérationSuivante
Tout est prémâché pour y aller progressivement, tu n'as même pas à réfléchir par où commencer, tu as juste à suivre les étapes les unes après les autres...
Voir aussi : Demander de l'aide pour vos exercices sur CCM
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 19/09/2014 à 14:04
Modifié par fiddy le 19/09/2014 à 14:04
Bonjour,
Tu n'as pas tenu compte de mes remarques... Je te conseille donc de relire mon post.
Et tu n'as toujours pas répondu à la question : c'est du C ou du C++ que tu veux faire ?
je te conseille vraiment de suivre un tuto : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c et de tout reprendre...
N'hésite pas si tu as des questions sur des chapitres que tu ne comprends pas.
Et merci la prochaine fois d'utiliser la balise "code c". Par exemple :
<"code c">
ici tu mets ton code
<"/code">
(sans les guillemets)
Cdlt,
Google is your friend
Tu n'as pas tenu compte de mes remarques... Je te conseille donc de relire mon post.
Et tu n'as toujours pas répondu à la question : c'est du C ou du C++ que tu veux faire ?
je te conseille vraiment de suivre un tuto : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c et de tout reprendre...
N'hésite pas si tu as des questions sur des chapitres que tu ne comprends pas.
Et merci la prochaine fois d'utiliser la balise "code c". Par exemple :
<"code c">
ici tu mets ton code
<"/code">
(sans les guillemets)
Cdlt,
Google is your friend
#include#1
Messages postés
6
Date d'inscription
dimanche 7 septembre 2014
Statut
Membre
Dernière intervention
8 septembre 2014
Modifié par Whismeril le 8/09/2014 à 07:12
Modifié par Whismeril le 8/09/2014 à 07:12
voici le debut de mon programme il contient 2 procedure (initialiser et entrer les coordonnées des cellule vivante) pour ce qui est de reste je ne sais meme pas par ou commencer:
qu'en pensez vous ??
#include<stdio.h> #include<conio.h> int main() { int i,j; char damier[10][10]; void initblanc ( char damier,int i,int j); { for (i=1;i<10;i++) { for (j=1;j<10;j++); { damier[i][j]=" " ; } } } void initcoordonnées (char damier,int a,int b); { int a,b; printf("donner le nombre de la ligne \n"); scanf("%d",&a); printf("donner le nombre de la colonne \n"); scanf("%d",&b); damier[a][b]="*"; } } int main() { initblanc(); initcoordonnées(); }
qu'en pensez vous ??
Utilisateur anonyme
8 sept. 2014 à 07:13
8 sept. 2014 à 07:13
Bonjour, message modifié par l'ajout des balises de code.
Voir ici comment bien utiliser la coloration syntaxique.
Voir ici comment bien utiliser la coloration syntaxique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
#include#1
Messages postés
6
Date d'inscription
dimanche 7 septembre 2014
Statut
Membre
Dernière intervention
8 septembre 2014
8 sept. 2014 à 13:55
8 sept. 2014 à 13:55
merci
#include#1
Messages postés
6
Date d'inscription
dimanche 7 septembre 2014
Statut
Membre
Dernière intervention
8 septembre 2014
8 sept. 2014 à 14:02
8 sept. 2014 à 14:02
est ce que quelqu'un pourrait m'expliquer plus clairement ce qu'on attend de moi dans cette question:
Écrire une procédure SortirDamier qui sort le contenu de Damier à la manière d'un affichage écran. Ce sous-programme suppose que : a) Les sorties de l'ordre Sortir se concatènent les unes derrière les autres pour former une ligne, b) Pour faire poursuivre l'affichage à la ligne suivante de l'écran, on dispose de l'instruction Aller_à_la_ligne.
Écrire une procédure SortirDamier qui sort le contenu de Damier à la manière d'un affichage écran. Ce sous-programme suppose que : a) Les sorties de l'ordre Sortir se concatènent les unes derrière les autres pour former une ligne, b) Pour faire poursuivre l'affichage à la ligne suivante de l'écran, on dispose de l'instruction Aller_à_la_ligne.
JwTd
Messages postés
43
Date d'inscription
jeudi 15 mars 2012
Statut
Membre
Dernière intervention
15 octobre 2022
1
8 sept. 2014 à 14:03
8 sept. 2014 à 14:03
Salut, tu as créé ta fonction avec des arguments donc il faut appeler la fonction avec tous les arguments requis.
Lorsqu'on n'a pas besoin d'entrer ou sortir une variable d'une fonction, inutile des crée en tant qu'arguments, les créer à l'intérieur de la fonction suffit.
Tu n'as le droit d'avoir qu'une seule fonction main() dans ton programme.
Par contre dans ton code tu ne mets les coordonnées que d'une cellule, il te faudra mettre ça dans un algo pour mettre plusieurs coordonnées.
Pour afficher le tableau sa sera presque comme pour l'écrire.
Lorsqu'on n'a pas besoin d'entrer ou sortir une variable d'une fonction, inutile des crée en tant qu'arguments, les créer à l'intérieur de la fonction suffit.
Tu n'as le droit d'avoir qu'une seule fonction main() dans ton programme.
void fonction1(int a) // une fonction avec un argument de type int { int b=1; a=a+b; } main() { int chiffre=0; fonction1(chiffre); /*maintenant chiffre = 1 car la variable chiffre a été passé en argument de fonction1 et fonction1 l'a modifié. */ }
Par contre dans ton code tu ne mets les coordonnées que d'une cellule, il te faudra mettre ça dans un algo pour mettre plusieurs coordonnées.
Pour afficher le tableau sa sera presque comme pour l'écrire.
#include#1
Messages postés
6
Date d'inscription
dimanche 7 septembre 2014
Statut
Membre
Dernière intervention
8 septembre 2014
8 sept. 2014 à 15:01
8 sept. 2014 à 15:01
merci beaucoup =)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 sept. 2014 à 11:45
13 sept. 2014 à 11:45
Ce n'est pas main() mais int main(void). Il faut préciser l'int devant le main().
/*maintenant chiffre = 1 car la variable chiffre a été passé en argument de fonction1 et fonction1 l'a modifié. */
Absolument pas. Il faut passer par le pointeur si tu veux faire ça.
Par exemple :
Et enfin, il ne faut pas oublier le return 0; pour dire que le programme s'est bien déroulé.
Cdlt,
/*maintenant chiffre = 1 car la variable chiffre a été passé en argument de fonction1 et fonction1 l'a modifié. */
Absolument pas. Il faut passer par le pointeur si tu veux faire ça.
Par exemple :
void fonction1(int *a) // une fonction avec un argument de type int { int b=1; *a=*a+b; } int main(void) { int chiffre=0; fonction1(&chiffre); /*maintenant chiffre = 1 car la variable chiffre a été passé en argument de fonction1 et fonction1 l'a modifié. */ return 0; }
Et enfin, il ne faut pas oublier le return 0; pour dire que le programme s'est bien déroulé.
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 sept. 2014 à 11:42
13 sept. 2014 à 11:42
Bonjour,
Tu parles de C ou de C++ ?
Car le code que tu as montré est du C et non du C++...
Sinon, je corrige les erreurs de ton premier code :
void initblanc ( char damier,int i,int j);
Ta fonction prend donc 3 arguments...
Et pourtant, tu l'appelles : initblanc(); sans mettre les arguments.
Il faut que les deux soient cohérents.
damier n'est pas un char. Il faut mettre initblanc(char damier[10][10])
J'ai enlevé aussi i et j, car ce n'est pas propre. C'est mieux de te définir des variables locales à la fonction.
De même pur : initcoordonnées()
De plus, pas d'accent dans les noms en C...
Tu as mis 2 main() dans ton code... Il n'en faut qu'un.
for (i=1;i<10;i++)
En C, les tableaux commencent à l'indice 0. Donc plutôt : i=0;i<10;i++.
De même pour j.
damier[i][j]=" " ;
damier[a][b]="*";
Attention, "..." est de type char* et damier[i][j] de type char. Si tu veux mettre un caractère, il faut faire :
Et enfin n'oublie pas le return 0; en fin de main().
N'hésite pas à reposter ton code avec les corrections pour qu'on te dise si c'est bien corrigé ou s'il reste des erreurs. :-).
Tu parles de C ou de C++ ?
Car le code que tu as montré est du C et non du C++...
Sinon, je corrige les erreurs de ton premier code :
void initblanc ( char damier,int i,int j);
Ta fonction prend donc 3 arguments...
Et pourtant, tu l'appelles : initblanc(); sans mettre les arguments.
Il faut que les deux soient cohérents.
damier n'est pas un char. Il faut mettre initblanc(char damier[10][10])
J'ai enlevé aussi i et j, car ce n'est pas propre. C'est mieux de te définir des variables locales à la fonction.
De même pur : initcoordonnées()
De plus, pas d'accent dans les noms en C...
Tu as mis 2 main() dans ton code... Il n'en faut qu'un.
for (i=1;i<10;i++)
En C, les tableaux commencent à l'indice 0. Donc plutôt : i=0;i<10;i++.
De même pour j.
damier[i][j]=" " ;
damier[a][b]="*";
Attention, "..." est de type char* et damier[i][j] de type char. Si tu veux mettre un caractère, il faut faire :
damier[i][j]=' 'apostrophes au lieu de guillemets.
Et enfin n'oublie pas le return 0; en fin de main().
N'hésite pas à reposter ton code avec les corrections pour qu'on te dise si c'est bien corrigé ou s'il reste des erreurs. :-).
voici se que j'ai pu codé:
#include<stdio.h>
#include<conio.h>
main()
{
int i,j;
char damier[10][10];
void initblanc ( char damier,int i,int j);
{
for (i=1;i<10;i++)
{
for (j=1;j<10;j++);
{
damier[i][j]= ;
}
}
}
void initcoordonnées (int a,int b);
{
int a,b;
printf("donner le nombre de la ligne ");
scanf("%i",&a);
printf("donner le nombre de la colonne");
scanf("%i",&b);
damier[a][b]=*;
}
}
void sortirdamier (int i,int j,damier[i][j])
{
int n = 0;
for (i=1,i<10,i++)
{
for (j=1,j<10,j++)
{
printf("%c & %c ",damier[i][j],damier[i][j+1]);
}
printf("/n %c & %c",damier[i+1][j],damier[i+1][j+1]);
}
}
void nbrvoisins (int i,int j, int n)
{
for (i=2,i<9,i++)
{
for (j=2,j<9,j++)
if (damier[i-1][j-1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j+1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
else if (damier[i][j-1]=*)
{n=n+1;
}
else
{n=n;
}
}
}
for (i=1,i<2,i++)
{
for (j=2,j<10,j++)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
if (damier[i+1][j+1]=*)
{n=n+1;
}
else
{n=n;
}
}
}
for (i=10,i<=10,i++)
{ for (j=2,j<10,j++)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j-1]=*)
{n=n+1;
}
if (damier[i-1][j+1]=*)
{n=n+1;
}
else
{n=n;
}
}
for (j=1,j<2,i++)
{ for (i=2,j<10,j++)
{
if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j+1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
Else
{ n=n;
}
for (j=10,j<=10,i++)
{ for (i=2,i<10,j++)
{
if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j-1]=*)
{n=n+1;
}
else if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
Else
{n=n;
}
}
}
if(i=1,j=1)
{
if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
if(i=1,j=10)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
if(i=10,j=10)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i-1][j-1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
if(i=10,j=1)
{
if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i-1][j+1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
void transfert(damier[10][10],damier2[10][10], int i,int j)
{
Char damier2[10][10]
for (i=1,i<10,i++)
{
for (j=1,j<10,j++)
{
damier[i][j]=damier2[i][j];
}
}
}
void generationsuivante (int i,int j,damier[10][10])
{
for (i=1,i<10,i++)
{
for (j=1,j<10,j++)
{
int nbrvoisin (int i, int j)
if (n=2)
{
damier[i][j]=*;
}
else if (n=3)
{
damier[i][j]=*;
}
else
damier[i][j]= ;
}
}
}
Int main ()
{
Initblanc() ;
Initcoordonnées() ;
Nbrvoisin() ;
Transfert() ;
Sortirdamier() ;
Generation suivante() ;
}
#include<stdio.h>
#include<conio.h>
main()
{
int i,j;
char damier[10][10];
void initblanc ( char damier,int i,int j);
{
for (i=1;i<10;i++)
{
for (j=1;j<10;j++);
{
damier[i][j]= ;
}
}
}
void initcoordonnées (int a,int b);
{
int a,b;
printf("donner le nombre de la ligne ");
scanf("%i",&a);
printf("donner le nombre de la colonne");
scanf("%i",&b);
damier[a][b]=*;
}
}
void sortirdamier (int i,int j,damier[i][j])
{
int n = 0;
for (i=1,i<10,i++)
{
for (j=1,j<10,j++)
{
printf("%c & %c ",damier[i][j],damier[i][j+1]);
}
printf("/n %c & %c",damier[i+1][j],damier[i+1][j+1]);
}
}
void nbrvoisins (int i,int j, int n)
{
for (i=2,i<9,i++)
{
for (j=2,j<9,j++)
if (damier[i-1][j-1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j+1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
else if (damier[i][j-1]=*)
{n=n+1;
}
else
{n=n;
}
}
}
for (i=1,i<2,i++)
{
for (j=2,j<10,j++)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
if (damier[i+1][j+1]=*)
{n=n+1;
}
else
{n=n;
}
}
}
for (i=10,i<=10,i++)
{ for (j=2,j<10,j++)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j-1]=*)
{n=n+1;
}
if (damier[i-1][j+1]=*)
{n=n+1;
}
else
{n=n;
}
}
for (j=1,j<2,i++)
{ for (i=2,j<10,j++)
{
if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j+1]=*)
{n=n+1;
}
else if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
Else
{ n=n;
}
for (j=10,j<=10,i++)
{ for (i=2,i<10,j++)
{
if (damier[i-1][j]=*)
{n=n+1;
}
else if (damier[i-1][j-1]=*)
{n=n+1;
}
else if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
Else
{n=n;
}
}
}
if(i=1,j=1)
{
if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j+1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
if(i=1,j=10)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j-1]=*)
{n=n+1;
}
else if (damier[i+1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
if(i=10,j=10)
{
if (damier[i][j-1]=*)
{n=n+1;
}
else if (damier[i-1][j-1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
if(i=10,j=1)
{
if (damier[i][j+1]=*)
{n=n+1;
}
else if (damier[i-1][j+1]=*)
{n=n+1;
}
else if (damier[i-1][j]=*)
{n=n+1;
}
}
else
{n=n;
}
void transfert(damier[10][10],damier2[10][10], int i,int j)
{
Char damier2[10][10]
for (i=1,i<10,i++)
{
for (j=1,j<10,j++)
{
damier[i][j]=damier2[i][j];
}
}
}
void generationsuivante (int i,int j,damier[10][10])
{
for (i=1,i<10,i++)
{
for (j=1,j<10,j++)
{
int nbrvoisin (int i, int j)
if (n=2)
{
damier[i][j]=*;
}
else if (n=3)
{
damier[i][j]=*;
}
else
damier[i][j]= ;
}
}
}
Int main ()
{
Initblanc() ;
Initcoordonnées() ;
Nbrvoisin() ;
Transfert() ;
Sortirdamier() ;
Generation suivante() ;
}
Modifié par #include#1 le 8/09/2014 à 14:05
13 sept. 2014 à 01:34
@KX a fourni, l'ensemble des fonctions demandé mais cependant, il y a un truc qui me chagrine.
On parle ici du jeu de la vie donc en rentre dans le domaine de l'optimisation algorithmique avec Conway et il te manque pas mal de donnée que tu n'as pas mentionné. En plus vue le code posté, je pense que tu démarres très mal, il te faut une classe pour tes cellules ( je me base sur les jeux par défaut) chez toi ça sera des pions, et dans un autre fichier tout ce qui est affichage.
Les en-têtes sont mal définis , et combien de génération veux tu créé il faut prendre en compte cet options car il va valoir optimiser ton algorithme pour au moins faire plus de trois générations bref tu à du boulot.
Je te conseil de faire une classe Cellule pour commencer. et par la suite on pourras t'aider
à bientôt
13 sept. 2014 à 11:01
Le jeu de la vie de la Conway c'est juste un automate cellulaire qui passe d'une grille à l'autre en appliquant des règles de voisinages, en terme de complexité c'est un algorithme en O(N.G) où N est le nombre de cases de la grille, et G le nombre de générations. Il n'y a pas grand chose à optimiser, vu qu'il faut afficher toutes les générations il faudra également toutes les calculer, c'est très mécanique comme programme.
Je te conseil de faire une classe Cellule pour commencer
Puisque c'est un exercice il devra suivre l'énoncé, et répondre aux questions les unes après les autres avant de rendre son travail. Et pour avoir déjà fait ce genre de programme, une classe Cellule ne sert à rien, ce serait contre-performant, il faut travailler au niveau de la grille.
Amazing Game of Life Demo
13 sept. 2014 à 12:25
Je sais que le jeu de la vie est basé sur un automate cellulaire qui passe d'une grille à l'autre en appliquant des règles de voisinages, et c'est sur ce mécanisme dont je fais référence. D'après ce que j'ai compris enfin du moins c'est un jeu de ...?,
Donc il utilise plus ou moins le même algorithme ( voisinage, génération) et quand je parle d'optimisation je parle par exemple d'atteindre plus de 500 générations par seconde (à titre d'exemple je précise) sur une grille en dame ou échiquier peu importe, donc apporté des améliorations à l'algorithme pour accéléré le jeux au tout simplement laissez tel quel.
Perso je pense que cet exercice à une très forte similitude avec les jeux de vie de Conway dans ta dernière remarque "travailler sur la grille" pourquoi pas, mais il serait plus intéressant de bosser du côté de la génération mais si tu as des avis à soumettre ? je suis preneur
Au passage, merci pour la vidéo :)
à bientôt
13 sept. 2014 à 12:38
Laissons cette discussion à #include#1 si tu veux discuter du jeu de la vie de Conway de manière plus poussé que cet exercice, je t'invite à ouvrir une autre discussion.