M1103 – TP6 Exercice 2

On remplace les plots par des vecteurs d’entiers naturels afin de pouvoir afficher le contenu de chaque vecteur après chaque déplacement.

Coder la fonction void Hanoi (const unsigned & N, vector <unsigned> & Dep, vector <unsigned> & Arr, vector <unsigned> & Int);

NB:

  • N’oublier pas d’initialiser le plot de départ avant l’appel de la fonction;
  • L’affichage d’un vecteur se fera sur la même ligne pour plus de simplicité.

M1103-TP5 Exercice 1

Déclarerez une variable de type map < string, string >. La première chaine de caractères désigne un nom de famille, le second le prénom d’une personne.

Dans le main () :

  1. déclarer une map,
  2. insérer 4 éléments dans cette map,
  3. parcourez la map pour l’afficher.

M1103-TP5 Exercice 2

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

void InsertIntoMapIfNotExists (map <string, string> & MyMap, const string & Nom, const string & prenom);

Cette fonction doit insérer dans la map le couple (nom, prenom) que si le nom n’est pas déjà présent.

Ecrire ensuite le corps de la fonction doublement générique ShowMap () de signature :

template <typename T, typename U>
void ShowMap (const map <T, U>& MyMap);

Modifier l’exercice 1 en conséquence.

M1103-TP5 Exercice 3 Space Invaders

Télécharger la correction du TP2 (Projet) suivante : Correction_projet.

Ajouter les lignes suivantes :

struct CMyParam {
    std::map <std::string, char> MapParamChar;
    std::map <std::string, unsigned> MapParamUnsigned;
    std::map <std::string, std::string> MapParamString;
};

const std::map <std::string, std::string> KColor
{
    {"KReset", "0"},
    {"KBlack", "30"},
    {"KRed", "31"},
    {"KGreen", "32"},
    {"KYellow", "33"},
    {"KBlue", "34"},
    {"KMAgenta", "35"},
    {"KCyan", "36"},
};

void InitParams (CMyParam &amp; Param)
{
    //Move Keys
    Param.MapParamChar["KeyLeft"] = 'w';
    Param.MapParamChar["KeyRight"] = 'x';
    Param.MapParamChar["VesselToken"] = 's';
    Param.MapParamChar["KShoot"] = ' ';

    //Size of grid — suppose to be a rectangle (or a square)
    Param.MapParamUnsigned["NbColumn"] = 10;

    //Display Colors
    Param.MapParamString["VesselColor"] = KColor.find("KRed")->second ;
    Param.MapParamString["InvaderColor"] = KColor.find("KGreen")->second ;
}


Modifier la fonction InitParams () de façon à spécifier le caractère de l’invader ainsi que nombre de lignes de la grille.

Modifier les fonction DisplaySpace () et InitSpace () pour prendre en compte la structure de données.

M1103-TP5 Exercice 4 Space Invaders

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.

Ajouter la définition de la fonction

void LoadParams (CMyParam & Param);

Cette fonction doit “parser” le fichier config.yaml de façon à remplir la struct MyParms.

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 CMyParam

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.

M1103-TP4 Exercice 1

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