salut ,je suis débutant en langage c ,j'ai du mal à faire du mpm (graphe ,planification mpm) une petite aide serai la bienvenu
Version imprimable
salut ,je suis débutant en langage c ,j'ai du mal à faire du mpm (graphe ,planification mpm) une petite aide serai la bienvenu
Qu'entends-tu par "j'ai du mal"?
Tu ne comprends pas le mpm, ou tu n'arrives pas à transposer en C ce que tu veux faire?
Tu m'as dis par MP que c'est la transposition en C du MPM qui te pose problème.
Commençons par le début.
Qu'as-tu déjà fait, que te manque-t-il?
Explique nous ce que tu veux obtenir précisément.
En français, pas en code, pour que nous puissions comprendre, et t'aider à le faire.
Je dois effectuer un graphe et une planification mpm
Graphe
Saisir le nombre de taches
Chemin le plus long + durée
Chemin le plus court + durée
Planification mpm
A) Saisir le tableau d'antériorité
B) Chemin critique + durée minimale du Projet
C) Impact du retard d'une tache sur le projet
D) Economie maximale réalisée
Durée maximale des Taches
Coût de la tache par allongement d'une unité de temps
Economie maximale
E) Coût de la réduction du projet
Afficher : Par exemple« le projet dure 22 semaines »
De combien voulez vous le réduire
Taches critiques
Durée minimale
Côté intelligence:
les mots clés sont que je vois sont:
- graphe
- tache
- durée d'une tache
- chemin le plus long (durée)
- chemin le plus court (durée)
- antériorité
- chemin critique
- Economie maximal
- cout
Je ne vois nulle part mention de "plusieurs taches paralleles"
Implicitement, il y a un graphe de dépendance entre les taches.
Il s'agit d'un probleme d'ordonnancement contraint.
Autre notion, les métriques.
Il te faut une ou plusieurs mesures, dont au moins une basée sur la durée des taches.
Tu cherches à chercher le chemin (parmi tous ceux possibles) qui minimise une certaine métrique.
Il faudra t'intéresser à de tels problèmes.
Coté code:
commence par choisir une représentation de graphe orienté pondéré.
par exemple:
de là, il te faut des fonctions de constructions et destruction.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 struct arete { struct noeud *source; struct noeud *cible; int poids; }; struct noeud { struct arete **aretes; /*si tableau de pointeurs*/ struct arete *aretes; /*si tableau de valeurs*/ int nombre_aretes; const char* nom; /* autres données, selon calculs à faire */ };
Viennent alors les fonctions de calculs, réfère-toi aux algorithmes (cf internet/tes cours/d'autres participants)Code:
1
2
3
4
5
6
7
8 typedef /* quelque chose */ graphe_t; graphe_t* nouveaugraphevide(); void ajouternoeudvide(const char* nom); void lier(graphe_t*, const char* source, const char* cible, int poids); void detruire_graphe(graphe_t*); void detruire_noeud(struct noeud*); void detruire_arete(struct arete*);
En cas de difficultés, penche toi sur deux problèmes plus simples:
- la liste chainée
- les arbres
Ce graphe n'est pas forcément très adapté, à toi de voire
Voila déjà de quoi (re-) commencer.