R1.01 – PROG#13 – exercice 4

Le but de cet exercice est de charger un fichier de configuration au format YAML.

Télécharger le fichier config.yaml, et changez l’extension. Modifiez le si besoin.

Ajouter la définition de la fonction

void LoadParams (CMyParamV2 & Param);

Cette fonction doit lire le fichier config.yaml de façon à remplir la struct MyParms, après son initialisation.

Pour ce faire, procéder de la sorte :

  1. Vérifier que vous arrivez bien à atteindre le fichier config.yaml en utilisant un chemin relatif;
  2. Parcourez ce fichier de façon à extraire tous les clés (de types string) et toutes les valeurs;
  3. Faites les insertions dans la structure de données de type CMyParam, si besoin

M1103-TP5 Exercice 5 – Space Invaders

On souhaite ajouter un peu plus de souplesse à structure du fichier config.yalm de façon à pouvoir y ajouter des commentaires, permuter des lignes, … Seules les clés autorisées nous intéressent donc.

Ajouter le code suivant :

struct AuthorizedKey {
/* List of authorized key for the type char in a struct CMyParam*/
const vector<string> VParamChar {“KeyLeft”, “KeyRight”, “VesselToken”, “InvaderToken”, “KShoot”};
/* List of authorized key for the type string in a struct CMyParam*/
const vector<string> VParamString {“VesselColor”, “InvaderColor”};
/* List of authorized key for the type unsigned in a struct CMyParam*/
const vector<string> VParamUnsigned {“GridSize”};
};

Modifier la fonction LoadParams () comme cela : après avoir fait une extraction d’une clé fichier config.yalm, vérifier qu’elle appartient à la structure AuthorizedKey avant de l’insérer dans la structure CMyParam.

R1.01 – Prog#11 Exercice1

Ecrire le corps de la fonction affichVInt () de signature :

void affichVInt (const vector <int> & VInt);

Rendre générique cette fonction en écrivant le corps de la fonction affichVector () de signature :

template <typename T>
void affichVector (const vector <T> & V);

Faites des tests avec différents vecteurs.

R1.01 – Prog#11 Exercice2

Ecrire le corps de la fonction générique extractionsGenerique() de signature

template <typename T>
void extractionsGenerique (T & Val);

Cette fonction est la fonction générique des exercices 6 à 9 de Prog #7.

 

Ecrire le corps de la fonction générique extractionsGenerique() de signature

template <typename T>
void extractionsGenerique ();

Cette fonction est la fonction générique des exercices 6 à 9 de Prog #7.

R1.01 – Prog#11 Exercice4

Partie 1 :

Ecrire le corps de la fonction affichVInt () de signature :


void affichVInt (const vector <int> & VInt);

A l’aide d’itérateurs.
Ecrire le corps de la fonction affichVector () de signature :


template <typename T>
void affichVector (const vector <T> & V);

A l’aide d’itérateurs.

Partie 2 :

Reprenez le corps de la fonction de Tri par Sélection / Echange (cf Prog#9, exercice 1), modifier le corps de façon à n’utiliser que des itérateurs.

NB: vous pouvez utiliser la fonction min_element () de la STL.

R1.01 – Prog#11 Exercice5

Télécharger le corrigé du TP 6 (M1102) : ici.

  1. Dans le fichier nsUtil.cxx, modifier le corps de la fonction EditVString () de façon à n’utiliser que des itérateurs;
  2. Dans le fichier main.cxx, modifier le corps des fonctions Delete (), Insert () et Swap () de façon à n’utiliser que des itérateurs.

Nb: pour les fonctions Insert () et Delete (), vous devez vous appuyer sur les fonctions insert () et erase () de la classe vector.

R1.01 – Prog#7 – Exercice 1

Ecrire la fonction flux_cin() qui, dans une boucle, lit une ligne au clavier et l’affiche à l’écran. La boucle se termine lorsque l’utilisateur tape le caractère “fin du fichier” au clavier (Ctrl + D). Pour cela, utiliser la fonction-membre (méthode) eof() de la classe istream à laquelle appartient le flux standard cin.

Attention : le prédicat eof() n’est vrai qu’après qu’une tentative de lecture a échoué. Il faut donc toujours faire une tentative de lecture avant de tester par eof() si elle a échoué ou non.

R1.01 – Prog#7 – Exercice 2

Dans votre répertoire courant, téléchargez le fichier LaFontaine.txt mis à votre disposition.

Ecrire la fonction afichFich() qui, dans une boucle, lit le fichier source LaFontaine.txt ligne par ligne et l’affiche à l’écran. La boucle se termine à la rencontre de la marque “fin-de-fichier”. Le fichier est associé à un flux d’entrée de la classe ifstream.

R1.01 – Prog#7 – Exercice 3

Un programme est beaucoup plus général s’il est capable de traiter n’importe quel fichier (texte par exemple), dont le nom est saisi lors de l’exécution, plutôt qu’un fichier particulier dont le nom est indiqué en dur dans le code. Il en est de même s’il doit créer un fichier résultat.

Ecrire la fonction nomFichAuClavier() qui :

  1. saisit au clavier le nom du fichier source (un string),
  2. saisit au clavier le nom du fichier destination (un autre string),
  3. dans une boucle, lit le fichier source ligne par ligne et le recopie dans le fichier destination en numérotant “proprement” chaque ligne à partir de 1 : le numéro de chaque ligne doit précéder chaque ligne et être aligné à droite sur 4 colonnes,
  4. affiche le nombre total de lignes du fichier.

La tester sur des noms de fichiers valides (en particulier, s’assurer que le fichier source existe bien).