jeudi 7 juillet 2016

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.

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 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...


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/29mMksi
via IFTTT

Aucun commentaire:

Enregistrer un commentaire