Ranger les eleve grace o moyenne c/c++

moussadjijunior Messages postés 127 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'aimerais si possible que quelqu'un m'aide à trouver un site ou je pourrais trouver des codes ecrit en c/c++ sur le calcul des moyennes et surtout la gestion des rang des eleves en fonction de leurs moyennes.
je vous remercies tous d'avance en prians pour les votre et vous ,vous vous portez bien.
Configuration: Windows XP
Internet Explorer 7.0

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Le plus simple c'est d'utiliser un std::set et de redéfinir un foncteur pour ordonner les éléments. Exemple :
    #include <iostream>
    #include <string>
    #include <set>
    
    struct eleve_t{
        std::string prenom;
        std::string nom;
        float moyenne;
    
        // Le constructeur
        eleve_t(
          const std::string & prenom0,
          const std::string & nom0,
          const float & moyenne0
        ):
            prenom(prenom0),
            nom(nom0),
            moyenne(moyenne0)
        {}
    };
    
    std::ostream & operator << (std::ostream & out,const eleve_t & x){
        out << "nom: " << x.nom << "\tprenom: " << x.prenom << "\tmoyenne: " << x.moyenne;
        return out;
    }
    
    struct sort_eleve_by_note{
        inline bool operator()(const eleve_t & x,const eleve_t & y){
            // 1) on trie sur la moyenne
            if (x.moyenne < y.moyenne) return true;
            if (x.moyenne > y.moyenne) return false;
    
            // 2) on trie sur le nom
            if (x.nom < y.nom) return true;
            if (x.nom > y.nom) return false;
    
            // 3) on trie sur le prénom
            if (x.prenom < y.prenom) return true;
            if (x.prenom > y.prenom) return false;
    
            // 4) on compare un élève à lui-même donc on n'autorise
            // son insertion qu'une seule fois en retournant false
            // en cas d'égalité
            return false;
        }
    };
    
    int main(){
        const eleve_t
            e1("luke","lucky",18),
            e2("dalton","joe",8),
            e3("dalton","averell",2),
            e4("james","jessy",10);
        typedef std::set<eleve_t,sort_eleve_by_note> eleves_t;
        eleves_t eleves;
        eleves.insert(e1);
        eleves.insert(e2);
        eleves.insert(e3);
        eleves.insert(e4);
    
        // Afficher les élèves
        {
            eleves_t::const_iterator
                eleves_it (eleves.begin()),
                eleves_end(eleves.end());
            for(;eleves_it!=eleves_end;++eleves_it){
                std::cout << *eleves_it << std::endl;
            }
        }
        return 0;
    }
    

    Comme tu le vois la relation d'ordre entre les différents élèves est implémentées au niveau du foncteur sorty_by_notes et peut être facilement modifié. À l'exécution on obtient :
    nom: averell    prenom: dalton  moyenne: 2
    nom: joe        prenom: dalton  moyenne: 8
    nom: jessy      prenom: james   moyenne: 10
    nom: lucky      prenom: luke    moyenne: 18
    
    Bonne chance
    -1