Dimensionnement des tableaux
Bonjour à tous,
Je sollicite votre aide pour résoudre un petit problème.
J'ai un tableau à une seule dimension : ; ce tableau contient le nombre total de tâches dans une tournée. Dans mon exemple le tableau contient 8 tâches qui sont stockés dans un tableau nommé : . Ces tâches portent les numéros :
Code:
30 31 32 33 34 35 36 37
.
Dans ce bout de code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int f;
int nbtache_rebut[maxR];
if (j==oni)
{
nbtache_rebut[j] = nbnewtask;
i=removednurse[j];
fp << " \n route "<< j << " tasks " <<nbtache_rebut[j] << " : " ;
for (f=ont; f<=ont+nbnewtask+1; f++)
{
int h = removedtask[f];
Tournee_Rebut[j] = removedtask[f];
if(h>=0)
{
fp << " " << Tournee_Rebut[j];
}
}
} |
La tournée que je nomme 'rebut' est la suivante :
Code:
route 2 tasks 8 : 30 31 32 33 34 35 36 37
==> ce code marche.
Dans mon exemple, j'ai une seule tournée (N°2) et deux périodes. Ce que je voulais faire est de partager les 8 tâches sur les deux périodes (aléatoirement) de telle sorte avoir une période qui contient 3 tâches et la deuxième contient 5 tâches (par exp). A condition de ne avoir deux tâches dans deux périodes différentes.
Pour faire cela, j'ai codé ce bout de code qui, malheureusement ne marche pas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| int nbrtache_rebut[maxR][maxT];
int rand_periode ; // valeur aléatoire
// partage les taches sur toutes les periodes de la derniere tournee
if (j==oni) // parcourir la derniere tournee
{
for(t=0; t<ond; t++)
{
while(nbtache_rebut[j]>0 ) // si la somme de taches restants supérieur à zero
{
rand_periode = rand()% (ond); // choisir une periode de la tournee i
fp << " \n rand period : " << rand_periode;
nbrtache_rebut[j][rand_periode] ++ ; // ajouter +1 au nombre de tache dans la periode choisie
fp << " \n numero tache rebut : " << nbrtache_rebut[j][rand_periode];
nbtache_rebut[j]--; // decrementer le nombre de tache restant
fp << " \n nb tasks restantes : " << nbtache_rebut[j];
}
fp << "\n route " << j << " periode " << t << " tasks : " << nbrtache_rebut[j][rand_periode] ;
}
} |
La sortie de ce bout de code :
Code:
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
| rand period : 0
numero tache rebut : 31
nb tasks restantes : 7
rand period : 1
numero tache rebut : 32
nb tasks restantes : 6
rand period : 1
numero tache rebut : 33
nb tasks restantes : 5
rand period : 0
numero tache rebut : 32
nb tasks restantes : 4
rand period : 1
numero tache rebut : 34
nb tasks restantes : 3
rand period : 1
numero tache rebut : 35
nb tasks restantes : 2
rand period : 0
numero tache rebut : 33
nb tasks restantes : 1
rand period : 0
numero tache rebut : 34
nb tasks restantes : 0
route 2 periode 0 tasks : 34
route 2 periode 1 tasks : 34 |
Une dernière chose : je souhaiterai par la suite savoir quelles sont les tâches qui ont étés choisies (cad les identifier dans un tableau à trois dimensions :
Code:
int Tournee_Rebut_Period[maxR][maxA][maxT];
: cad j'aurais besoin de savoir par exp la tâche 32 est faite par la ressource 2 et à la période 1. ==> Tournee_Rebut_Period[2][32][1].
Je vous remercie pour votre aide.
Cordialement,