Ranger les eleve grace o moyenne c/c++

Fermé
moussadjijunior Messages postés 107 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - 11 oct. 2008 à 07:34
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 11 oct. 2008 à 12:50
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.

1 réponse

mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
11 oct. 2008 à 12:50
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