#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
Patrick
TRAU, ULP - IPST
mars 05