Commit cc866edf authored by Benoit AUGER--DUBOIS's avatar Benoit AUGER--DUBOIS
Browse files

finis

parent a9aeee1e
......@@ -25,8 +25,13 @@ struct t_etudiante {
// fonction qui demande a l'utilisateur d'entrer le nom de l'étudiante puis l'assigne a la structure.
void changeEtuName (vector <t_etudiante> &tetu, int indice){
cout << "Entrer le nom et le prénom de l'étudiante." << endl;
getline(cin,tetu[indice].nom_prenom); // utilisation de getline pour prendre en compte les espaces.
string nom;
cout << "Entrer le nom de l'étudiante : " << endl;
cin.clear();
cin.sync();
cin.ignore();
getline (cin,nom);
tetu[indice].nom_prenom = nom;
}
/* forme un binome de 2 étudiantes a l'aide de pointeurs, on part du principe qu'un étudianr peut avoir 1 seul binome
......@@ -45,8 +50,7 @@ void formBinome (t_etudiante &etu1 , t_etudiante &etu2){
// etu2 avait un binome il faut désallouer le pointeur de son binome.
etu1.binome = &etu2;
etu1.isBinome = true;
etu2.binome->isBinome = false;
delete etu2.binome->binome; // permet d'éviter que 2 étudiant soit en binome avec etu2 en même temps.
delete (etu2.binome)->binome; // permet d'éviter que 2 étudiant soit en binome avec etu2 en même temps.
etu2.binome = &etu1;
etu2.isBinome = true;
}
......@@ -56,15 +60,15 @@ void formBinome (t_etudiante &etu1 , t_etudiante &etu2){
// etu 2 n'avait pas de binome.
etu2.binome = &etu1;
etu2.isBinome = true;
etu1.binome->isBinome = false;
delete etu1.binome->binome; // permet d'éviter que 2 étudiant soit en binome avec etu1 en même temps.
(etu1.binome)->isBinome = false;
delete (etu1.binome)->binome; // permet d'éviter que 2 étudiant soit en binome avec etu1 en même temps.
etu1.binome = &etu2;
etu1.isBinome = true;
} else {
// etu2 et etu1 avait un binome il faut désallouer le pointeur de son binome.
etu1.binome->isBinome = false;
(etu1.binome)->isBinome = false;
delete etu1.binome->binome;
etu2.binome->isBinome = false;
(etu2.binome)->isBinome = false;
delete etu2.binome->binome;
etu1.binome = &etu2;
etu1.isBinome = true;
......@@ -81,9 +85,9 @@ void formBinome (t_etudiante &etu1 , t_etudiante &etu2){
void affBinome (t_etudiante etu){
if ( etu.isBinome == true){
if ( etu.isBinome ){
cout << "Binôme : " << etu.nom_prenom << " est avec : " <<
etu.binome->nom_prenom << endl;
(etu.binome)->nom_prenom << endl;
} else {
cout << " Sans binôme : " << etu.nom_prenom << endl;
}
......@@ -92,8 +96,8 @@ void affBinome (t_etudiante etu){
// désalouer les pointeurs des étudiants du binome.
void breakBinome (t_etudiante &etu){
if (etu.isBinome){
etu.binome->isBinome = false;
delete etu.binome->binome;
(etu.binome)->isBinome = false;
delete (etu.binome)->binome;
delete etu.binome;
etu.isBinome = false;
}
......@@ -112,13 +116,14 @@ int countInTab(int test, vector<int> tab){
}
// affiche les binomes sans doublons d'un groupe d'étudiants contenu dans un tableau dynamique
void affTabEtu (vector <t_etudiante> etu){
vector<int> tabMemorize2; // tableau utile pour l'affichage des binomes sans doublons, mémorize les numéros étudiants deja affichés.
void affTabEtu (vector <t_etudiante> etu, vector <int> &memo){
for (int y = 0; y < etu.size() ; y++){
tabMemorize2.push_back(etu[y].nu_etu); // la place dans le tableau est arbitraire, seuls les valeurs nu.etu m'intérèsse.
tabMemorize2.push_back(etu[y].binome->nu_etu);
if (etu[y].isBinome){
memo.push_back(etu[y].nu_etu); // la place dans le tableau est arbitraire, seuls les valeurs nu.etu m'intérèsse.
memo.push_back( (etu[y].binome)->nu_etu );
}
// évite d'afficher 2 fois le même binome
if (countInTab(etu[y].nu_etu, tabMemorize2) < 2 && countInTab(etu[y].binome->nu_etu, tabMemorize2) < 2){
if (countInTab(etu[y].nu_etu, memo) < 3 ){
affBinome(etu[y]);
}
}
......@@ -129,6 +134,8 @@ void addNumEtu (vector <t_etudiante> &tetu, vector <int> &memo, int indice){
int temp;
cout << "entrer le numéro de l'étudiant : " << endl;
cin >> temp;
cin.clear();
cin.sync();
// verifie que le numéro n'éxiste pas deja et qu'il est valide.
if (temp > 0 && countInTab(temp,memo) == 0){
tetu[indice].nu_etu = temp;
......@@ -138,33 +145,54 @@ void addNumEtu (vector <t_etudiante> &tetu, vector <int> &memo, int indice){
}
}
int findIndice(int nb, vector <t_etudiante> tab){
for (int indice=0 ; indice <= tab.size()-1; indice++ ){
if (tab[indice].nu_etu == nb){
return indice;
}
}
return -1;
}
int main(){
int numberOfStudents;
cout << "Entrer le nombres d'étudiant du groupe" << endl;
cin >> numberOfStudents;
cin.clear();
cin.sync();
const int nb = numberOfStudents;
if (numberOfStudents > 0){
vector<t_etudiante> tabEtu (nb); // création du tableau dynamique aussi appelée vector.
vector<int> tabMemorize; // mémorize les numéros étudiants.
vector<int> tabMemorize (nb); // mémorize les numéros étudiants.
int indiceT = 0;
while (indiceT < tabEtu.size()){ // remplis le tableaux d'étudiants d'information valide sur les étudiants.
int ajout = tabMemorize.size(); // permet de vérifier si un étudiant a été créer
cout << "Numéro du " << indiceT + 1 << " ème étudiant : " << endl;
addNumEtu(tabEtu,tabMemorize,indiceT); // si le numéro est valide il est stocké dans tabMemorize
if (ajout < tabMemorize.size()){
cout << "Nom du " << indiceT + 1 << " ème étudiant : " << endl;
changeEtuName(tabEtu,indiceT);
indiceT ++;
}
}
if ( tabEtu.size() > 1){ // verifie que l'on peux former au moins 1 binome.
int etuT1,etuT2 = 0;
while (etuT1 != -1 && etuT2 != -1){
while ((etuT1 != -1) && (etuT2 != -1)){
cout << "entrer le numéro du premier étudiant du binome, ou -1 pour arrêter " << endl;
cin >> etuT1;
cin.clear();
cin.sync();
if (etuT1 < 0)
break;
cout << "entrer le numéro du deuxième étudiant du binome, ou -1 pour arrêter " << endl;
cin >> etuT2;
cin.clear();
cin.sync();
if (etuT2 < 0)
break;
// vérifie que les numéros éxiste dans le groupe d'étudiant
if (countInTab(etuT1,tabMemorize) > 0 && countInTab(etuT2,tabMemorize) > 0){
formBinome(tabEtu[etuT1],tabEtu[etuT2]);
formBinome(tabEtu[findIndice(etuT1,tabEtu)],tabEtu[findIndice(etuT2,tabEtu)]);
} else {
cout << "c'est numéro ne sont pas dans le groupe" << endl;
}
......@@ -173,18 +201,24 @@ int main(){
cout << "il n'y a qu'un étudiant, on ne peux pas former de binome" << endl;
}
//affiche les binomes du groupe sans doublons.
affTabEtu(tabEtu);
cout << "Premier affichage : " << endl;
affTabEtu(tabEtu,tabMemorize);
// détruit tous les binome existant en désallouant les pointeurs.
for (int y = 0; y < tabEtu.size() ; y++){
for (int y = 0; y < tabEtu.size()-1 ; y++){
if (tabEtu[y].isBinome == true){
delete tabEtu[y].binome->binome; // désaloue le pointeur du binome.
(tabEtu[y].binome)->isBinome = false;
tabEtu[y].isBinome = false;
(tabEtu[y].binome)->binome = NULL;
delete (tabEtu[y].binome)->binome; // désaloue le pointeur du binome.
tabEtu[y].binome = NULL;
delete tabEtu[y].binome; // désaloue le pointeur de l'étudiant.
}
}
//affiche les binomes du groupe sans doublons.
affTabEtu(tabEtu);
cout << "Deuxième affichage : " << endl;
affTabEtu(tabEtu,tabMemorize);
// je n'ai pas réussit a désalouer les tableaux dynamiques avec delete donc je supprime toutes les cases.
tabEtu.clear(); // désalocation des tableaux dynamiques.
tabMemorize.clear();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment