begin process at 2012 02 08 10:15:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CHEMIN CRITIQUE PAR LA METHODE PERT

CHEMIN CRITIQUE PAR LA METHODE PERT


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :chemincritique, pert, ro, ordonnancement, abdellah Niveau :Initié Date de création :09/07/2006 Vu / téléchargé :16 303 / 580

Auteur : Abdellah81

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

 Description

Ce programme resoud le probleme du chemin critique (ordonnancement)

Source

  • /******************************/
  • /* El Antri Abdellah */
  • /* Sous licence GNU */
  • /******************************/
  • /*****************************/
  • /* Tester sous linux */
  • /* compilation: cc ro.c -o ro*/
  • /* Execution: ./ro */
  • /*****************************/
  • #include<stdio.h>
  • #include<math.h>
  • #include<stdlib.h>
  • #define MAX_INT 65535
  • #define max(x,y) x>y?x:y
  • #define min(x,y) x<y?x:y
  • typedef struct {int date_plutot, date_plutard, marge, num_tache;}tache;
  • tache *projet;
  • int **matrice;
  • int main()
  • {
  • int chemin[100];
  • int associe [100];
  • int som_ch = 0;
  • int nbr_tache;
  • int i,j,k;
  • int num_succ;
  • int nbr_succ;
  • int duree;
  • int som = 0;
  • int *pile;
  • printf("\n Donner le nombre des taches: ");
  • scanf("%d",&nbr_tache);
  • projet = (tache *)malloc((nbr_tache + 2) * sizeof(tache));
  • if(projet == NULL)
  • {
  • printf(" \n Impossible d'allouer de l'espace pour projet");
  • exit(1);
  • }
  • else printf("\n Espace allouer avec succe");
  • matrice = (int **)malloc((nbr_tache + 2) * sizeof(int *));
  • for(i = 0; i < nbr_tache + 2; i++)
  • {
  • matrice[i] = (int *)malloc((nbr_tache + 2) * sizeof(int));
  • }
  • for(i = 0; i < nbr_tache + 2; i++)
  • for(j = 0; j < nbr_tache + 2; j++)
  • {
  • matrice[i][j] = -1;
  • }
  • matrice[0][1] = 0;
  • pile = (int *)malloc((nbr_tache +2) * sizeof(int));
  • for(i = 1; i < nbr_tache ; i++)
  • {
  • printf(" \n Donner le nombre des taches qui vient apres %d:",i);
  • scanf("%d",&nbr_succ);
  • for(j = 0; j < nbr_succ; j++)
  • {
  • printf(" Donner le numero du successeur N %d:", j+1);
  • scanf("%d", &num_succ);
  • printf(" Donner la duree entre %d et %d: ", i , num_succ);
  • scanf("%d", &duree);
  • matrice[i][num_succ] = duree;
  • }
  • }
  • matrice[nbr_tache][nbr_tache+1] = 1;
  • // date au plutot
  • projet[0].date_plutot = 0;
  • for(j = 1; j < nbr_tache + 2; j++)
  • {
  • projet[j].date_plutot = 0;
  • for(i = 0; i < j; i++)
  • {
  • if(matrice[i][j] != -1)
  • {
  • projet[j].date_plutot = max(projet[j].date_plutot,
  • projet[i].date_plutot + matrice[i][j]);
  • }
  • }
  • printf(" \n date_plutot de %d: %d", j, projet[j].date_plutot);
  • }
  • printf("\n Tapper une touche ...");
  • scanf("%d", &i);
  • projet[nbr_tache+1].date_plutard = projet[nbr_tache+1].date_plutot;
  • // date au plutard
  • for(i = nbr_tache ; i >= 0; i--)
  • {
  • projet[i].date_plutard = MAX_INT;
  • for(j = i + 1; j <= nbr_tache + 1; j++)
  • {
  • if(matrice[i][j] != -1)
  • projet[i].date_plutard = min (projet[j].date_plutard - matrice[i][j],
  • projet[i].date_plutard);
  • }
  • printf(" \n date_plutard de %d: %d", i, projet[i].date_plutot);
  • }
  • printf("\n Tapper une touche ...");
  • scanf("%d", &i);
  • // marges
  • for(i=0; i < nbr_tache +2; i++)
  • {
  • projet[i].marge = projet[i].date_plutard - projet[i].date_plutot;
  • printf("\n La marge de %d: %d", i, projet[i].marge);
  • }
  • printf("\n Tapper une touche ...");
  • scanf("%d", &i);
  • associe[som_ch] = -1;
  • pile[som] = 1;
  • som ++;
  • som_ch ++;
  • while(som > 0)
  • {
  • som --;
  • i = pile[som];
  • chemin[som_ch] = i;
  • som_ch ++;
  • for(j = i+1; j < nbr_tache + 2; j++)
  • if(matrice[i][j] != -1)
  • {
  • if(projet[i].marge == 0 && projet[j].marge == 0 )
  • {
  • if(j != nbr_tache + 1)
  • {
  • pile[som] = j;
  • associe[som] = i;
  • som++;
  • }
  • else
  • {
  • printf("\n ==> ");
  • for (k = 1; k < som_ch; k++)
  • printf(" %d ", chemin[k]);
  • for (k = 0; k < som_ch; k++)
  • if(som > 0 && chemin[k] == associe[som - 1])
  • {
  • som_ch = k + 1;
  • break;
  • }
  • }
  • }
  • }
  • }
  • printf("\n");
  • return 0;
  • }
