begin process at 2012 02 11 10:52:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > ALGORITHME DE NIVEAU POUR LA RÉSOLUTION DU MÉTHODE POTENTIEL MÉTRA (MPM)

ALGORITHME DE NIVEAU POUR LA RÉSOLUTION DU MÉTHODE POTENTIEL MÉTRA (MPM)


 Information sur la source

Note :
2 / 10 - par 1 personne
2,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Classé sous :algo-niveauMPM, programme-niveauMPM, détermination-niveauMPM Niveau :Débutant Date de création :15/12/2009 Date de mise à jour :16/12/2009 18:44:29 Vu :2 508

Auteur : sagessekaye

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

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

  • #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;
  • }
#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


 Sources de la même categorie

Source avec Zip Source avec une capture CONVERTISSEUR HEXAVIGÉSIMAL par shaeks
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHIE AFFINE par Tigrou66
Source avec Zip Source avec une capture SCANNER FLEX par lajouad
Source avec Zip EQUATIONSECONDDEGRÉ,MATH,DEGRÉ par shadkitenge
Source avec Zip Source .NET (Dotnet) SOMME DE CHIFFRES CONTENUE DANS UN NOMBRE par alpha5

Commentaires et avis

Commentaire de CptPingu le 15/12/2009 18:46:21 administrateur CS

Code sale:
- Variable global
- Goto
- system
- Pas de découpage en fonction, voir même qui ne porte pas le nom de leur usage.
- Variables peu explicites
- using namespace std: => beurk. Préférer using std::cout et using std::endl;
- #include <cstdlib> => on pourrait aisément s'en passer.


> -GLOIRE SOIT RENDU A DIEU

La religion tout comme la politique n'as PAS sa place sur un site d'échange de code.

Commentaire de Forman le 16/12/2009 10:29:45

Complètement d'accord avec ce que dit le capitaine, à part une chose: pourquoi c'est mal using namespace std; ?

Commentaire de CptPingu le 16/12/2009 10:38:35 administrateur CS

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

Commentaire de lmame le 16/12/2009 10:51:00


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...

Commentaire de pipo27 le 21/12/2009 21:31:24 2/10

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........

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales