# 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-- ;
}
}