Algorithme de niveau pour la résolution du méthode potentiel métra (mpm)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 316 fois - Téléchargée 20 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire Commentaires
Messages postés
5
Date d'inscription
vendredi 14 août 2009
Statut
Membre
Dernière intervention
14 mai 2013

En tout cas, chaque fois, quand je revois mes codes ci-dessus, je me moques de moi-même grave, mais depuis lors j'ai vraiment avancé, et cela grâce aux commentaires ci-dessus...

Ha le début!
Messages postés
7
Date d'inscription
dimanche 20 décembre 2009
Statut
Membre
Dernière intervention
9 janvier 2011

merci a tous mai je charche un programme en c++builder
pour les algorithmes génétiques appliquer au pb de voyageurs de commerces
merci........
Messages postés
12
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
9 mai 2008

Sur le code:
-> tu ne vérifies pas la valeur de nt et pourtant tu boucles dessus (nt+1) pour faire du dt[a]=0...
Et vu que tu as déclaré "int dt[20]" ça ne doit pas être triste quand tu donnes une valeur de nt à plus de 18...
Evidemment c'est la même chose ensuite quand tu fais les cin sur les "d[i][j]" et ça se retrouve dans l'utilisation de "r" plus tard.
Comme C++ est très gentil, il ne plantera pas, en revanche je te dis pas la tronche des data autour de tes variables en mémoire...

-> ensuite ton code n'est pas franchement un modèle niveau présentation alors même qu'il est simpliste. Pas de tabulation après les "if", des lignes sautées on se demande bien pourquoi (pour aérer le code?), des noms de variables qui ne ressemblent à rien (sonnerie, love ???), des fois on a:
if()
code

des fois
if()
{code;}

des fois:
for()
code

des fois

for
{
code
}

-> des fois des printf, des fois des cout..., -=1 parfois et -- ailleurs

-> et puis bien sûr les goto... Alors, je veux bien que dans un code extrêmement compliqué et pompé sur d'autres languages on puisse faire du goto (et encore...), mais là... il n'y a absolument aucune raison car tu peux très facilement les remplacer par une boucle while (ou autre) et par un "break;".


Bref si tu cites Dieu dans ton code on se demande en effet bien ce qu'il fait dans cette galère...
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
Préférer quelque chose de plus propre, au choix:
* Utilisation de using std:: simple.
* Alias de namespace
* Regroupement de using
* Laisser le préfixe

Le but étant d'éviter de faire "sauter" brutalement une fonctionnalité très utile du C++: les namespaces.
D'une par, c'est con de créer un namespace pour le faire sauter après, ça c'est un avis personnel.
La véritable raison arrive surtout sur des codes de grandes tailles, des conflits peuvent apparaître parce que je ne connais pas beaucoup de gens qui savent tout ce qu'il y a dans std par coeur, créer une classe portant le nom de quelque chose d'existant peut arriver. Donc si vraiment on veut utiliser un using, ne le faire que sur des choses connues, dans une portée limitée.

Je ne parle même pas de ceux qui foutent un using namespace std; dans un .hh !

La question reviens très souvent. Dès que j'ai un peu de temps, j'écrirais un tutoriel là dessus.

http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.5
Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
1
Complètement d'accord avec ce que dit le capitaine, à part une chose: pourquoi c'est mal using namespace std; ?
Afficher les 6 commentaires

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.