| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 
 | #include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef int (*compfn) (const void *, const void *);
 
struct tache
{
  int release_date;
  int duree;
  int due_date;
  int id_tache;
};
 
typedef struct
{
  int date_disponibilite;
}
machine;
 
struct tache job[] = {
  {3, 0, 4, 1}, {5, 3, 5, 2}, {1, 4, 12, 3}, {2, 7, 10, 4}, {4, 8, 11, 5}
};
/*fonction tri par ordre croissant de sa date de fin*/
int compare (struct tache *elem1, struct tache *elem2)
{
  if (elem1->due_date < elem2->due_date)
      return -1;
  else if (elem1->due_date > elem2->due_date)
      return 1;
  else
      return 0;
}
 
void printarray (void)
{
  int i;
 
  for (i = 0; i < 5; i++)
      printf ("  %d ", job[i].id_tache);
 
}
 
int main (void)
{
  float temps;
  clock_t t1 = clock (), t2;
  machine Machines[3];
  int id_machineDispo;
  int retardsTotaux = 0;
  int retards, j, k;
 
  qsort ((void *) &job, 5, sizeof (struct tache), (compfn) compare);
  printf ("\n due_date tache par ordre croissant\n");
  printarray ();
  printf ("\n");
 
  for (j = 0; j < 3; j++)
  {
      Machines[j].date_disponibilite = 0;
  }
  /* pour toute les taches */
  for (k = 0; k < 5; k++)
  {
 
      id_machineDispo = 0;
 
      /* trouver la machine disponible plus tot */
      for (j = 0; j < 3; j++)
      {
        if (Machines[j].date_disponibilite <
            Machines[id_machineDispo].date_disponibilite)
 
            id_machineDispo = j;
 
      }
 
      /* calculer date fin tache sur machine */
      if (k < 3)
 
        Machines[id_machineDispo].date_disponibilite +=
            job[k].duree + job[k].release_date;
 
      if (k >= 3)
 
        Machines[id_machineDispo].date_disponibilite += job[k].duree;
 
      /* affichage affectation */
      printf ("\n date disponibilite  machine %d egale : %d ",
              id_machineDispo, Machines[id_machineDispo].date_disponibilite);
      printf ("\n placer tache %d sur machine %d", job[k].id_tache,
              id_machineDispo);
      printf ("\n");
      /* calcul retard et retards totaux */
      retards =
        Machines[id_machineDispo].date_disponibilite - job[k].due_date;
      printf ("\n retards : %d", retards);
      printf ("\n");
      if (retards > 0)
        retardsTotaux += retards;
 
      /* affichage retards totaux */
      printf ("\n retards totaux : %d\n", retardsTotaux);
  }
  t2 = clock ();
  temps = (float) (t2 - t1) / CLOCKS_PER_SEC;
  /* temps exécution application */
  printf ("temps = %f\n", temps);
 
  return 0;
} | 
Partager