Annonce

Réduire
Aucune annonce.

C++ - cours n°3 -> L'objet vector et pair

Réduire
Ceci est une discussion importante.
X
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • C++ - cours n°3 -> L'objet vector et pair

    L'objet vector et l'object pair


    Bon nombre de problèmes sont liés aux tableaux, il est donc incontournable de connaître ce type d'objet dans un langage de programmation. En C++, on parlera le plus souvent de l'objet vector, mais il en exsite d'autres, le plus important et usité reste celui qu'on présentera ici.

    L'objet pair quand à lui est utilisé plus rarement, mais je trouve qu'avec la problématique actuelle, il aurait été dommage de s'en priver. C'est un ensemble d'éléments de taille 2, pas plus ! En python on pourrait le comparer à un tuple de taille 2.

    Pré-requis

    Utilisation de cin et cout
    L'objet string
    Les fonctions
    Les boucles for et while


    Problématique

    Daniel connaît à peu près ses moyennes et voudrai connaître sa moyenne générale,

    Mathématiques:15
    Français:8
    Anglais:12
    Histoire-Géographie:7
    Sport:19
    Musique:9

    Tant qu'il y est, il voudrait que ses moyennes ses notes soient rangées dans l'ordre croissant (du plus petit au plus grand).

    Donc quelque chose de cet ordre:

    Histoire-Géographie:7
    Français:8
    Musique:9
    Anglais:12
    Mathématiques:15
    Sport:19

    Moyenne:11,66666

    L'algorithme est simple,

    Code:
    Somme = 0
    Compteur // Nombre de moyennes ajoutées
    Tant qu'il y a des moyennes à entrer
    	Demander la matière
    	Demander la moyenne
    	Somme = Somme + moyenne
    
    Moyenne = Somme / Compteur
    Afficher Moyenne
    Afficher ordre croissant les moyennes
    Il y aura donc du cin, cout que vous connaissez bien, mais aussi de l'objet string.

    L'objet pair

    pair est un objet représentant l'ensemble de strictement 2 éléments (pas plus, pas moins).
    Les éléments peuvent être de tous types, il est dans notre cas aisé de connaître les deux types des deux éléments représentés par cet objet.

    pair -> (type string, type double)

    oui le 2ème élément est un type double, car pour notre moyenne, nous aurons besoin d'être précis.

    On doit tout d'abord utiliser une librairie pour cet objet,

    Code:
    #include <utility>
    On construira l'objet de cette façon,

    Code:
    pair <string, double> matiere;
    Pour enregistrer le 1er élément de notre objet pair

    [CODE]matiere.first = "Mathématiques";
    matiere.second = 15;[CODE]

    pas très compliqué n'est-ce pas ?

    Pour afficher les éléments d'un objet pair, toujours aussi simple,

    Code:
    cout << matiere.first << ": " << matiere.second << endl;
    Écrira de la manière suivante, Mathématiques: 15

    L'objet vector

    C'est un tableau avec un type particulier que vous préciser lors de sa création, il permettra de faire beaucoup de manipulation, comme le tri, somme, mélange aléatoire, ... bref un incontournable !

    Avant toute chose, il faut inclure la librairie adéquate,

    Code:
    #include <vector>
    Sa construction est la suivante,

    Code:
    vector<pair<string, double>> v;
    Eh bien oui, n'oubliez pas qu'on a un tableau de pairs d'éléments

    Sinon pour faire un tableau de double rien de plus simple,

    Code:
    vector<double> v;
    Si on connaît quelques valeurs d'avance, c'est plus complexe,

    Code:
    double moyenne[] = {12.5, 5.5, 9};
    vector<double> v (moyenne, moyenne+sizeof(moyenne)/sizeof(double));
    Mais pour l'instant, c'est une information, rien de plus, vous n'en n'avez pas besoin à l'heure actuelle, car vous demandez à l'utilisateur d'entrer nom et moyenne de chaque matière.

    Ajouter un objet dans un vector

    On utilisera sa méthode push_back,

    Code:
    vector<double> v;
    
    v.push_back(5.5); // ajout de la valeur 5.5 dans le tableau v
    v.push_back(15.0);
    Lire l'ensemble des valeurs d'un objet vector

    En imaginant notre exemple précédent où l'on ajoute deux éléments

    Code:
    vector<double> v;
    
    v.push_back(5.5);
    v.push_back(15.0);
    
    
    for (int i=0; i!=(int)v.size(); i++)
        cout << v.at(i) << endl;
    La méthode at(i) accède à l'élément de l'indice i
    La méthode size permet d'avoir le nombre d'éléments de l'objet vector créé.

    On pourra plus tard parler des itérateurs, mais c'est encore un peu complexe à comprendre à ce niveau d'avancement.

    Tri des données dans un vector

    La phase la plus difficile ! Il va falloir me faire confiance et admettre certaines choses,

    Nous allons tout d'abord utiliser la méthode sort se trouvant dans la librairie algorithm.
    Retenez là bien elle est très utile...

    Donc on ajoute dans notre code

    Code:
    #include <algorithm>
    Ensuite on va créer une fonction de tri, car on souhaite que cet ordre soit du plus petit au plus grand, celle-ci je là crée pour vous

    Code:
    bool functionSorting(double i, double j){
    
        return i < j;
    }
    Avec cela, le tri est terminé, on a notre objet vector, et notre fonction sort

    Code:
    sort(v.begin(), v.end(), functionSorting);
    v.begin() récupère l'adresse où se trouve le premier élément
    v.end() récupère l'adresse où se trouve le premier élément

    Pas besoin d'en savoir plus, on reverra les itérateurs plus tard, familiarisez vous, vous les verrez souvent par la suite.

    Voilà, vous avez tout ce qu'il faut pour résoudre cette problématique, attention de ne pas se faire piéger avec l'objet pair...

    Remarque: Cet exercice n'est pas si simple, si vous vous en sortez sans aide et avec réussite, alors je pense que vous commencez à comprendre la notion d'objets qu'on verra un peu plus tard, autant dire que c'est très positif pour l'avancée des notions suivantes.
    Dernière modification par fred, 07 juillet 2016, 14h03.
Chargement...
X