2. C++ avancé




Cours


  1. Flux : iostream fstream, sstream
  2. Surcharge d'opérateurs
  3. Généricité : fonction et classe
  4. La Librairie Standard STL
  5. STL : string
  6. STL : containers (vector, set, map, ...)
  7. STL : iterateurs
  8. STL : algorithmes
  9. Exceptions
  10. Functors, adapters et fonctions Lambda
  11. nouvelles fonctionnalités C++11
  12. Design pattern : Façade, Singleton, Factory, Observer


Exercices

Exercice 2.1

Ecrire un programme qui calcule la moyenne et l'écart-type d'une série de valeurs générées aléatoirement.

On utilisera par exemple la classe vector pour stocker les données.

./stats.exe

Exercice 2.2

Ecrire un programme qui calcule la somme et l'écart type des 50 premiers nombres premiers en utilisant la STL. On rappelle que :

  • 1 n'est pas premier
  • et qu'un nombre premier n'admet comme seuls diviseurs que 1 et lui-même.

On utilisera par exemple la classe vector pour stocker les données et l'algorithme accumulate pour faire la somme des données./p>

./primes.exe
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 
average = 102.34
stddev = 69.2218

Exercice 2.3

Ecrire une classe Matrix générique ainsi que les méthodes ou opérateurs associés :

  • addition
  • multiplication
  • transposition
template<class T>
class Matrix {
...
};

Exercice 2.4

Ecrire une classe CSV (Comma Separated Value) qui permet de lire/écrire un fichier au format CSV

Exercice 2.5

Ecrire une classe Parameters qui permet de stocker des paramètres sous la forme (propriété, valeur). On utilisera un map<string, string>.

On fera en sorte que la classe Parameters soit implantée sous forme d'un design pattern Singleton.

On implantera les méthodes suivantes :

  • void set(string key, string value); : ajoute ou modifie une propriété existante
  • string get_value_of(string s); : retourne la valeur sous forme de chaine de la propriété 's'
  • int get_int_value_of(string s); : retourne la valeur sous forme d'entier de la propriété 's'
  • float get_float_value_of(string s); : retourne la valeur sous forme de nombre flottant de la propriété 's'
  • ostream& print(ostream& out); : affiche les propriétés et leurs valeurs

Exercice 2.6

Ecrire une classe Herd suivant le modèle SIRS qui considère le nombre d'individus par état de santé : ils sont d'abord Sains/Susceptibles, puis Infectés, puis temporairement immunisés (Recovered) et enfin ils redeviennent Susceptibles. Il n'y a ni mort naturelle, ni mort causée par la maladie, la population reste donc stable.

On implantera les méthodes suivantes :

  • Herd(int _S, int _I, int _R); : constructeur avec taille de la population -1, I = 1, R = 0
  • void infectionDynamics(); : réalise les calculs d'évolution de la population
  • float get_percentage_infected(); : retourne le pourcentage d'individus infectés

Exercice 2.7

Ecrire un programme principal pour réaliser le calcul d'évolution de la population (Herd) avec le modèle SIRS.

On fera en sorte de pouvoir passer, si on le désire, les différents paramètres en ligne de commande (alpha, beta, gamma, dt, step, yearNb, herdSize, ...).