retour au sujet

CORRECTION
DESS TSI - Première session 2005
Option Mécanique et Matériaux
Informatique Appliquée à la Mécanique

#include<iostream.h>

// Q1

class date
 {
 private :
  int a,j;
 public :
  void set_annee(int i) {a=j;}
  void set_jour(int i) {j=i;}
  int get_annee(void) {return a;}
  int get_jour(void) {return j;}
  void affichage(void) {cout<<j<<"è jour de "<<a;}
  void saisie(void) 
   { cout<<"jour ?";cin>>j;
     cout<<"année ?";cin>>a; }
  void ajouter(int nbjours);
 };

int egal(date d1,date d2) //passage par référence serait mieux mais pas obligé
{return ((d1.get_jour()==d2.get_jour()) && (d1.get_annee()==d2.get_annee()));}
int inferieur(date d1,date d2)
{
 if(d1.get_annee()<d2.get_annee())return 1;
 else if(d1.get_annee()==d2.get_annee() && d1.get_jour()<d2.get_jour())return 1;
 else return 0;
}

//surcharges des operateurs
ostream& operator<< (ostream &f, date &d){d.affichage();return f;}
istream& operator>> (istream&f, date &d){d.saisie();return f;}
int operator== (date d1, date d2){return egal(d1,d2);}
int operator< (date d1, date d2){return inferieur(d1,d2);}

void date::ajouter(int nbjours){
 int lng=365+(a%4==0); j+=nbjours;
 if(nbjours>lng) {a++;j-=lng;}}

// Q2

class etape {
 private :
  date tot, tard;
 public :
  void set_tot(date i) {tot=i;}
  void set_tard(date i) {tard=i;}
  date get_tot(void) {return tot;}
  date get_tard(void) {return tard;}
  void affichage(void) {cout<<"entre "<<tot<<" et "<<tard;}
  void saisie(void) 
    {cout<<"date au plus tôt : ";cin>>tot;
     cout<<"date au plus tard : ";cin>>tard; }
};
//surcharges des operateurs
ostream& operator<< (ostream &f, etape &d){d.affichage();return f;}
istream& operator>> (istream &f, etape &d){d.saisie();return f;}

// Q3

#define DIM 100
class etapes {
 private :
  etape et[DIM];
  int nb;
 public :
  int get_nb(void) {return nb;}
  etape get_etape(int i) {return et[i];}
  void affichage(void) 
   {int i;for(i=0;i<nb;i++)cout<<et[i];}
  void saisie(void) 
    {cout<<"nombre d'étapes ? ";cin>>nb;
     int i;for(i=0;i<nb;i++)cin>>et[i]; }
};

// Q4

class tache {
 private :
  int duree,deb,fin;
 public : 
  void set_duree(int i) {duree=i;}
  void set_deb(int i) {deb=i;}
  void set_fin(int i) {fin=i;}
  int get_duree(void) {return duree;}
  int get_deb(void) {return deb;}
  int get_fin(void) {return fin;}
  void affichage(void) {cout<<duree<<" jours entre "<<deb<<" et "<<fin;}
  void saisie(void) 
   { cout<<"duree ?";cin>>duree;
     cout<<"étape début ?";cin>>deb;
     cout<<"étape fin ?";cin>>fin;
  }
};
ostream& operator<< (ostream &f, tache &d){d.affichage();return f;}
istream& operator>> (istream &f, tache &d){d.saisie();return f;}

class taches {
 private :
  tache t[DIM];
  int nb;
 public :
  int get_nb(void) {return nb;}
  tache get_tache(int i) {return t[i];}
  void affichage(void) 
   {int i;for(i=0;i<nb;i++)t[i].affichage();}
  void saisie(void) 
    {cout<<"nombre de tâches ? ";cin>>nb;
     int i;for(i=0;i<nb;i++)t[i].saisie(); }
};

// Q5

int operator > (date d1,date d2)
 {return  !(d1==d2 || d1<d2 ) ; }

int main(void)  
 {
  taches mestaches;
  etapes mesetapes;
  int i;
  mestaches.saisie();
  mesetapes.saisie();
  for(i=0;i<mesetapes.get_nb();i++) 
   {
     etape actu;
     date o,a;
     actu=mesetapes.get_etape(i);
     o=actu.get_tot();a=actu.get_tard();
     if(o>a) cout<<actu<<": erreur, tot>tard !\n";    
   }
  for(i=0;i<mestaches.get_nb();i++)
   {
     tache actu;
     etape edeb,efin;
     date ddeb,dfin ;
     actu=mestaches.get_tache(i);
     edeb=mesetapes.get_etape(actu.get_deb());
     efin=mesetapes.get_etape(actu.get_fin());
     ddeb=edeb.get_tot();
     dfin=efin.get_tot();
     ddeb.ajouter(actu.get_duree());
     if(ddeb>dfin)cout<<actu<<": erreur\n";
   }
 }
 
// Q6 : je ne refais pas le cours ici 


retour au  sujetPatrick TRAU, ULP - IPST mars 05