# TD7 Info 121
## Exercice 1
1)
### Solution 1
```cpp=
int cardinal(Ensemble e){
int compteur = 0;
while (not estVide(e)){
Objet o = element(e);
retire(e, o);
compteur++;
}
return compteur;
}
```
2)
### Solution 1
```cpp=
bool inclus(Ensemble e, Ensemble b){
while (not estVide(e)){
Objet o =element(e);
retire (e,o);
if (not estDans( b, o))
return false;
}
return true ;
}
bool inclus(Ensemble e, Ensemble b){
if(cardinal(e) <= cardinal(b)){
while (not estVide(e)){
Objet o = element(e);
retire (e,o);
if(not estDans(b, o))
return false;
}
return true;
}else{
return false;
}
}
```
3)
### Solution 1
```cpp=
bool egal(Ensemble a, Ensemble b){
return inclus(a,b) and inclus(b,a);
}
```
4)
### Solution 1
```cpp=
Ensemble union(Ensemble e, Ensemble f){
while(not estVide(e)){
Objet o = element(e);
retire(e, o);
ajoute(f, o);
}
return f;
}
### Solution 2
```cpp=
Ensemble unionEns(Ensemble a, Ensemble b){
Ensemble unionEns;
ensVide(unionEns);
while (not estVide(a)){
Objet o = element(a);
ajoute(unionEns, o);
retire(a, o);
}
while (not estVide(b)){
Objet o = element(b);
ajoute(unionEns, o);
retire(b, o);
}
return unionEns;
}
```
### Solution 3
```cpp=
Ensemble unionEns(Ensemble c, Ensemble d){
Ensemble e;
ensVide(e);
while(not estVide(c)){
Objet o = element(c);
if(estDans(d,o)){
retire(c,o);
}else{
ajoute(e,o);
retire(c,o);
}
}while(not estVide(d)){
Objet p = element(d);
ajoute(e,p);
retire(d,p);
}
return e;
}
```
5)
### Solution 1
```cpp=
Ensemble interEns(Ensemble a, Ensemble b){
Ensemble inter;
ensVide(inter);
while(not estVide(a)){
Objet o = element(a);
if(estDans(b, o))
ajoute(inter, o);
retire(a, o);
}
return inter;
}
```
### Solution 2
```cpp=
//Code ici
```
### Solution 3
```cpp=
Ensemble interEns(Ensemble a, Ensemble b){
Ensemble intersection ;
ensVide(intersection) ;
ok att
while(not estVide(a)){
Object o = element(a);
retire(a,o)
if(estDans(b,o)){
ajoute(intersection,o)
}
}
return intersection;
}
//Code ici
```
7)
### Solution 1
```cpp=
void randEns(Ensemble &e, int n){
ensVide(e);
for(int i = 0; i < n; i++){
do{
Objet o;
randObj(o);
}while(estDans(e,o))
ajoute(e,o);
}
}
//Code ici
```
### Solution 2
```cpp=
void randomEns (int n, Ensemble &E) {
objet o; int i = 0;
ensVide(E);
while (i <= n) {
randomObj(o);
if (estDans(E,o) == false) {
ajoute(E,o) ;
i++;
}
}
}
```
## Exercice 2
### Réalisation 1
#### Stucture
```cpp=
const int MaxE = 100 ;
struct Ensemble{
bool t[MaxE] ;
};
```
```cpp=
bool estDans(Ensemble e, int o )
{
return e.t[o];
}
```
```cpp=
void ensVide(Ensemble &e)
{
for(int i=0; i<MaxE; i++){
e.t[i]=false;
}
}
```
```cpp=
void ajoute(Ensemble &e, int o)
{
e.t[o]=true;
}
void retire(Ensemble &e, int o){
e.t[o] = false;
}
```
### Réalisation 2
#### Structure
```cpp=
int MaxE=100;
struct Ensemble{
int t[MaxE];
int nbElements;
};
bool estDans(Ensemble e, int o){
for (int i = 0; i < e.nbElements; i++){
if (e.t[i] == o)
return true;
}
return false;
}
void ensVide(Ensemble &e){
e.nbElements = 0;
}
void ajoute(Ensemble &e, int o) {
if (not estDans(e, o) and e.nbElements < MaxE){
e.t[e.nbElements] = o;
e.nbElements++;
}
}
void retire(Ensemble &e, int o) {
int indice = -1;
for (int i = 0; i < e.nbElements; i++){
if (e.t[i] == o)
indice = i;
}
if (indice != -1){
e.t[indice] = e.t[e.nbElements-1];
e.nbElements--;
}
}
```
### Réalisation 3
```cpp=
int MaxE=100;
struct Ensemble{
int t[MaxE];
int nbElements;
};
void ensVide(Ensemble &e) {
e.nb = 0;
}
bool estDans(Ensemble e, int o){
for (int i = 0; i < e.nbElements and e.t[i]<=o; i++){
if (e.t[i] == o)
return true;
}
return false;
}
void ajoute(Ensemble &e, int o) {
if (not estDans(e, o) and e.nbElements < MaxE)
{
int i = 0;
while( i < e.nbElements and e.t[i] < o) i++ ;
if (i != e.nbElements) {
for(int j = e.nb; j >= i+1; j--) {
e.t[j] = e.t[j-1] ;
}
e.t[i]= o ;
e.nbElements++ ;
}
}
void retire(Ensemble &e, int o) {
int indice = -1;
for (int i = 0; i < e.nbElements and e.t[i]<=o; i++){
if (e.t[i] == o)
indice = i;
}
if indice!=-1
{
for(int j = indice; j < e.nbElements -1; j++) e.t[j] = e.t[j+1] ;
}
e.nb-- ;
}