/* Fichier Liste_Pers.cpp Une petite adaptation de liste FIFO Liste1.cpp et la lecture d'un fichier texte, ici "imp_e15.txt" À adapter selon vos besoins Il y aura de questions sur cet exemple au final de l'été 2015 */ #include // pour entrée-sortie cin, cout #include // pour le formatage #include #include // pour les fichiers using namespace std; // librairie standard class Personne { private : char sexe ; float taille, poids ; int numero; public : Personne(char sexe, int numero, float taille, float poids) { this->sexe = sexe; this->numero = numero; this->taille = taille; this->poids = poids; } Personne() { } friend ostream& operator << (ostream&, const Personne&); char getSexe() { return sexe; } }; 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.taille << setw(8) << setprecision(1) << unePers.poids << endl; return sortie; } typedef Element * Pointeur ; void lireRemplir(const char nomALire[], Pointeur& liste) { const float PIED_EN_METRE = 0.3048, LIVRE_EN_KG = 0.454; int numero, nbPieds, nbPouces, nbLivres; float taille, poids; char sexe; liste = NULL ; Pointeur dernier ; ifstream aLire (nomALire, ios::in); // localiser et ouvrir pour la lecture while (aLire >> sexe >> numero >> nbPieds >> nbPouces >> nbLivres) { taille = (nbPieds + nbPouces /12.0) * PIED_EN_METRE; poids = nbLivres * LIVRE_EN_KG ; Personne unePers(sexe, numero, taille, poids); Pointeur tempo = new Element ; tempo->pers = unePers; tempo->suivant = NULL ; if (liste == NULL) liste = dernier = tempo; else { dernier->suivant = tempo ; dernier = tempo; } } aLire.close(); } 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; } liste = liste->suivant; } if (!trouve) cout << "Aucune personne de sexe : " << sexeVoulu << endl; } int main() { Pointeur liste; lireRemplir("imp_e15.txt",liste); afficher(liste); // afficher les coordonnees du 1er homme de la liste afficher(liste, 'M'); return 0; } /* Exécution: Contenu de la liste des personnes : 0) F 2187 1.68 81.7 1) F 4148 1.80 84.0 2) M 2233 1.85 85.4 3) F 4433 1.47 55.8 4) F 2108 1.80 74.9 5) M 7890 1.88 90.8 6) F 4100 1.65 54.0 7) F 2176 1.88 86.7 8) M 5423 1.75 66.7 9) M 4169 1.68 55.8 10) F 4177 1.75 62.7 11) M 2879 1.88 86.7 12) F 5477 1.80 66.7 13) M 4869 1.60 73.5 14) F 4354 1.68 63.1 15) M 2235 1.88 85.8 16) M 5444 1.78 68.6 17) F 4198 1.75 56.8 18) M 5678 2.01 90.8 19) F 1357 1.68 70.4 20) F 3498 1.50 61.3 Coordonnees de la premiere personne de sexe M : M 2233 1.85 85.4 -------------------------------- Process exited after 0.04496 seconds with return value 0 Appuyez sur une touche pour continuer... */