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 :

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;
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
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;
     }
}
Le problème étant qu'après avoir appelé cette fonction, mes deux listes restent les mêmes...
Merci d'avance pour votre aide