/******************************/
/*   El Antri Abdellah        */
/*   Sous licence GNU         */
/******************************/

/*****************************/
/* Tester sous linux         */
/* compilation: cc ro.c -o ro*/
/* Execution: ./ro           */
/*****************************/

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

#define MAX_INT 65535

#define max(x,y) x>y?x:y
#define min(x,y) x<y?x:y

typedef struct {int date_plutot, date_plutard, marge, num_tache;}tache;

tache *projet;
int **matrice;

int main()
{
int chemin[100];
int associe [100];
int som_ch = 0;
int nbr_tache;
int i,j,k;
int num_succ;
int nbr_succ;
int duree;
int som = 0;
int *pile;

printf("\n Donner le nombre des taches: ");
scanf("%d",&nbr_tache);

projet = (tache *)malloc((nbr_tache + 2) * sizeof(tache));
if(projet == NULL)
  {
  printf(" \n Impossible d'allouer de l'espace pour projet");
  exit(1);
  }
  else printf("\n Espace allouer avec succe");


matrice = (int **)malloc((nbr_tache + 2) * sizeof(int *));

for(i = 0; i < nbr_tache + 2; i++)
   {
   matrice[i] = (int *)malloc((nbr_tache + 2) * sizeof(int));	   
   }

for(i = 0; i < nbr_tache + 2; i++)
    for(j = 0; j < nbr_tache + 2; j++)
       {
	matrice[i][j] = -1;
       }
matrice[0][1] = 0;

pile = (int *)malloc((nbr_tache +2) * sizeof(int));

for(i = 1; i < nbr_tache ; i++)
   {
   printf(" \n Donner le nombre des taches qui vient apres %d:",i);
   scanf("%d",&nbr_succ);
   for(j = 0; j < nbr_succ; j++)
     {
     printf(" Donner le numero du successeur N %d:", j+1);
     scanf("%d", &num_succ);
     printf(" Donner la duree entre %d et %d: ", i , num_succ);
     scanf("%d", &duree);	     
     matrice[i][num_succ] = duree; 
     }
   }
matrice[nbr_tache][nbr_tache+1] = 1;

// date au plutot
projet[0].date_plutot = 0;

for(j = 1; j < nbr_tache + 2; j++)
   {
   projet[j].date_plutot = 0;
   for(i = 0; i < j; i++)
      {
      if(matrice[i][j] != -1)
         {
	 projet[j].date_plutot = max(projet[j].date_plutot,
			             projet[i].date_plutot + matrice[i][j]);
	 }
      }	      
   printf(" \n date_plutot de %d: %d", j, projet[j].date_plutot);
   }

printf("\n Tapper une touche ...");
scanf("%d", &i);
projet[nbr_tache+1].date_plutard = projet[nbr_tache+1].date_plutot;

// date au plutard
for(i = nbr_tache ; i >= 0; i--)
   {
   projet[i].date_plutard = MAX_INT;	   
   for(j = i + 1; j <= nbr_tache + 1; j++)
      {
      if(matrice[i][j] != -1)
        projet[i].date_plutard  = min (projet[j].date_plutard  -  matrice[i][j],
			               projet[i].date_plutard); 
      }	      
   printf(" \n date_plutard de %d: %d", i, projet[i].date_plutot);
   }
printf("\n Tapper une touche ...");
scanf("%d", &i);

// marges
for(i=0; i < nbr_tache +2; i++)
   {
    projet[i].marge = projet[i].date_plutard - projet[i].date_plutot;
    printf("\n La marge de %d: %d", i, projet[i].marge);
   }

printf("\n Tapper une touche ...");
scanf("%d", &i);

associe[som_ch] = -1;
pile[som] = 1;
som ++;
som_ch ++;

while(som > 0)
	{
	som --;
	i = pile[som];
	chemin[som_ch] = i;
	som_ch ++;
	for(j = i+1; j < nbr_tache + 2; j++)
   	  if(matrice[i][j] != -1)	
      	   {
      	   if(projet[i].marge == 0 && projet[j].marge == 0 )
        	{
		if(j != nbr_tache + 1)	
		   {
		   pile[som] = j;
		   associe[som] = i;
		   som++; 
		   }
                  else 
	             {
		     printf("\n ==> ");	     
		     for (k = 1; k < som_ch; k++)
			 printf(" %d ", chemin[k]);
		     for (k = 0; k < som_ch; k++)
		          if(som > 0 && chemin[k] ==  associe[som - 1])
			  {
			  som_ch = k + 1;
			  break;
			  }	
		     }		     
     	        }	
	   }
	}	

printf("\n");
return 0;
}

 Conclusion

