Généricité (pratique) - h-deb - Collège Lionel

publicité
420KHJ – Généricité (pratique)
v. 1,1
Généricité (pratique) – Exercices
On a besoin de pratique, à mon humble avis, alors voici quelques opportunités d’approfondir les
idées et les techniques des dernières semaines.
Les exercices qui suivent devraient fonctionner à la fois avec un tableau brut, avec un
std::vector et avec vos propres classes de tableaux. Conséquemment, si vos tableaux ne
sont pas encore correctement écrits, assurez-vous tout d’abord de régler les bogues qui traînent
encore dans vos implémentations.
Dans les consignes qui suivent, la plupart des algorithmes à utiliser se trouvent dans
<algorithm>. Vous devrez, évidemment, lire l’aide en ligne pour bien utiliser chacun de
ces algorithmes.
Pour vous aider à mettre le tout au point, je vous suggère d’écrire une fonction générique
afficher_sequence() recevant une séquence à demi ouverte et en affichant les éléments
un à un, séparés par un blanc et se terminant par un saut de ligne. Cela vous permettra de vérifier
que votre code tient la route.
Écrivez un programme qui :









Ce programme ne contiendra aucune
répétitive, que des algorithmes standards et des
foncteurs. Si vous êtes habiles, le programme
sera peut-être même plus court (si on ne
considère pas les directives #include et
les clauses using) que les consignes
expliquant comment le rédiger.
initialise le générateur de nombres pseudo-aléatoires
(fonction std::srand() de <cstdlib>; vous
voudrez aussi utiliser std::time() de <ctime>
pour choisir une valeur à passer à std::srand());
déclare un tableau brut de int d’une capacité de N éléments (N est une constante entière
strictement positive… Disons 20, mais faut que votre code fonctionne avec des valeurs paire
ou impaire alors prenez soin de bien le tester);
dans ce tableau, pour chaque indice i, initialisez l’élément à la valeur i+1. Pour ce faire,
utilisez l’algorithme std::generate() et un foncteur;
brassez ce tableau pour que les éléments se retrouvent à des positions pseudo-aléatoires. Pour
ce faire, utilisez l’algorithme std::random_shuffle();
déclare un std::vector<int> qui soit une copie élément par élément du tableau brut.
Utilisez pour ce faire le constructeur de séquence du std::vector<int> en question;
déclare un tableau de int de taille fixe et connue à la construction qui soit une copie
élément par élément du tableau brut. Utilisez pour ce faire le constructeur de séquence du
tableau en question;
déclare un tableau de int de taille fixe et connue à la compilation qui soit une copie
élément par élément du tableau brut. Utilisez pour ce faire le constructeur de séquence du
tableau en question;
déclare un tableau dynamique de int qui soit une copie élément par élément du tableau
brut. Utilisez pour ce faire le constructeur de séquence du tableau en question;
trouve la position de l’élément de valeur 3 dans le tableau brut et l’affiche à la console (on
veut l’indice dans le tableau, donc une valeur dans l’intervalle (0..N( inclusivement, pas
l’adresse de l’élément). Pour ce faire, utilisez l’algorithme std::find(). Faites de même
avec le std::vector<int> et avec chacun de vos tableaux, et vérifiez que vous avez
les mêmes réponses dans chaque cas;
Préparé par Patrice Roy pour le Collège Lionel-Groulx
Page 1
420KHJ – Généricité (pratique)





v. 1,1
trouve la position du plus petit élément du tableau brut et l’affiche à la console (on veut
l’indice dans le tableau, donc une valeur dans l’intervalle (0..N( inclusivement, pas
l’adresse de l’élément). Pour ce faire, utilisez l’algorithme std::min_element(). Faites
de même avec le std::vector<int> et avec chacun de vos tableaux, et vérifiez que
vous avez les mêmes réponses dans chaque cas;
réorganise le tableau brut de manière à ce que tous les éléments impairs soient au début et
tous les éléments pairs soient à la fin. Pour ce faire, utilisez l’algorithme
std::stable_partition() et un foncteur est_impair de votre cru(). Faites de
même avec le std::vector<int> et avec chacun de vos tableaux, et vérifiez que vous
avez les mêmes réponses dans chaque cas;
obtenez un itérateur sur le premier élément pair du tableau brut (utilisez pour ce faire
l’algorithme std::find_if() et un foncteur est_pair de votre cru…) et triez
strictement les éléments impairs (utilisez pour ce faire l’algorithme std::sort()). Faites
de même avec le std::vector<int> et avec chacun de vos tableaux, et vérifiez que
vous avez les mêmes réponses dans chaque cas;
obtenez un itérateur sur le premier élément pair du tableau brut (voir consigne précédente) et
transformez chaque élément pair de la séquence par son carré. Utilisez pour ce faire
l’algorithme std::transform() et un foncteur carre de votre cru()). Faites de même
avec le std::vector<int> et avec chacun de vos tableaux, et vérifiez que vous avez
les mêmes réponses dans chaque cas;
s’il vous reste du temps, essayez de voir si vous êtes en mesure de faire une variante de ces
exercices avec des tableaux de std::string, question de voir si le code de vos tableaux
tient vraiment la route.
Préparé par Patrice Roy pour le Collège Lionel-Groulx
Page 2
Téléchargement