Bonjour à tous,
J'ai un petit problème avec un projet que je dois faire pour une UV d'info...
Je suis censé faire dedans une fonction permettant de croiser deux listes de bits, c'est à dire intervertir les éléments de deux listes selon une probabilité donnée (pCroise) pour chaque position dans la liste...
Avant tout, afin que vous compreniez :
Donc dans mon programme j'ai deux variables personne1 et personne2 de type "Individu". Leur liste de bits "gencode" a été initialiser aléatoirement avec 0 ou 1. Voici donc comment j'utilise ma fonction "switch" d'inversion :
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 /* définition de la constante "pCroise", probabilité de croisement */ #define pCroise 50 /* définition du type "Bit" */ typedef unsigned char Bit; /* définition du type "element" */ typedef struct element { Bit bit; struct element* next; }element; /* définition du type "list" */ typedef element* list; /* définition du type "Individu" */ typedef struct Individu { list gencode; /*(d'autres trucs inutiles ici);*/ }Individu;
Le problème étant qu'après avoir appelé cette fonction, mes deux listes restent les mêmes...
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 Appel de la fonction dans le main : switchlist(&personne1.gencode,&personne2.gencode); Fonction : void switchlist (list* l1, list* l2) { list list1=(*l1),list2=(*l2); Bit* temp=NULL; if(pCroise!=0) { while((*l1)!=NULL) { if ((int)rand()%(100/pCroise)+1==1) { temp=(Bit*)malloc(sizeof(Bit)); (*temp)=(*l1)->bit; (*l1)->bit=(*l2)->bit; (*l2)->bit=(*temp); free(temp); } (*l1)=(*l1)->next; (*l2)=(*l2)->next; } (*l1)=list1; (*l2)=list2; } }
Merci d'avance pour votre aide![]()
Partager