Ranger les eleve grace o moyenne c/c++

moussadjijunior Messages postés 107 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33758 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.
A voir également:

1 réponse

mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
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