| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 
 |  
class CGroupe {
 
   protected : 
 
	   CPersonne tab[100];
	   int index;
 
   public :
 
	   CGroupe();
	   void ajouter();
	   void lister();
	   int compter();
	   void supprimer();
	   int trouver(int numqui);
	   int vide();
	   int plein();
	   void intersection(CGroupe E1,CGroupe E2);
	   void Union(CGroupe E1, CGroupe E2);
	   void retirer();
	   void init1();
	   void init2();
 
 
 
};
 
 
CGroupe::CGroupe() {
 
	index=0;
}
 
void CGroupe::lister() {
 
	int i =0;
	for(;i<index;i++)
		tab[i].afficher();
}
 
void CGroupe::ajouter() {
 
	CPersonne aux;
	int i=1;
	int j=0;
 
	if(index<100)
	{
		aux.saisir();
		while((aux.recupnum()<tab[index-i].recupnum()) && ((index-i)>-1))
		{
			tab[index-j].copier(tab[index-i]);
			i++;
			j++;
		}
		i--;
		tab[index-i].copier(aux);
		index++;
	}
 
	else
		std::cout << "Tableau plein\n";
}
 
int CGroupe::trouver(int numqui) {
 
	int i=0;
 
	if(!index)
		return -1;
	while((tab[i].recupnum() < numqui) && (i < index))
		i++;
	if(tab[i].recupnum() == numqui)
		return i;
	else
		return -1;
 
}
 
void CGroupe::intersection(CGroupe E5,CGroupe E6) {
 
	int i=0;
	for(;i<=E5.index;i++)
 
		if(E6.trouver(E5.tab[i].recupnum())!=-1)
		{
			tab[index].copier(E5.tab[i]);
			index++;
		}
}
 
void CGroupe::retirer() {
 
	int numqui=0;
	int k=0;
 
	std::cout << "numéro à supprimer ? ";
	std::cin >> numqui;
	k=trouver(numqui);
	if(k!=-
		1)
	{
		while(k<(index-1))
		{
			tab[k].copier(tab[k+1]);
			k++;
		}
		index--;
	}
	else
		std::cout << " le num n'existe pas";
}
 
void CGroupe::Union(CGroupe E1,CGroupe E2){//RENVOI UNE ERREUR. LE DEBOGUEUR INDIQUE QUE LE PROBLEME PROVIENT DE copier() ( CLASSSE CPersonne).
/* Cette procédure commence par définir lequel des premiers éléments de E1 ou de E2 est le plus petit puis elle le place dans la liste E3.
Supposons que ce soit celui de la liste E1 qui soit le plus petit elle incrémente i1 pour signifier que le premier élément de E1 à été traité.
Puis elle compare de même le second élément de E1 au premier élément de E2 et place celui qui à le plus petit numero dans E3 et ainsi de suite...*/
	int i1=0;
	int i2=0; //i1 et i2 sont des compteurs qui indiquent la progression dans les listes E1 et E2
 
	while (i1<E1.index || i2<E2.index){
		if (E1.tab[i1].recupnum()<E2.tab[i2].recupnum()){
			tab[index].copier(E1.tab[i1]);
			i1++;
			index ++;
		}
		if (E1.tab[i1].recupnum()>E2.tab[i2].recupnum()){
			tab[index].copier(E2.tab[i2]);
			i2++;
			index ++;
		}
		if (E1.tab[i1].recupnum()==E2.tab[i2].recupnum()){
			tab[index].copier(E1.tab[i1]);
			i1++;
			i2++;
			index ++;// en cas d'éléments communs c'est celui de E1 qui est copié dans E3 et les deux compteurs i1 et i2 sont incrémentés pour passer à l'élément suivant dans les deux listes
		}
	}
	if (i1==E1.index-1 && i2<E2.index-1){
		while (i2<E2.index){
			tab[index].copier(E2.tab[i2]);
			i2++;
			index ++;
		}
	}
	if (i2==E2.index-1 && i1<E1.index-1){
		while (i1<E1.index){
			tab[index].copier(E1.tab[i1]);
			i1++;
			index ++;
		}
	}
 
}
 
 
void CGroupe::init1()
{
	tab[0].mettre(1,"un");
	tab[1].mettre(2,"deux");
	tab[2].mettre(3,"trois");
	tab[3].mettre(8,"huit");
	index=4;
}
 
void CGroupe::init2()
{
	tab[0].mettre(2,"deux");
	tab[1].mettre(5,"cinq");
	tab[2].mettre(6,"six");
	tab[3].mettre(31,"trente et un");
	index=4;
} | 
Partager