---
# System prepended metadata

title: TD 7 exo 2

---

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