From 2ab7fc5464b6aadfaa81b77c88691954df745008 Mon Sep 17 00:00:00 2001 From: "thibaud.la_riviere-gillet" Date: Fri, 12 Jan 2024 16:53:00 +0100 Subject: [PATCH] p4 sans affichages --- srcs/part4.c | 37 +++++++++++++++++++++++++++++++++++++ srcs/structures.c | 11 ++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/srcs/part4.c b/srcs/part4.c index 0db0c73..7b420cf 100644 --- a/srcs/part4.c +++ b/srcs/part4.c @@ -1 +1,38 @@ #include "../includes/main.h" + +void traiterTaches(Tache **tabTache, int p_tmax) +{ + int i; + int dateCourante; + ListeAttente *file; + Tache *tacheCourante; + Liste successeurs; + Tache *successeur; + + file = NULL; + initialiserFileAttente(tabTache, p_tmax, &file); + while (!estVide(file)) + { + tacheCourante = defiler(&file); + dateCourante = tacheCourante->dateDebut; + successeurs = tacheCourante->succ; + while (successeurs) + { + successeur = trouverTache(tabTache, p_tmax, successeurs->tache); + successeur->dateDebut = max(successeur->dateDebut, dateCourante + tacheCourante->duree); + successeur->nbPred--; + if (successeur->nbPred == 0) + enfiler(&file, successeur); + successeurs = successeurs->nxt; + } + } + + for (i = 0; i < p_tmax; i++) + { + if (tabTache[i]->nbPred > 0) + { + printf("toutes les taches n'ont pas ete executees"); + exit(1); + } + } +} \ No newline at end of file diff --git a/srcs/structures.c b/srcs/structures.c index 91dc449..02fd12d 100644 --- a/srcs/structures.c +++ b/srcs/structures.c @@ -27,6 +27,15 @@ Liste newListe(void) return NULL; } +//file +void initialiserFileAttente(Tache **tabTache, int nbTaches, ListeAttente **fileAttente) +{ + for (int i = 0; i < nbTaches; i++) + if (tabTache[i]->nbPred == 0) + enfiler(fileAttente, tabTache[i]); +} + + /*------------verifications------------*/ // Verifie l'integrite d'une liste de devis @@ -211,7 +220,7 @@ Liste lstSucc(char travaux[], Precedence prec[], int tlog) trace("lstSucc"); int i; Liste succ; - + succ = newListe(); for (i=0; i