#include #include int rancab,ranben,pas; int er=0; int besoincabaret; int besoinbenne; /////////////////// CLASSE DE TEMPS ////////////////// class time { private: int heure; int min; public : void avance1pas(void); time(int HH,int MM); int direheure(void); }; time::time(int HH,int MM){ //constructeur qui fixe l'heure heure=HH;min=MM;} void time::avance1pas(void) //avance l'horloge de 1 pas et avance l'heure { min=min+5; if (min>=60) {min=min-60;heure++;} if (heure==24) heure=0; } int time::direheure(void){ //fonction qui lit l'heure dans la partie privee return heure;}; /////////////////////// ELECTROLYSE //////////////////////////////// class electrolyse{ private: double cab_complet; //fraction de cabaret complete double benne_complet; //fraction de benne complete public: void electrolyseGestion(void); //fonction qui gere le debit d,entree/sortie //des bennes et cabarets electrolyse::electrolyse(void); }; electrolyse::electrolyse(void){ //constructeur cab_complet=0; benne_complet=0; }; void electrolyse::electrolyseGestion(void){ besoincabaret=0; ////met les flag de besoin par default a 0 besoinbenne=0; cab_complet=cab_complet+0.276389; // somme du ratio de cabarets a entrer par pas. 19.9cab/h=0.276389/pas if (cab_complet>=1){besoincabaret=1;// voir s'il est temps de rentrer et sortir cabaret cab_complet--;} //si oui, le l'indiquer au main par ce flag benne_complet=benne_complet+0.29167; // somme du ratio de bennes a entrer par pas. 3,5/h=.29167/pas if (benne_complet>=1){besoinbenne=1;// voir s'il est temps de rentrer et sortir benne benne_complet--;} // si oui, le l'indiquer au main par ce flag cout<<"\ncab_complet : "<=1){ // si un creuset complet arrive de l'eletrolyse creuset_complet--; //decremente la fraction de creuset complete de 1 NombreCreusetTraites++; // augmenter le nombre de creuset en traitement if (NombreCreusetTraites==7) //si le nombre de creuset=7 alors un creuset est terminer //car il a passe assez de temps dansla fonderie {cout<<"10 tonnes produites"; //indiquer que 10 tonnes viennent d'etre produites NombreCreusetTraites--;} //diminuer de 1 le nombre de creusets en traitement } //car celui d'avant est sorti }; ///////////////////////// SELLEMENT ///////////////////// class sellement{ private: double cab_complet; // fraction de cabaret complete public: sellement(void); ~sellement(void); int sellementGestion(int heure); //fonction gerant la salle de sellement }; sellement::sellement(){cab_complet=0;} //constructeur & destructeur sellement::~sellement(){} int sellement::sellementGestion(int heure){ int valret=0; //flag indiquant au main s'il faut renter et // sortir des cabaretsde megots et d'anodes if ((heure!=7)&&(heure!=15)&&(heure!=23)) //execution du travail en dedans des //quarts de travail seulement. { cab_complet=cab_complet+0.93056; // somme du ratio de cabarets traites par pas. if (cab_complet>=1) //si un cabaret est complet?... {valret=1; //indique au main de rentrer et sortir cabaret cab_complet--;} //baisse la fraction de 1 cabaret } return valret; //retourne le flag de l'ordre entree/sortie au main }; //////////////////// ENTREPOT /////////// /* il est a noter que pour simplifier les choses, j'ai separe l'entrepot en deux objets distincts soit entrepot pour bennes et cabaret. Ceci car malgre leur similitudes de comportements, il n'ont pas un contenu pareil. En effet on a des rangee qui n'ont pas la meme taille et le meme contenu etc.. . */ class entrepotbennes { private: int * typeRangee; int * NbBennes; int * TempsRefroid; int taille; public: void afficher(void); entrepotbennes(int nbVoulu); ~entrepotbennes(void); void placerbenne(void); void prendrebenne(void); void refoidirbenne(void); void placerbennevide(int nombre); }; ////////// construit l'entrepot de bennes /////////// /////constructeur qui declare les rangee selon le nb voulu de rangee entrepotbennes::entrepotbennes(int nbVoulu){ if (nbVoulu > 0) { typeRangee = new int[nbVoulu]; //case pour type de rangee NbBennes = new int[nbVoulu]; //case pour Nombre de bennes contenue TempsRefroid = new int[nbVoulu];}; //case pour temps de refroidissement restant for (int i=0;i10) cout<<" ";cout<<" "<10) cout<<" ";cout<<" "<10) cout<<" ";cout<<" "<0)) typeRangee[i]=2; }; }; //fonction qui permet de retirer une benne de l'entrepot pour l'electrolyse void entrepotbennes::prendrebenne(void){ int i=0; er=1; for (i=0;i 0) { typeRangee = new int[nbVoulu]; /////declare les rangee selon le nb voulu Nbcabaret = new int[nbVoulu]; TempsRefroid = new int[nbVoulu];}; for (int i=0;i10) cout<<" ";cout<<" "<10) cout<<" ";cout<<" "<10) cout<<" ";cout<<" "<0)) typeRangee[i]=2; }; }; ////fonction qui permet de prendre un cabaret de megot dans l'entrepot par l'electrolyse void entrepotcabaret::prendrecabaretmegot(void){ int i=0; er=1; for (i=0;i>rancab; cout<<"\nNb de rangees de bennes disponibles dans l'entrepot? :"; cin>>ranben; cout<<"\nNb de cabarets d'anodes au depart dans l'entrepot ? :"; cin>>cabano; cout<<"\nNb de cabarets de megots froid au depart dans l'entrepot ? :"; cin>>cabmeg; cout<<"\nNb de bennes vides au depart dans l'entrepot ? :"; cin>>benvid; cout<<"\nQuel est le pas (1=5min,2=10min,3=15min)? "; cin>>pas; cout<<"\nQuel est la duree de la simulation en pas? "; cin>>duree; cout<<"Cette simulation est pour une production de 40 tonnes/h....\n\n\n"; entrepotbennes ranbennes(ranben);///initialise l'entrepot des bennes entrepotcabaret rancabaret(rancab);///initialise l'entrepot des cabaret ranbennes.placerbennevide(benvid);///mettrebennes vides dans entrepot rancabaret.placercabaretmegotfroid(cabmeg); //placer les cabaret de depart for (i=0;i