C'est l'inplementation de l'algorithme PERT, pour vos questions suggestions contacter moi

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip TRANSFERT DE FICHIER VIA LE PROTOCOL TCP/IP
Source avec Zip TRANSFERT DE FICHIER VIA SOCKET UDP
SIMPLEX PRIMAL
Source avec Zip PROBLÈME DES 8 REINES GÉNÉRALISÉ
RECHERCHE DE MOTIF DANS UN TEXTE

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip ALGORITHME GÉNÉTIQUE RCPSP par pclover
Source avec Zip TRANSFERT DE FICHIER VIA LE PROTOCOL TCP/IP par Abdellah81

Commentaires et avis

Commentaire de deck_bsd le 10/07/2006 15:33:33

RRaaaa comment oses-tu poster ça ???? lol je rigole ;) mauvais souvenir :p . Bonne source .

Commentaire de markarove le 19/09/2006 12:26:09

Pas mal, sans option mais il marche tres bien.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ordonnancement de processus [ par GuinaweK ] Bonjour tout le monde, je suis en train de programmer un syst&#232;me d'ordonnancement de processus et je butte sur l'ordonnancement SJF preemptive, c ordonnancement des processus [ par malbackt ] Bonjou tout le monde;J'ai un projet sur l'ordonnancement des processus - politiques, objectifs, et étude du cas de l'unix-Si vous connaissez des liens algo ordonnancement [ par infogoss ] bonjour tout le monde j'aimerai bien savoir quelle sont les algorithmes adaptées au ordonnancement temps réel multiprocesseur et si il y a une docume ordonnancement [ par futur1ing1info ] Salut, j'ai un probleme d'ordonnancement qui utilise la politique tourniquet avec un quantum de temps qui peut etre superieur au temps d'execution de


Nos sponsors


Sondage...

Comparez les prix

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,811 sec (3)

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