Exercices en langage C++/Les templates
Exercices en langage C++ |
---|
Sommaire |
|
Liens |
Modifier ce modèle |
Exercice 1
[modifier | modifier le wikicode][MOYEN]
Requis:
- manipulation de tableaux,
- savoir créer une fonction template.
Créez une fonction "trier" pour trier un tableau de 10 données avec un tri par sélection. Le tableau devra être de n'importe quel type. Cette fonction utilisera une autre fonction, "échanger", pour échanger les éléments du tableau.
Le tri par sélection scan un tableau et met sa valeur minimale au début. Il répète l'opération jusqu'à obtenir un tableau trié.
template<class T> T * échanger(T tab[10], int a, int b)
{
T c = tab[a];
tab[a] = tab[b];
tab[b] = c;
return tab;
}
template<class T>T * trier(T tab[10])
{
int j, min;
for(int i = 0; i < 9; i++)
{
for(j = i; j < 10; j++)
{
if(j == i)
min = j;
if(tab[j] < tab[min])
min = j;
}
échanger(tab, i, min);
}
return tab;
}
Exercice 2 : Fonction Template
[modifier | modifier le wikicode][FACILE] Requis : Savoir créer et utiliser une fonction Template
1) Créer une fonction Template qui permettra de faire une somme entre un int et un float,
2) faire une spécialisation de la fonction en std::string, qui retournera la somme de la taille des deux chaînes.
Exercice 3 : Classe Template
[modifier | modifier le wikicode][FACILE-MOYEN] Requis : Savoir créer une classe Template
1) Créer une classe Template "Rectangle" prenant en paramètre les coordonnées de celui-ci sur un graphique(x,y). Évidemment, le type des attributs et des méthodes renvoyant une valeur (si il y en a) dépendront donc du paramètre Template rentré au préalable.
2) Créer une méthode retournant sa hauteur et son aire.
---AIDE :---
Voici comment déclarer votre Objet Rectangle dans le main() : Rectangle<float> myRectangle(1.2, 2.6, 1.5, 4.1);
Exercice 4
[modifier | modifier le wikicode][MOYEN-DIFFICILE]
Requis:
- savoir utiliser les pointeurs et l'allocation dynamique de mémoire,
- savoir créer une classe
template
, - savoir créer une structure.
Créez une classe liste simplement chaînée, avec une classe liste. Cette classe a un pointeur sur le premier élément de la liste. Elle a une méthode pour ajouter ou supprimer un élément au début de la liste et une pour afficher la liste en entier. Évitez toute fuite mémoire. Les éléments de la liste seront contenu dans la structure element
.
Utilisez l'instruction new
et delete
pour supprimer et créer de nouveaux éléments.
Une liste simplement chaînée est une structure de donnée. Elle est constituée de blocs où chaque bloc pointe sur le bloc suivant. Chaque bloc contient une donnée.
Il est conseillé de réviser les pointeurs.
Voici le fichier source décomposé pour plus de lisibilité:
#include <iostream>
using namespace std;
// Structure élément
template<class T> element
{
T var;
element<T> * suivant;
};
// Classe liste
Template<class T>class liste
{
public:
element<T> * début;
liste()
{
début = NULL;
}
~liste()
{
while(début != NULL)
{
supprimer();
}
}
void ajouter(T var)
{
if(début == NULL)
{
début = new element<T>;
début->suivant = NULL;
}
else
{
element<T> * p = new element<T>;
p->suivant = début;
début = p;
}
début->var = var;
}
void supprimer()
{
if(début == NULL)
return;
element<T> * p = début;
début = début->suivant;
delete p;
}
void afficher()
{
element<T> * p = début;
while(p != NULL)
{
cout << p->var << endl;
p = p->suivant;
}
}
};