* #include * #include * #include * #include * * * const int maxc=100; * const int maxtaches=100; * const int maxcar=10; * * char ch[maxtaches][maxcar];//pour sauvegarder les codes saisis * int nb=0;//nbre d elts dans ch * * class processus; * * class ordonnanceur * { * processus *p; * public: * ordonnanceur(); * ~ordonnanceur(); * void ajouter_proc(char*,char*,int,int,int); * void desactiver_proc(processus*); * void activer_proc(processus*); * void ordonner_proc_fifo(); * void ordonner_proc_lifo(); * void ordonner_proc_prio(); * void fifo(); * void lifo(); * void priorite(); * void quantum(); * void executer_proc(); * void executer_proc_quantum(); * void modifier(); * processus* selectionner_proc(char*); * processus* processus_non_execute(); * void affichage_tout_proc(); * }; * * * * class processus * { * * char code[maxcar]; * int prio; * char nom[maxcar]; * bool actif; * int inst_ar,t_ex,t_cons; * processus* suiv; * * public: * friend void ordonnanceur::ajouter_proc(char*,char*,int,int,int); * processus(); * processus(char*,char*,int,int,int); * void affichage_proc_coursd_execution(); * void affichage_proc_coursd_execution_quantum(int); * void affichage_donnees_proc(); * void modifie_proc(); * char* getcode(){return code;} * char* getnom(){return nom;} * int& getprio(){return prio;} * int& getinst_ar(){return inst_ar;} * int& gett_ex(){return t_ex;} * int& gett_cons(){return t_cons;} * bool& getactif(){return actif;} * processus* getsuiv(){return suiv;} * * }; * * * * * * processus::processus() * { * strcpy(code,"\0"); * prio=0; * strcpy(nom,"\0"); * actif=false; * inst_ar=0; * t_ex=0; * t_cons=0; * suiv=NULL; * } * * processus::processus(char*cod,char* n,int priorite,int temps_ex,int inst_arriv) * { * strcpy(code,cod); * strcpy(nom,n); * prio=priorite; * t_ex=temps_ex; * t_cons=0;; * inst_ar=inst_arriv; * suiv=NULL; * actif=false; * } * * * ordonnanceur::ordonnanceur() * { * p=NULL; * } * * * ordonnanceur::~ordonnanceur() * { * processus* q; * while(p!=NULL) * { * q=p; * p=p->getsuiv(); * delete q; * } * } * * void ordonnanceur::ajouter_proc(char* cod,char* n,int priorite, * int temps_ex,int inst_arriv) * { * static processus* dernier_proc; * * if(p==NULL)//insertion du 1er processus * { * p=new processus(cod,n,priorite,temps_ex,inst_arriv); * dernier_proc=p; * } * else * { * dernier_proc->suiv=new processus( cod,n,priorite,temps_ex,inst_arriv); * dernier_proc=dernier_proc->suiv; * } * } * * * bool existe_deja(char* cod) * { * * int k=0; * while((k9) * cout<<"donner un code de longueur <10"<>cod; * } * while(existe_deja(cod)||strlen(cod)>9); * strcpy(ch[nb],cod); * nb++; * return(cod); * } * * char* saisie_nom() * { * int j=0; * static char n[maxc]; * do * { * j++; * if(j==1) * cout<<"donner un nom"<>n; * } * while(strlen(n)>9); * return(n); * } * * void saisir_donnees_proc(int i,char* cod,char* n,int& priorite, * int& temps_ex,int& inst_arriv) * { * cout<<"\t\tla saisie du processus "<<(i+1)<>priorite; * } * while(priorite<1); * do * { * cout<<"donner l instant d arrivee"<>inst_arriv; * } * while(inst_arriv<1); * do * { * cout<<"donner le temps d execution"<>temps_ex; * } * while(temps_ex<1); * * } * * void permuter(processus* j,processus* q) //permuter 2 processus * { * char ch[maxcar]; * int aux; * strcpy(ch,j->getcode()); * strcpy(j->getcode(),q->getcode()); * strcpy(q->getcode(),ch); * strcpy(ch,j->getnom()); * strcpy(j->getnom(),q->getnom()); * strcpy(q->getnom(),ch); * aux=j->getprio(); * j->getprio()=q->getprio(); * q->getprio()=aux; * aux=j->getinst_ar(); * j->getinst_ar()=q->getinst_ar(); * q->getinst_ar()=aux; * aux=j->gett_ex(); * j->gett_ex()=q->gett_ex(); * q->gett_ex()=aux; * aux=j->gett_cons(); * j->gett_cons()=q->gett_cons(); * q->gett_cons()=aux; * aux=j->getactif(); * j->getactif()=q->getactif(); * q->getactif()=aux; * } * * * * * * void ordonnanceur::ordonner_proc_fifo() * { * processus* j; * processus* q=p; * * while(q->getsuiv()) * { * j=q->getsuiv(); * while(j) * { * if(j->getinst_ar()getinst_ar()) * permuter(j,q) ; * j=j->getsuiv(); * } * q=q->getsuiv(); * } * } * * * void ordonnanceur::ordonner_proc_lifo() * { * processus* j; * processus* q=p; * * while(q->getsuiv()) * { * j=q->getsuiv(); * while(j) * { * if(j->getinst_ar()>q->getinst_ar()) * permuter(j,q) ; * j=j->getsuiv(); * } * q=q->getsuiv(); * } * } * * * * void ordonnanceur::ordonner_proc_prio() * { * processus* j; * processus* q=p; * * while(q->getsuiv()) * { * j=q->getsuiv(); * while(j) * { * if(j->getprio()>q->getprio()) * permuter(j,q) ; * j=j->getsuiv(); * } * q=q->getsuiv(); * } * } * * void ordonnanceur::desactiver_proc(processus* q) * { * q->getactif()=false; * } * * * void processus::affichage_proc_coursd_execution() * { * t_cons=0;//au cas ou on reexecute le processus * * gotoxy(1,wherey()); * cout<getactif()=true; * } * * void affichage_entete() * { * cout<<"code"; * gotoxy(11,wherey()); * cout<<"nom"; * gotoxy(20,wherey()); * cout<<"t_arrivee"; * gotoxy(35,wherey()); * cout<<"priorite"; * gotoxy(49,wherey()); * cout<<"t_ex"; * gotoxy(59,wherey()); * cout<<"t_cons"; * gotoxy(71,wherey()); * cout<<"actif"; * cout<affichage_proc_coursd_execution(); * desactiver_proc(q); * q=q->getsuiv(); * } * } * * * processus* ordonnanceur::processus_non_execute() * { * processus* q=p; * while((q)&&(q->gett_cons()==q->gett_ex())) * q=q->getsuiv(); * return q; * } * * void processus::affichage_proc_coursd_execution_quantum(int quant) * { * * int compt=0; * if(t_cons>quant; * } * while(quant<1); * affichage_entete(); * * while(q) * { * q->gett_cons()=0; * q=q->getsuiv(); * } * * while(processus_non_execute()) * { * q=processus_non_execute(); * while(q) * { * activer_proc(q); * q->affichage_proc_coursd_execution_quantum(quant); * desactiver_proc(q); * q=q->getsuiv(); * } * } * } * * void ordonnanceur::fifo() * { * clrscr(); * cout<getcode(),cod)) * q=q->getsuiv(); * return q; * } * * void supprimecod_ch(char* cod) * { * int i=0; * while(strcmp(cod,ch[i])) * i++; * while(i>choix; * } * while((choix<1)||(choix>5)); * cout<>prio; * } * while(prio<1); * break; * case 4: do * { * cout<<"donner l instant d arrivee"<>inst_ar; * } * while(inst_ar<1); * break; * case 5: do * { * cout<<"donner le temps d execution"<>t_ex; * } * while(t_ex<1); * break; * } * * * t_cons=0; * } * * * void processus::affichage_donnees_proc() * { * cout<<"nom="<affichage_donnees_proc(); * q=q->getsuiv(); * } * } * * * * * void ordonnanceur::modifier() * { * char cod[maxc]; * int i=0; * do * { * if(i==0) * cout<<"donner le code du processus a modifier"<>cod; * i++; * } * while(existe_deja(cod)==false); * processus*q=selectionner_proc(cod); * q->modifie_proc(); * cout<affichage_donnees_proc(); * cout<>nb_tache; * } * while((nb_tache<=0)||(nb_tache>maxtaches)); * * for(i=0;i>choix; * } * while((choix<1)||(choix>7)); * clrscr(); * switch(choix) * { * case 1: o.affichage_tout_proc(); * cout<<"tapez sur une touche pour continuer"<