[C] programme a effet de bord / liste chainée
Résolu/Fermé
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
-
28 déc. 2009 à 11:37
Laraannain Messages postés 109 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 3 février 2011 - 29 déc. 2009 à 00:31
Laraannain Messages postés 109 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 3 février 2011 - 29 déc. 2009 à 00:31
A voir également:
- [C] programme a effet de bord / liste chainée
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Programme demarrage windows 10 - Guide
- Effet miroir word - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
6 réponses
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
28 déc. 2009 à 12:15
28 déc. 2009 à 12:15
Je ne lis pas vraiment le code car il n'est pas indenté, mais une fonction comme celle-ci:
void croiser(indiv x, indiv y, int pCroise)
doit t'interpeller car c'est une fonction, qui de toute évidence, n'aura aucun résultat (sauf sur des variables tordues comme des variables globales ou statiques).
Bonne réflexion.
void croiser(indiv x, indiv y, int pCroise)
doit t'interpeller car c'est une fonction, qui de toute évidence, n'aura aucun résultat (sauf sur des variables tordues comme des variables globales ou statiques).
Bonne réflexion.
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
15
28 déc. 2009 à 20:07
28 déc. 2009 à 20:07
pas besoin de rendre quelque chose puisque je veux agir par effet de bord (modifier, à l'intérieur du programme, les deux variables entrées). Je n'ai donc pas une variable à rendre mais deux.
(dsl le code est indenté dans eclipse mais le copier/coller l'a modifié ^^")
(dsl le code est indenté dans eclipse mais le copier/coller l'a modifié ^^")
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
28 déc. 2009 à 21:32
28 déc. 2009 à 21:32
Effectivement, je n'ai pas fait attention au 'typedef' sur un pointeur (personnellement je ne le fais jamais car cela cache quelquechose d'important).
Somme toute, j'ai plusieurs remarques:
- je ne vois pas l'intérêt de passer par tx et ty,
- la fonction 'rand' renvoie un entier compris entre 0 et RAND_MAX, alors si tu divises par RAND_MAX, je te laisse conclure,
- 'rand' n'est pas initialisé, alors tu auras toujours la même série de valeurs,
- je veux agir par effet de bord, je ne suis pas d'accord avec cette expression, il s'agit simplement d'un passage de paramètres par valeur et comme cette valeur est une adresse, on peut modifier la valeur pointée par cette adresse,
- quant à l'indentation, pour la conserver, il existe des balises 'codes', sises après celles des 'gras', 'italique' et 'souligné', qui permettent de la conserver.
Bonne continuation.
Somme toute, j'ai plusieurs remarques:
- je ne vois pas l'intérêt de passer par tx et ty,
- la fonction 'rand' renvoie un entier compris entre 0 et RAND_MAX, alors si tu divises par RAND_MAX, je te laisse conclure,
- 'rand' n'est pas initialisé, alors tu auras toujours la même série de valeurs,
- je veux agir par effet de bord, je ne suis pas d'accord avec cette expression, il s'agit simplement d'un passage de paramètres par valeur et comme cette valeur est une adresse, on peut modifier la valeur pointée par cette adresse,
- quant à l'indentation, pour la conserver, il existe des balises 'codes', sises après celles des 'gras', 'italique' et 'souligné', qui permettent de la conserver.
Bonne continuation.
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
15
28 déc. 2009 à 21:44
28 déc. 2009 à 21:44
-les tx et ty permettent de ne pas rendre une fonction nulle à la fin. Lorsque j'ai parcouru ma liste bit par bit, j'arrive au dernier élément qui pointe sur NULL
-la fonction rand est initialisée dans le main (croisée est un sous programme d'un programme croiser_pop qui permet de croiser une liste d'individus)
-ma fonction random rend bien un float (j'ai testé en faisant le printf après le rand)
et pour l'indentation je l'aurais bien faite si je pouvais modifier le message mais il me semble que c'est impossible de le modifier à présent.
du coup (en effet c'est plus lisible comme ça) :
-la fonction rand est initialisée dans le main (croisée est un sous programme d'un programme croiser_pop qui permet de croiser une liste d'individus)
-ma fonction random rend bien un float (j'ai testé en faisant le printf après le rand)
et pour l'indentation je l'aurais bien faite si je pouvais modifier le message mais il me semble que c'est impossible de le modifier à présent.
du coup (en effet c'est plus lisible comme ça) :
//- Définition du type Bit typedef unsigned char bit; //- Définition de la structure individu typedef struct cell { bit valeur; struct cell* suivant; } Cellule; typedef Cellule* indiv; //- Fonction de croisement de population void croiser(indiv x, indiv y, int pCroise) { int longIndiv=length(x); int k; indiv tx=x; indiv ty=y; for (k=0;k<longIndiv;k++) { float r; r=(float)(rand() / (float)RAND_MAX * 1); printf("%f \n",r); if (r < pCroise) { printf("je croise"); bit t; t=tx->valeur; tx->valeur=ty->valeur; ty->valeur=t; } tx=tx->suivant; ty=ty->suivant; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
28 déc. 2009 à 21:55
28 déc. 2009 à 21:55
Ah ben c'est quand même plus lisible, et là on voit bien l'utilité du 'tx' et ty'.
ma fonction random rend bien un float, ça c'est sûr mais un float de valeur maxi RAND_MAX divisé par RAND_MAX (la multiplication par 1 ne change rien !) ne sera jamais supérieur à 1, en conséquence, tout 'int' (sauf 0) sera supérieur.
Bonne continuation.
ma fonction random rend bien un float, ça c'est sûr mais un float de valeur maxi RAND_MAX divisé par RAND_MAX (la multiplication par 1 ne change rien !) ne sera jamais supérieur à 1, en conséquence, tout 'int' (sauf 0) sera supérieur.
Bonne continuation.
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
15
29 déc. 2009 à 00:31
29 déc. 2009 à 00:31
yep, ça fonctionne ^^
merci beaucoup :)
merci beaucoup :)