Aide sur un programme en C
Fermé
Tunners
Messages postés
16
Date d'inscription
dimanche 30 novembre 2008
Statut
Membre
Dernière intervention
6 octobre 2009
-
6 janv. 2009 à 21:51
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 janv. 2009 à 02:08
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 janv. 2009 à 02:08
A voir également:
- Aide sur un programme en C
- Programme demarrage windows 10 - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
5 réponses
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
6 janv. 2009 à 22:04
6 janv. 2009 à 22:04
Poste le c'est la meilleure façon pour nous de voir si l'on peut t'aider ou non :)
Tunners
Messages postés
16
Date d'inscription
dimanche 30 novembre 2008
Statut
Membre
Dernière intervention
6 octobre 2009
1
6 janv. 2009 à 22:08
6 janv. 2009 à 22:08
Ok merci pour ta réponse.
Le voilà :
Soyez indulgents c'est mon premier programme donc si c'est pas très joli, mal fait etc, n'en tenez pas vraiment compte.
Merci.
Le voilà :
#include <stdio.h> #include <stdlib.h> #include <ncurses.h> #include <unistd.h> int t1[30][30],t2[30][30]; int tirage() { return rand()%2; } void mise_a_zero(int t1[30][30],int t2[30][30]) { int i,j; for(i=0;i<30;i++) { for(j=0;i<30;j++) { t1[i][j]=0; t2[i][j]=0; } } } void affichage(int t1[30][30]) { int i,j; for(i=0;i<30;i++) { for(j=0;j<30;j++) { if (t1[i][j]==1) { printf("X"); } else { printf(" "); } } } } void nombre_voisin(int t1[30][30],int t2[30][30]) { int i,j,nb; for(i=0;i<30;i++) { for(j=0;j<30;j++) { if((i==0) && (j==0)) { nb=t1[i][j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+29][j]+t1[i+29][j+1]+t1[i][j+29]+t1[i+1][j+29]+t1[i+29][j+29]; } else if((i==0) && (j==29)) { nb=t1[i][j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+29][j+29]+t1[i+29][j-1]+t1[i][j-29]+t1[i+1][j-29]+t1[i+29][j-29]; } else if((i==29) && (j==0)) { nb=t1[i-1][j]+t1[i-1][j+1]+t1[i][j+1]+t1[i-29][j]+t1[i-29][j+1]+t1[i][j+29]+t1[i-1][j+29]+t1[i-29][j+29]; } else if((i==29) && (j==29)) { nb=t1[i][j-1]+t1[i-1][j]+t1[i-1][j-1]+t1[i][j-29]+t1[i-1][j-29]+t1[i-29][j]+t1[i-29][j-1]+t1[i-29][j-29]; } else if((i==0) && (j!=0) && (j!=29)) { nb=t1[i][j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+1][j+1]+t1[i][j+1]+t1[i+29][j-1]+t1[i+29][j]+t1[i+29][j+1]; } else if((j==0) && (i!=0) && (i!=29)) { nb=t1[i-1][j]+t1[i-1][j+1]+t1[i][j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i-1][j+29]+t1[i][j+29]+t1[i+1][j+29]; } else if((i==29) && (j!=0) && (j!=29)) { nb=t1[i][j-1]+t1[i-1][j-1]+t1[i-1][j]+t1[i-1][j+1]+t1[i][j+1]+t1[i-29][j-1]+t1[i-29][j]+t1[i-29][j+1]; } else if((j==29) && (i!=0) && (i!=29)) { nb=t1[i-1][j]+t1[i-1][j-1]+t1[i][j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i-1][j-29]+t1[i][j-29]+t1[i+1][j-29]; } else if((i!=0) && (i!=29) && (j!=0) && (j!=29)) { nb=t1[i-1][j]+t1[i-1][j+1]+t1[i][j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+1][j-1]+t1[i][j-1]+t1[i-1][j-1]; } if((t1[i][j]==0) && (nb==3)) { t2[i][j]=1; } else if((t1[i][j]==1) && ((nb==2) || (nb==3))) { t2[i][j]=1; } else if((t1[i][j]==1) && ((nb==1) || (nb==0) || (nb>3))) { t2[i][j]=0; } } } } void echange(int t1[30][30],int t2[30][30]) { int i,j,tmp; for(i=0;i<30;i++) { for(j=0;j<30;j++) { tmp=t1[i][j]; t1[i][j]=t2[i][j]; t2[i][j]=tmp; } } } void tempo(int n) { int i,x; x=0; for(i=0;i<n;i++) { x=1+i; } } int testfin(int t1[30][30]) { int i, j, cpt; for(i=0;i<30;i++) { for(j=0;j<30;j++) { if(t1[i][j]==0) { cpt++; } else { cpt=cpt; } } } return cpt; } void jouer() { int i, j, end; end=0; mise_a_zero(t1,t2); for(i=0;i<30;i++) { for(j=0;j<30;j++) { t1[i][j]=tirage(); if (t1[i][j]==1) { printf("X"); } else { printf(" "); } } } do { nombre_voisin(t1,t2); if(t1==t2) { printf("\nL'evolution de l'etat des cases est terminee ...\n"); end=1; } else { if((testfin(t1)==0)||(testfin(t1)==900)) { printf("L'evolution de l'etat des cases est terminee ...\n"); end=1; } else { end=0; } } affichage(t1); echange(t1,t2); tempo(100); } while(end!=1); } int main(void) { int a,fin; printf(" -=> Bienvenu dans le jeu de la vie <=-"); printf("\n\n\n\n"); do { fin=0; printf(" Que voulez-vous faire?\n\n"); printf(" 1 - Afficher les regles du jeu\n"); printf(" 2 - Jouer\n"); printf(" 3 - Quitter\n"); printf(" Entrez le numero qui precede ce que vous souhaitez faire : "); scanf("%i",&a); printf("\n"); if(a==1) { printf("Tout d'abord il faut preciser que le jeu de la vie n'est pas vraiment un jeu au sens ludique,\n"); printf("puisqu'il ne necessite aucun joueur. En fait il s'agit d'un automate cellulaire, un modele \n"); printf("ou chaque etat conduit mecaniquement a l'etat suivant a partir des regles pre-etablies.\n\n"); printf("Le jeu se deroule sur une grille a deux dimensions dont les cases peuvent prendre deux \n"); printf("etats distincts : 'vivantes' ou 'mortes'.\n"); printf("Les regles sont : \n"); printf("-> une cellule morte possedant exactement trois voisines vivantes devient elle aussi vivante.\n"); printf("-> une cellule vivante possedant deux ou trois voisines vivante reste vivante.\n"); printf("-> dans les autres cas la cellule meurt ou reste a l'etat morte.\n\n"); } else { if(a==2) { initscr(); noecho(); move(0,0); refresh(); srand(time(NULL)); jouer(); endwin(); } else { fin=1; } } } while (fin=!1); return (0); }
Soyez indulgents c'est mon premier programme donc si c'est pas très joli, mal fait etc, n'en tenez pas vraiment compte.
Merci.
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
6 janv. 2009 à 22:14
6 janv. 2009 à 22:14
Peut-tu éditer ton code et le mettre entre les balises <code > et </code > (sans les espaces avant les >) tout en l'indentant car là on n'y voit pas très clair :)
Tunners
Messages postés
16
Date d'inscription
dimanche 30 novembre 2008
Statut
Membre
Dernière intervention
6 octobre 2009
1
6 janv. 2009 à 22:17
6 janv. 2009 à 22:17
Voilà c'est fait, désolé j'ai pas trop l'habitude de ce genre de choses.
Merci de m'accorder de ton temps.
Merci de m'accorder de ton temps.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
7 janv. 2009 à 02:08
7 janv. 2009 à 02:08
Salut,
J'ai regardé vite fait.
Tout d'abord, je te conseille de ne pas mettre t1 et t2 en variable globale. Définis les plutôt dans la fonction jouer, surtout que tu les passes en arguments dans les fonctions.
Donc, je pense que l'erreur vient tout simplement de ta fonction mise_a_zero. Dans la deuxième boucle for, tu fais for(j=0;i<30;j++); qui sera une condition infinie lors de la première itération de i (i=0).
Je pense que ça devrait mieux marcher après ça. Sinon attention à l'utilisation des fonctions non standard comme initscr().
Cdlt
J'ai regardé vite fait.
Tout d'abord, je te conseille de ne pas mettre t1 et t2 en variable globale. Définis les plutôt dans la fonction jouer, surtout que tu les passes en arguments dans les fonctions.
Donc, je pense que l'erreur vient tout simplement de ta fonction mise_a_zero. Dans la deuxième boucle for, tu fais for(j=0;i<30;j++); qui sera une condition infinie lors de la première itération de i (i=0).
Je pense que ça devrait mieux marcher après ça. Sinon attention à l'utilisation des fonctions non standard comme initscr().
Cdlt