salut,
ce programme, il faut le signaler, ne résoud pas le problème de MPM (pour la planification des projets); mais plutôt détermine le niveau ou le rang de chaque tâche (selon l'ordre contrainte d'antériorité de ces tâches), ce qui est très délicat...
merci
Source / Exemple :
#include <cstdlib>
#include <iostream>
using namespace std;
int d[20][20],k=0,dt[20],nt,test,pop[20];
int r[20];
int main(int argc, char *argv[])
{
printf(" ===========================================================\n");
printf(" UNIVERSITE DE KINSHASA \n ");
printf(" DEPARTEMENT D'INFORMATIQUE \n ");
printf(" ETUDIANT : KAYEMBA KAVUALLA \n ");
printf(" COURS DE RECHERCHE OPERATIONNELLE\n");
printf(" ===========================================================\n");
cout<<endl<<endl<<" ALGORITHME DE NIVEAUX POUR LE MPM ";
cout<<endl<<endl<<" ================================= ";
cout<<endl<<endl<<" Nombre de taches : ";
cin>>nt;
cout<<endl;
test=nt+2; //le nombre des taches + 2 taches virtuelles
//initialisation de degré à zéro
for(int a =0;a<=nt+1;a++)
dt[a]=0;
//incrémentation de degrés et enregistrement de durée
cout<<endl<<" d[i][j]; c-a-d tache i est precedente a tache j ."<<endl;
cout<<" Si oui mettre la duree de la tache i, sinon -1 "<<endl<<endl;
for (int i=0; i<=nt+1; i++)
{
for(int j=0; j<=nt+1;j++)
{
cout<<" d["<< i<<"][" <<j<<"] = ";
cin>>d[i][j];
if (d[i][j]>-1)
dt[j]++;
}
}
//juste pour forcer
dt[0]= 0;
dt[1]=1;
dt[nt+1]=1;
system("cls");
printf(" ===========================================================\n");
printf(" UNIVERSITE DE KINSHASA \n ");
printf(" DEPARTEMENT D'INFORMATIQUE \n ");
printf(" ETUDIANT : KAYEMBA KAVUALLA \n ");
printf(" COURS DE RECHERCHE OPERATIONNELLE\n");
printf(" ===========================================================\n");
cout<<endl<<endl<<" ALGORITHME DE NIVEAUX POUR LE MPM ";
cout<<endl<<endl<<" ================================= "<<endl<<endl;
for(int sonnerie=0;sonnerie<5;sonnerie++)
printf("\a\a\a") ;
//affichage de degré
cout<<endl<<" dt[i] = k; c-a-d le degre de la tache i est k "<<endl<<endl;
for(int z=0;z<=nt+1;z++)
cout<<" dt["<< z<<"] = " <<dt[z] ;
cout<<endl<<endl;
kavy:
int love=0;
for(int e=0;e<=nt+1;e++)
{
if (dt[e]==0)
{
pop[love] = e;
love++;
dt[e]=-2;
test--;
}
}
//retrouver les rang ou les niveau de chacune des taches
for(int g=0;g<love;g++)
{
r[pop[g]]=k;
if (test==0) //quand toutes les taches s'épuise, alors on sort
{goto kaye;}
for(int h=0;h<=nt+1;h++)
{
if(d[pop[g]][h]>-1)
{dt[h]-=1;}
}
}
k++; //le compteur de rang ou niveau
goto kavy;
//résultat
kaye:
cout<<endl<<" r[i] = k; c-a-d le rang ou niveau de la tache i est k"<<endl<<endl;
for(int l=0;l<=nt+1;l++)
{
cout<<" r["<<l<<"]= "<<r[l]<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Conclusion :
ceci pourra faire pour le problème évoqué, c.à.d. de MPM.
veuillez en profiter
merci
sagessekayemba
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.