Liste chainée c++
DanielP
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
/*
Bonsoir, dans la question 5 du tp3 B
Il faut afficher le nombre de femme et d’homme. L’affichage du nombre de femme fonctionne cependant l’homme ne marche pas et c’est le meme fonction.
De plus, dans la question 6, il faut ajouter la moyenne salaire hebdo des femmes et il m’Affiche :0
Le resultat est ci-dessous incorrecte.
Merci d’avance
Daniel Prudent
Le nombre de femme est 37
Le nombre d'homme est 0
La moyenne sal heb des femme est 0
#include <iostream> // pour entrée-sortie cin, cout
#include <iomanip> // pour le formatage
#include <string>
#include <fstream> // pour les fichiers
#include <list>
#include <algorithm>
using namespace std; // librairie standard
class Personne
{
private :
char sexe ;
float heure, taux ;
int numero;
public :
Personne(char sexe, int numero, float heure, float taux)
{
this->sexe = sexe;
this->numero = numero;
this->heure = heure;
this->taux = taux;
}
Personne()
{
}
// surcharger l'opéraur d'affichage :
friend ostream& operator << (ostream&, const Personne&);
char getSexe()
{
return sexe;
}
int getNumero()
{
return numero;
}
float getTaux()
{
return taux;
}
};
struct Element
{
Personne pers ;
Element * suivant ;
};
ostream& operator << (ostream& sortie, const Personne& unePers)
{
sortie.setf(ios::fixed);
sortie.setf(ios::showpoint);
sortie << setw(4) << unePers.sexe
<< setw(8) << unePers.numero
<< setw(7) << setprecision(2) << unePers.heure
<< setw(8) << setprecision(1) << unePers.taux << endl;
return sortie;
}
typedef Element * Pointeur ;
// conseils : dessiner le schéma pour créer la liste avec 3 lignes de données
void lireRemplir(const char nomALire[], Pointeur& liste, Pointeur & dernier)
{
// const float PIED_EN_METRE = 0.3048,
// LIVRE_EN_KG = 0.454;
int numero;
//nbPieds, nbPouces, nbLivres;
float heure, taux;
char sexe;
liste = NULL ;
ifstream aLire (nomALire, ios::in); // localiser et ouvrir pour la lecture
while (aLire >> sexe >> numero >> heure >> taux)
{
// taille = (nbPieds + nbPouces /12.0) * PIED_EN_METRE;
// poids = nbLivres * LIVRE_EN_KG ;
// construire une personne
Personne unePers(sexe, numero, heure, taux);
// préparer d'un nouvel élément :
Pointeur tempo = new Element ;
tempo->pers = unePers;
tempo->suivant = NULL ;
if (liste == NULL)
liste = dernier = tempo;
else
{ dernier->suivant = tempo ;
dernier = tempo;
}
}
aLire.close();
}
// afficher le contenu d'une liste
void afficher(Pointeur liste)
{
cout << "Contenu de la liste des personnes :\n";
int n = 0;
while (liste)
{
cout << setw(4) << n++ <<") " << liste->pers ;
liste = liste->suivant;
}
}
void afficher(Pointeur liste, char sexeVoulu)
{
bool trouve = false;
while (liste)
{
if ( liste->pers.getSexe() == sexeVoulu)
{ trouve = true;
cout << "\nCoordonnees de la premiere personne de sexe "
<< sexeVoulu << " : " << endl
<< liste->pers << endl;
break; // quitter la boucle while
}
liste = liste->suivant;
}
if (!trouve)
cout << "Aucune personne de sexe : " << sexeVoulu << endl;
}
void chercher(int aChercher, Pointeur liste, Pointeur & avant, Pointeur & cestLui)
{
avant = NULL; // avant le 1er élément : il n'en a pas => avant vaut NULL
cestLui = liste; // cestLui pointe vers le 1er élément
while (cestLui && cestLui->pers.getNumero() != aChercher)
{
// avant prendre la place de cestLui
avant = cestLui;
cout << cestLui->pers.getNumero() << endl;
cout << avant->pers.getNumero() << endl;
// cestLui s'avance
cestLui= cestLui->suivant ;
}
}
void demoRecherche(Pointeur liste)
{
int aChercher ;
Pointeur avant, cestLui;
char reponse = 'o';
while (cestLui && (reponse == 'o' || reponse == 'O'))
{
cout << "Quelle valeur recherchee " ;
cin >> aChercher;
chercher(aChercher, liste, avant, cestLui);
if (cestLui)
{
cout << "On trouve : " << cestLui->pers.getNumero() << endl;
if (avant)
cout << "La valeur avant : " << avant->pers.getNumero() << endl;
else
cout << "au debut de la liste\n";
}
else
cout << "introuvable\n";
cout << endl << "Voulez-vous continuer ? (o/n) " ;
cin >> reponse;
}
}
void demoSupprimer(Pointeur & liste)
{ int aChercher;
Pointeur avant, cestLui;
char reponse = 'o';
while (liste && (reponse == 'o' || reponse == 'O'))
{ cout << "Quelle valeur a supprimer " ;
cin >> aChercher;
chercher(aChercher, liste, avant, cestLui);
if (cestLui)
{
cout << "On trouve et supprime : " << cestLui->pers.getNumero() << endl;
if (avant)
avant->suivant = cestLui->suivant;
else
liste=liste->suivant;
delete cestLui;
afficher(liste);
}
else
cout << "introuvable\n";
cout << endl << "Voulez-vous continuer ? (o/n) " ;
cin >> reponse;
}
if (liste == NULL) cout << "La liste est vide!\n";
}
int nbSexe(Pointeur & liste, char item_to_find) { // fonction pour find femme ou monsieur
int compteur = 0;
//toujours au debut la liste pointe sur le premier element c'est equivalent a i=0 pour un tableau
while(liste) // tant que la liste ne pointe pas vers null
{
if(liste->pers.getSexe() == item_to_find)
{
compteur+= 1;
}
liste=liste->suivant;//equivalent i++ pour un tableau
}
return compteur;
}
float moyenne (Pointeur & liste, int nbElem, char sexeVoulu)
{
float somme = 0.0;
while(liste) // tant que la liste ne pointe pas vers null
{
if(liste->pers.getSexe() == sexeVoulu)
{
somme+= liste->pers.getTaux();
}
liste=liste->suivant;//equivalent i++ pour un tableau
}
return somme/nbElem;
}
// for(int i = 0; i < nbElem ; i++)
// if (sexe [i] == sexeVoulu)
// somme += tab[i];
//
// return somme / nbElem ;
// }
int main(){
//1. de lire le fichier, de créer une liste chaînée des employés dans l'ordre FIFO (First In First Out)
int sum = 0; // open the txt file
int x;
ifstream inFile;
Pointeur liste, dernier;
lireRemplir("emp_a20.txt",liste, dernier);
//2. d'afficher le premier et le dernier employé de la liste en surchargeant l'opérateur d'affichage
cout << "Premiere pers : " <<liste->pers;
cout << "Derniere pers : " << dernier->pers;
afficher(liste);
// afficher les coordonnees du 1er homme de la liste
afficher(liste, 'M');
//4. de supprimer le premier, le dernier et l'employé numéro 411
demoRecherche(liste);
demoSupprimer(liste);
afficher(liste);
//5. de compter et d'afficher :
//- le nombre de femmes;
//- le nombre d'hommes
int nbF=nbSexe(liste, 'F');
cout << "Le nombre de femme est " << nbF << endl;
int nbM=nbSexe(liste, 'M');
cout << "Le nombre d'homme est " << nbM << endl;
//6. de calculer le salaire hebdomadaire moyen des femmes
int nbMoy=moyenne(liste, 1, 'F');
cout << "La moyenne sal heb des femme est " << nbMoy << endl;
return 0;
}
Bonsoir, dans la question 5 du tp3 B
Il faut afficher le nombre de femme et d’homme. L’affichage du nombre de femme fonctionne cependant l’homme ne marche pas et c’est le meme fonction.
De plus, dans la question 6, il faut ajouter la moyenne salaire hebdo des femmes et il m’Affiche :0
Le resultat est ci-dessous incorrecte.
Merci d’avance
Daniel Prudent
Le nombre de femme est 37
Le nombre d'homme est 0
La moyenne sal heb des femme est 0
- /
#include <iostream> // pour entrée-sortie cin, cout
#include <iomanip> // pour le formatage
#include <string>
#include <fstream> // pour les fichiers
#include <list>
#include <algorithm>
using namespace std; // librairie standard
class Personne
{
private :
char sexe ;
float heure, taux ;
int numero;
public :
Personne(char sexe, int numero, float heure, float taux)
{
this->sexe = sexe;
this->numero = numero;
this->heure = heure;
this->taux = taux;
}
Personne()
{
}
// surcharger l'opéraur d'affichage :
friend ostream& operator << (ostream&, const Personne&);
char getSexe()
{
return sexe;
}
int getNumero()
{
return numero;
}
float getTaux()
{
return taux;
}
};
struct Element
{
Personne pers ;
Element * suivant ;
};
ostream& operator << (ostream& sortie, const Personne& unePers)
{
sortie.setf(ios::fixed);
sortie.setf(ios::showpoint);
sortie << setw(4) << unePers.sexe
<< setw(8) << unePers.numero
<< setw(7) << setprecision(2) << unePers.heure
<< setw(8) << setprecision(1) << unePers.taux << endl;
return sortie;
}
typedef Element * Pointeur ;
// conseils : dessiner le schéma pour créer la liste avec 3 lignes de données
void lireRemplir(const char nomALire[], Pointeur& liste, Pointeur & dernier)
{
// const float PIED_EN_METRE = 0.3048,
// LIVRE_EN_KG = 0.454;
int numero;
//nbPieds, nbPouces, nbLivres;
float heure, taux;
char sexe;
liste = NULL ;
ifstream aLire (nomALire, ios::in); // localiser et ouvrir pour la lecture
while (aLire >> sexe >> numero >> heure >> taux)
{
// taille = (nbPieds + nbPouces /12.0) * PIED_EN_METRE;
// poids = nbLivres * LIVRE_EN_KG ;
// construire une personne
Personne unePers(sexe, numero, heure, taux);
// préparer d'un nouvel élément :
Pointeur tempo = new Element ;
tempo->pers = unePers;
tempo->suivant = NULL ;
if (liste == NULL)
liste = dernier = tempo;
else
{ dernier->suivant = tempo ;
dernier = tempo;
}
}
aLire.close();
}
// afficher le contenu d'une liste
void afficher(Pointeur liste)
{
cout << "Contenu de la liste des personnes :\n";
int n = 0;
while (liste)
{
cout << setw(4) << n++ <<") " << liste->pers ;
liste = liste->suivant;
}
}
void afficher(Pointeur liste, char sexeVoulu)
{
bool trouve = false;
while (liste)
{
if ( liste->pers.getSexe() == sexeVoulu)
{ trouve = true;
cout << "\nCoordonnees de la premiere personne de sexe "
<< sexeVoulu << " : " << endl
<< liste->pers << endl;
break; // quitter la boucle while
}
liste = liste->suivant;
}
if (!trouve)
cout << "Aucune personne de sexe : " << sexeVoulu << endl;
}
void chercher(int aChercher, Pointeur liste, Pointeur & avant, Pointeur & cestLui)
{
avant = NULL; // avant le 1er élément : il n'en a pas => avant vaut NULL
cestLui = liste; // cestLui pointe vers le 1er élément
while (cestLui && cestLui->pers.getNumero() != aChercher)
{
// avant prendre la place de cestLui
avant = cestLui;
cout << cestLui->pers.getNumero() << endl;
cout << avant->pers.getNumero() << endl;
// cestLui s'avance
cestLui= cestLui->suivant ;
}
}
void demoRecherche(Pointeur liste)
{
int aChercher ;
Pointeur avant, cestLui;
char reponse = 'o';
while (cestLui && (reponse == 'o' || reponse == 'O'))
{
cout << "Quelle valeur recherchee " ;
cin >> aChercher;
chercher(aChercher, liste, avant, cestLui);
if (cestLui)
{
cout << "On trouve : " << cestLui->pers.getNumero() << endl;
if (avant)
cout << "La valeur avant : " << avant->pers.getNumero() << endl;
else
cout << "au debut de la liste\n";
}
else
cout << "introuvable\n";
cout << endl << "Voulez-vous continuer ? (o/n) " ;
cin >> reponse;
}
}
void demoSupprimer(Pointeur & liste)
{ int aChercher;
Pointeur avant, cestLui;
char reponse = 'o';
while (liste && (reponse == 'o' || reponse == 'O'))
{ cout << "Quelle valeur a supprimer " ;
cin >> aChercher;
chercher(aChercher, liste, avant, cestLui);
if (cestLui)
{
cout << "On trouve et supprime : " << cestLui->pers.getNumero() << endl;
if (avant)
avant->suivant = cestLui->suivant;
else
liste=liste->suivant;
delete cestLui;
afficher(liste);
}
else
cout << "introuvable\n";
cout << endl << "Voulez-vous continuer ? (o/n) " ;
cin >> reponse;
}
if (liste == NULL) cout << "La liste est vide!\n";
}
int nbSexe(Pointeur & liste, char item_to_find) { // fonction pour find femme ou monsieur
int compteur = 0;
//toujours au debut la liste pointe sur le premier element c'est equivalent a i=0 pour un tableau
while(liste) // tant que la liste ne pointe pas vers null
{
if(liste->pers.getSexe() == item_to_find)
{
compteur+= 1;
}
liste=liste->suivant;//equivalent i++ pour un tableau
}
return compteur;
}
float moyenne (Pointeur & liste, int nbElem, char sexeVoulu)
{
float somme = 0.0;
while(liste) // tant que la liste ne pointe pas vers null
{
if(liste->pers.getSexe() == sexeVoulu)
{
somme+= liste->pers.getTaux();
}
liste=liste->suivant;//equivalent i++ pour un tableau
}
return somme/nbElem;
}
// for(int i = 0; i < nbElem ; i++)
// if (sexe [i] == sexeVoulu)
// somme += tab[i];
//
// return somme / nbElem ;
// }
int main(){
//1. de lire le fichier, de créer une liste chaînée des employés dans l'ordre FIFO (First In First Out)
int sum = 0; // open the txt file
int x;
ifstream inFile;
Pointeur liste, dernier;
lireRemplir("emp_a20.txt",liste, dernier);
//2. d'afficher le premier et le dernier employé de la liste en surchargeant l'opérateur d'affichage
cout << "Premiere pers : " <<liste->pers;
cout << "Derniere pers : " << dernier->pers;
afficher(liste);
// afficher les coordonnees du 1er homme de la liste
afficher(liste, 'M');
//4. de supprimer le premier, le dernier et l'employé numéro 411
demoRecherche(liste);
demoSupprimer(liste);
afficher(liste);
//5. de compter et d'afficher :
//- le nombre de femmes;
//- le nombre d'hommes
int nbF=nbSexe(liste, 'F');
cout << "Le nombre de femme est " << nbF << endl;
int nbM=nbSexe(liste, 'M');
cout << "Le nombre d'homme est " << nbM << endl;
//6. de calculer le salaire hebdomadaire moyen des femmes
int nbMoy=moyenne(liste, 1, 'F');
cout << "La moyenne sal heb des femme est " << nbMoy << endl;
return 0;
}
A voir également:
- Liste chainée c++
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
- Liste site streaming illégal - Accueil - Services en ligne
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, merci d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code