# TD 7 exo 2 // on initialise e.nb à 0 POUR LE tableau vide void ensVide(Ensemble &e){ e.nb = 0; // ceci suffit largement // car e.nb = 0 veut dire que le tableau ne contien aucun élémént } // attention il faut vérifier si le tableau n'est pas plein // IL FAUT INDENTER VOS CODES pour plus de clarté void ajoute(Ensemble &e, int o){ if(e.nb== MaxE){ cout<<"impossible d'ajouter l'objet"<<endl; } else { e.t[e.nb] = o; e.nb = e.nb +1; } } ##mhamed void retirer(Ensemble &e, int o){ if(estDans(o)== false ){ cout<<"L'objet n'est pas dans l'ensemble et ne peut être retirer"<< endl; } else { for (int i =0; i<MaxE; i++){ if(t[i] == o){ e.t[i]= e.t[i+1] ; //non, il faut déplacer tous les éléments à droite de o e.nb = e.nb - 1; } } } } // omar void ajoute(Ensemble &e, int o) { if (e.nb==MaxE+1) { cout<<"impossible d'ajouter l'objet"<<endl; exit(1); } e.t[e.nb] = o; e.nb++; } // omar void retire(Ensemble &e, int o) { if(not estDans(e, o)) { exit(1); } for (int i=0; i<=MaxE; i++) { if(e.t[i]==o) { for(int j=i; j<=MaxE; j++;) { e.t[j] = e.t[j+1]; } e.nb--; //si on ne met pas "exit(1)" le programme ne va pas continuer la première boucle ? (et donc retirer tout les objets o) } } } // corrigé du Prof void retire(Ensemble &e, int o) { int pos = 0; while (pos <e.nb and e.t[pos] !=o) pos++; if (pos != e.nb) { for (int i= pos; i < e.nb -1; i++) e.t[i] = e.t[i+1]; e.nb--; } } * Realisation 3 // même structure qu'avant mais tableau trié // omar void estDans(Ensemble &e, int o) { int i=0; while (i<e.nb and e.t[i]<=o){ if (e.t[i]==o){ return true; } i++; } return false } // corrigé du Prof bool estDans(Ensemble e, int o) { int i=0 ; while(i < e.nb AND e.t[i] <= o){ if (e.t[i] ==o) return true; i++ ; } return false; } La procedure ensVide ne change pas void ajoute(Ensemble &e, int o){ int pos=0; for (int i=0; e.t[i]<=o; i++){ pos++; } for (int i=MaxE+1; i>=pos; i--){ e.t[i]=e.t[i-1]; } e.t[pos] = o; e.nb++; } // corrigé du Prof void ajoute(Ensemble &e, int o) { if (not estDans(e, o) and e.nb <MaxE) { int i =0; while( i <e.nb and e.t[i] <o) i++ ; // on sort de cette boucle avec l’indice i ou o doit etre rangé if (i !=e.nb) { for(int j =e.nb; j >= i+1; j--){ e.t[j] = e.t[j-1] ; } e.t[i]= o ; e.nb++ ; } } //corrigé du Prof void retire(Ensemble &e, int o){ int i = 0; while(i < e.nband e.t[i] != o ) i++ ; if (i != e.nb) { // sinon, il n’y est pas? for(int j =i; j < e.nb -1;j++) e.t[j] = e.t[j+1]; e.nb-- ; } }