1 2 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