IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Exercice 1 , page 1, paragraphe 1


Sujet :

C

  1. #1
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut Exercice 1 , page 1, paragraphe 1
    Bonjour,

    Je fais les exercices du très bon didacticiel de Eric Berthomier et Daniel Schang : Le C en 20 heures.

    Après 200 heures , j'en suis à la page 14 : https://c.developpez.com/cours/20-heures/?page=page_14 sur l'exercice du Jeu de la vie.

    J'ai écris un programme, puis j'essaie de comprendre ce qui ne marche pas dans le décompte des voisins. Je n'ai pas écris le programme comme la correction, malgré tout, ce passage suit le même processus, pourtant je trouve toujours 8 voisins ??

    Je vous remercie de m'aider, car là, je sèche. Je ne trouve pas ce qui foire.

    J'utilise un scanf("%d",&o); pour faire une pause à chaque décompte de voisin. Il suffit d'entrer un nombre pour continuer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    /**************************************
                JEU DE LA VIE
    ****************************************/
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <time.h>
    #include <math.h>
     
    #define CM 	40   	/* Nombre de Cases Modifiées*/
    #define CT 	CM+2 	/* Nombre de Cases total*/
     
    /* Taille de la matrice contenant */
    /* les cellules + 2 pour la bordure */
    /****************************************/
    /*******   F O N C T I O N S   **********/
    /****************************************/
     
     
    void init(int matrice[][CT], int matrice2[][CT]) {
    	srand(time(NULL));
    	int nbz=0;
    	int i,j,h;
    	for(i=0;i<CT;i++){
    		for(j=0;j<CT;j++){
    			if (i==0||i==CT-1||j==0||j==CT-1) {
    				matrice[i][j]=8;
    				matrice2[i][j]=8;
    			}
    			else {
    				nbz=rand()/10000000;
    				if(nbz>150) {
    					matrice[i][j]=1;
    					matrice2[i][j]=1;
    				}
    				else {
    					matrice[i][j]=0;
    					matrice2[i][j]=0;
    				};
    			};
    		};
    	};
     
    	printf("\n");	
    }
     
    void affiche(int matrice[][CT],int matrice2[][CT]) {
    	int i;
    	int j;
    	for(i=0;i<CT;i++){
    		for(j=0;j<CT;j++){
    			printf("%d ",matrice2[i][j]);
    			matrice[i][j]=matrice2[i][j];
    		};
    		printf("\n");
    	};
    	printf("\n");
    }
     
     
    void remplissage(int matrice[][CT],int matrice2[][CT],int i,int j) {
    	int m,n,a=0,mm=0,nn=0;	
    	while (a=0) {
    		for(m=1;m<=1;m++) {
    			for(n=1;n<=1;n++) {
    				/*printf("m: %d %d %d ",i,j,matrice[i+m][j+n]);*/
    				if(matrice[i+m][j+n]=0) {
    					a=1;
    					mm=m;
    					nn=n;
    				};
    			};
    		};
    	};
    	matrice2[i+mm][j+nn]=1;
    }	
     
    void vidage(int matrice[][CT],int matrice2[][CT],int i,int j) {
    	int m,n,a=0,mm=0,nn=0;
    	while (a=0) {
    		for(m=1;m<=1;m++) {
    			for(n=1;n<=1;n++) {
    				/*printf("m: %d %d %d ",i,j,matrice[i+m][j+n]);*/
    				if(matrice[i+m][j+n]=1) {
    					a=1;
    					mm=m;
    					nn=n;
    				};
    			};
    		};
    	};
    	matrice2[i+mm][j+nn]=0;
    }
     
    int nombre_voisins (int matrice[][CT],int i, int j) {
    	int m,n,o;
    	int voisin=0;
    	for(m=i-1;m<=i+1;m++) {
    		for(n=j-1;n<=j+1;n++) {
    			printf("voisins av : %d\n",voisin);
    			if(matrice[m][n]=1) voisin++;	
    			printf("mat i j m n : %d %d %d %d %d\n", matrice[m][n],i,j,m,n);
    			printf("voisins ap : %d\n",voisin);
    		};
    	};
    	if(matrice[i][j]=1) voisin--;
    	printf("voisins fin : %d\n",voisin);
    	scanf("%d",&o);
    	return voisin;
    }
     
    void mise_a_jour(int matrice[][CT], int matrice2[][CT]) {
    	int i,j;
    	int voisin=0;
    		for (i=1;i<CM;i++) {
    			for (j=1;j<CM;j++) {
    				voisin=nombre_voisins(matrice,i,j);
    					switch(voisin) {
    						case 2:
    							remplissage(matrice,matrice2,i,j);
    							break;
    						case 0: case 4: 
    							matrice2[i][j]=0;
    							break;
    					};
    			};
    		};
    		printf("\n");
     
    }
     
    int main() {
    		int i;
    		int matrice[CT][CT];
    		int matrice2[CT][CT];
    		init(matrice,matrice2);
    		affiche(matrice,matrice2);
    		for (i=0;i<=2;i++) {
    			mise_a_jour(matrice,matrice2);
    			affiche(matrice,matrice2);
    		};
    	return 0;
    }
    J'ai essayé d'abord d'écrire le sous-programme nombre_voisins comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(m=-1;m<=1;m++) {
    		for(n=-1;n<=1;n++) {
    			if(matrice[i+m][j+n]=1) voisin++;	
    		};
    	};
    mais cela ne marchait pas non plus.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Points : 1 376
    Points
    1 376
    Par défaut
    Bonjour,
    = est l'affectation, pour la comparaison c'est ==. Ici tu affectes la valeur 1 à la cellule de ton tableau et ensuite tu vérifies qu'elle n'est pas nulle (ce qui n'est jamais le cas car tu viens d'affecter 1) …

    Le compilateur a dû te prévenir de ce fait avec un warning …

  3. #3
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Ha ! L'erreur bête, en plus je le sais.

    Dans la correction de l'exercice c'est traité de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    compte=compte+matrice[i][j];
    Je n'ai pas eu de warning, non.

    J'utilise la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o nom_de_programme nom_de_programme.c -g
    Je te remercie pour ton aide.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  4. #4
    Membre expérimenté
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Points : 1 376
    Points
    1 376
    Par défaut
    Pas de soucis, mais quitte à compiler avec gcc utilise plutôt gcc -Wall -Wextra -fanalyzer -g.
    -Wall c'est pour afficher plus de warnings courants, -Wextra c'est pour encore plus de warnings et -fanalyzer c'est pour faire une analyse statique de ton code.
    Suivant ta version de gcc, -fanalyzer ne sera pas forcément disponible.

  5. #5
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Super ! Merci.

    Effectivement, je n'ai pas -fanalyzer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc: error: unrecognized command line option ‘-fanalyzer’
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    pascal@X1804:~/$ gcc --version
    gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
    Copyright (C) 2017 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
    pascal@X1804:~/$
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  6. #6
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Voilà le programme définitif, après correction d'autres erreurs :
    m = -1 au lieu de m = 1 dans for(m=-1;m<=1;m++) {
    n = -1 au lieu de n = 1 dans for(n=-1;n<=1;n++) {
    j'ai supprimé la matrice2 qui existait à cause du problème de fonctionnement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    /**************************************
                JEU DE LA VIE
    ****************************************/
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <time.h>
    #include <math.h>
     
    #define CM 	40   	/* Nombre de Cases Modifiées*/
    #define CT 	CM+2 	/* Nombre de Cases total*/
     
    /* Taille de la matrice contenant */
    /* les cellules + 2 pour la bordure */
    /****************************************/
    /*******   F O N C T I O N S   **********/
    /****************************************/
     
     
    void init(int matrice[][CT]) {
    	srand(time(NULL));
    	int nbz=0;
    	int i,j;
    	for(i=0;i<CT;i++){
    		for(j=0;j<CT;j++){
    			if (i==0||i==CT-1||j==0||j==CT-1) {
    				matrice[i][j]=8;
    			}
    			else {
    				nbz=rand()/10000000;
    				if(nbz>150) {
    					matrice[i][j]=1;
    				}
    				else {
    					matrice[i][j]=0;
    				};
    			};
    		};
    	};
     
    	printf("\n");	
    }
     
    void affiche(int matrice[][CT]) {
    	int i;
    	int j;
    	for(i=0;i<CT;i++){
    		for(j=0;j<CT;j++){
    			printf("%d ",matrice[i][j]);
    		};
    		printf("\n");
    	};
    }
     
     
    void remplissage(int matrice[][CT],int i,int j) {
    	int m,n,a=0,mm=0,nn=0;	
    	while (a==0) {
    		for(m=-1;m<=1;m++) {
    			for(n=-1;n<=1;n++) {
    				if(matrice[i+m][j+n]==0) {
    					a=1;
    					mm=m;
    					nn=n;
    				};
    			};
    		};
    	};
    	matrice[i+mm][j+nn]=1;
    }	
     
    void vidage(int matrice[][CT],int i,int j) {
    	int m,n,a=0,mm=0,nn=0;
    	while (a==0) {
    		for(m=-1;m<=1;m++) {
    			for(n=-1;n<=1;n++) {
    				if(matrice[i+m][j+n]==1) {
    					a=1;
    					mm=m;
    					nn=n;
    				};
    			};
    		};
    	};
    	matrice[i+mm][j+nn]=0;
    }
     
    int nombre_voisins (int matrice[][CT],int i, int j) {
    	int m,n;
    	int voisin=0;
    	for(m=i-1;m<=i+1;m++) {
    		for(n=j-1;n<=j+1;n++) {
    			if(matrice[m][n]==1) voisin++;	
    			/*printf("mat i j m n : %d %d %d %d %d\n", matrice[m][n],i,j,m,n);*/
    			/*printf("voisins ap : %d\n",voisin);*/
    		};
    	};
    	if(matrice[i][j]==1) voisin--;
    	return voisin;
    }
     
    void mise_a_jour(int matrice[][CT]) {
    	int i,j,o;
    	int voisin=0;
    		for (i=1;i<CM;i++) {
    			for (j=1;j<CM;j++) {
    				voisin=nombre_voisins(matrice,i,j);
    					switch(voisin) {
    						case 0: case 1: case 2: case 7: 
    							remplissage(matrice,i,j);
    							break;
    						case 3: case 4: case 5: case 6: case 8:
    							vidage(matrice,i,j);
    							break;
    						default :
    							printf("default\n");
    							scanf("%d",&o);
    							break;
    					};
    			};
    		};
    		printf("\n");
     
    }
     
    int main() {
    		int i;
    		int matrice[CT][CT];
    		init(matrice);
    		affiche(matrice);
    		for(i=0;i<=10;i++) {
    			mise_a_jour(matrice);
    			affiche(matrice);
    		};
    		return 0;
    }
    Les 1 vivent continuellement dans cet espace, ce qui n'était pas le cas précédemment.

    Merci WhiteCrow.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par Pascaltech Voir le message
    Voilà le programme définitif, après correction d'autres erreurs :
    J'aime bien ton programme. On sent que tu aimes faire les choses propres. Manque un peu de commentaires et aussi d'aération dans les expressions mais c'est un défaut qui disparaitra tout seul quand tu voudras faire évoluer ton code 6 mois après et que tu passeras 2h à te relire sans comprendre ce que t'avais fait.

    Quelques conseils
    • tu peux remplacer if (nbz>150) matrice[i][j]=1 else marice[i][j]=0 par matrice[i][j]=nbz > 150 ?1 :0. Ceci dit je ne pige pas trop la division par 10 millions. Un nombre aléatoire entre A (inclus) et B (exclu) s'obtient de cette façon: rand() / RAND_MAX * (B-A) + A
    • si tu es sous Unix/Linux, tu peux remplacer srand(time(NULL)) par srand(time(NULL)^getpid()). En effet, si un programme est lancé plusieurs fois en parallèle, chaque processus aura le même time ; mais chaque processus n'a pas le même pid. Petite astuce dont tu te souviendras plus tard quand ça sera important.
    • tu as remarqué que quand on passe un tableau multidimensionnel à une fonction, on est obligé de spécifier les dimensions internes du tableau pour que la fonction sache s'y positionner. En fait, seule la dernière dimension est inutile. Donc tu es obligé d'écrire [CT]. Tu as centralisé le souci en mettant CT en macro et ça c'est bien.
    • essaye de séparer les fonctions dédiées au "travail" des fonctions dédiées à l'affichage (ce printf() qui n'a rien à faire dans init()). Ce sera un peu plus chiant au début mais tu y gagneras quand tu pourras réutiliser tes fonctions dans différentes situation qui ne nécessitent pas forcément un affichage à chaque fois
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Bonsoir Sver,

    Je te remercie grandement pour tes conseils.

    Oui, j'apprécie d'avoir un code lisible, comme l'alignement en vertical de la fermeture de la parenthèse avec la fonction qui l'ouvre.

    J'ai appris un truc que je n'avais pas repéré en premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if () {
     action 1;
     action 2;} 
    else action;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if () action ;
    else action;
    Selon le deuxième cas, on pourrait croire qu'il faut un point-virgule entre un if et le else qui le suit !!!

    quand tu voudras faire évoluer ton code 6 mois après et que tu passeras 2h à te relire sans comprendre ce que t'avais fait.
    Oui, cela m'est arrivé pour des macros. Pour l'instant, en C, je fais des exercices et je n'ai pas de stratégie de réutilisation, bien que, cela pourrait être le cas. Concernant, l'aération, j'ai pris l'habitude issue des macros toujours, de ne rien écrire d'inutile, ni de majuscules inutiles ni d'espace non plus.

    La division par 10000000 est pour trouver un nombre lisible facilement, plus facilement que 123456789 ou 123645789.

    tu as remarqué que quand on passe un tableau multidimensionnel à une fonction, on est obligé de spécifier les dimensions internes du tableau pour que la fonction sache s'y positionner. En fait, seule la dernière dimension est inutile. Donc tu es obligé d'écrire [CT]. Tu as centralisé le souci en mettant CT en macro et ça c'est bien.
    Mettre CT en macro, tu veux dire relativement à CM ? #define CT CM+2

    Pourquoi parles-tu de la dernière dimension inutile ?

    Je pensais que c'était le contraire : on spécifie l'adresse puis la longueur de la matrice répétée, donc la dernière dimension :
    matrice[première_dimension][dernière_dimension] qui peut être considérée comme :
    [première_dimension] fois la matrice de dimension[dernière_dimension]. Non ?

    Ca voudrait dire que j'ai eue de la chance alors !!! C'est la chance des débutants !

    Merci pour tes encouragements.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pascaltech Voir le message
    Mettre CT en macro, tu veux dire relativement à CM ? #define CT CM+2
    Oui ça c'est un bon réflexe de créer des macros par rapport à d'autres. Il faut tout de même faire gaffe aux priorités car la macro n'est pas calculée, elle est reprise intégralement dans le code qui l'utilise => printf("%d\n", CT*2) = printf("%d\n", 40+2*2)!!!!!
    => #define CT (CM+2).

    Citation Envoyé par Pascaltech Voir le message
    Pourquoi parles-tu de la dernière dimension inutile ?
    Je pensais que c'était le contraire : on spécifie l'adresse puis la longueur de la matrice répétée, donc la dernière dimension :
    matrice[première_dimension][dernière_dimension] qui peut être considérée comme :
    [première_dimension] fois la matrice de dimension[dernière_dimension]. Non ?
    Si tu prends un tableau (par exemple) 3D (ex int tab[5][7][12]) et que tu passes tab à une fonction toto(), tu peux déclarer ta fonction toto(int tab[5][7][12]) ou bien toto(int tab[][7][12]). La valeur de la dernière dimension (c'est la première dans le sens de lecture mais la dernière dans le sens "tableau") n'a pas besoin d'être indiquée. C'est parce que le "5" n'a aucune importance pour positionner un indice [x][y][z] (c'est en effet la case x*7*12 + y*12 + z en RAM). Car il ne faut pas oublier qu'un tableau ça reste au final qu'une simple suite de cases. Il existe même certains cas où on préfère travailler en 1D et faire les conversions d'indices manuellement.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    #define CT (CM+2)
    Ha, oui, sacré piège. Honnêtement, je l'ai saisi pour savoir si cela marchait, et en fait oui.

    c'est en effet la case x*7*12 + y*12 + z en RAM
    C'est quand même bancal comme définition, car il faut connaître les 3 valeurs pour trouver la bonne valeur. C'est vrai que la matrice est définie précédemment puis passée en paramètre, donc cette valeur est connue. Je continuerai à travailler dessus pour mieux maîtriser le sujet.

    Je doutais de pouvoir analyser les cases autour de la case lue lors du comptage des voisins car elles peuvent être modifiées lors de l'exécution précédente de la boucle.
    En macros, la machine se plante car elle ne sait pas lire ce qu'elle vient d'écrire à l'instant. C'est vrai qu'en C, on est plus proche de la machine.

    J'apprécie le tutoriel de Patrick Gonord, Les concepts en C, que je n'ai que parcouru, qui donne une vision théorique et explique les choix de conception du C. C'est très intéressant !

    Bonne fin de soirée.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pascaltech Voir le message
    C'est quand même bancal comme définition, car il faut connaître les 3 valeurs pour trouver la bonne valeur.
    Pas 3, juste 2 (d'où le fait que la dernière n'est pas nécessaire). C'est en effet la chose à savoir: un tableau, quelle que soit sa dimension, reste au final qu'une suite de cases. Donc le C a besoin de connaitre les dimensions internes de l'objet pour pouvoir faire le calcul. Mais c'est pareil pour toi. Essaye de dessiner sur un bout de papier quadrillé un "rectangle de surface 24 carreaux identique à celui que j'imagine" sans autre indication...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Ok, c'est noté. Les opérateurs ternaires sont au programme de la page 16 du tutoriel.

    Bonne journée.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] macro styles/note de bas de page/1er paragraphe
    Par SissaYona dans le forum VBA Word
    Réponses: 0
    Dernier message: 24/01/2013, 16h37
  2. [itext] Paragraph sans saut de page
    Par phoebe dans le forum Documents
    Réponses: 2
    Dernier message: 04/04/2007, 11h58
  3. lien vers un paragraphe precis d'une autre page
    Par karimphp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/01/2007, 15h55
  4. Pages d'exercices à faire pour l'autoformation ?
    Par [thebadskull] dans le forum Evolutions du club
    Réponses: 13
    Dernier message: 15/06/2004, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo