Cartouche

Champ Valeur
Auteur·e Élise
Édition 2023-09-15
Durée une journée
Taille des équipes 1 personne
Rendu via git, dépôt 2023_cpp_c3, droits en lecture à delivery_collector

Barème

Critère Points
Hello stranger 3
Hola senora 3
add up and print 4
min/max 3
coordonnées templates 3
Hola senora maps and lambdas 4
Total des critères 20
Note maximale 20
Fautes de norme -0,5 par faute

Règlement

La réalisation de cet exercice est assujettie aux règles en vigueur dans l’école en matière de triche et de normalisation. Tricher vous expose à de graves sanctions.

Vous devez être seul·e auteur·e de votre rendu mais vous êtes autorisés et encouragés à communiquer dans le cadre de ce sujet.

Dépôt de référence et norme

Annexe 1 • Norme C++

Dépôt de référence avec règles clang format.

Tâches

Hello, stranger?

Fichier à rendre : task00/hello.{cpp,hpp}, task00/main.cpp

Consigne

Écrivez une fonction hello qui peut prendre :

  • soit une chaîne de caractères en premier paramètre ;
  • soit aucun paramètres.

S’il y a un paramètre, votre fonction doit écrire sur la sortie standard "Hello " suivi par le paramètre, un point d’exclamation et un retour à la ligne.

S’il n’y a pas de paramètre, vous devez écrire “Hello stranger!” suivi d’un retour à la ligne.

Exemple

hello();
// prints Hello stranger!

hello("toto");
// prints Hello toto!

¿Hola, señora?

Fichier à rendre : task01/Language.hpp, task01/hello.{cpp,hpp}, task01/main.cpp

Consignes

Copiez votre ou vos fonctions hello et ajoutez la possibilité de préciser une langue.

Si aucune langue n’est précisée, affichez le message en anglais.

En fonction de la langue passée en paramètre, vous devez adapter le message :

  • Language::Spanish
    • “¡Hola toto!” (avec nom en paramètre)
    • “¡Hola extranjero!” (sans nom en paramètre)
  • Language::French
    • “Bonjour toto !”
    • “Bonjour inconnu !”
  • Language::English
    • “Hello toto!”
    • “Hello stranger!”

Exemple

hello(Language::Spanish);
// ¡Hola extranjero!

hello("toto");
// Hello toto!

hello("toto", Language::French);
// Bonjour toto !

Add up and print

Fichiers à rendre : task02/add_and_print.hpp, task02/main.cpp

Écrivez une fonction template add_and_print qui prends deux paramètre, les ajoute ensemble, affiche le résultat sur la sortie standard et renvoie le résultat.

Les deux paramètres ne sont pas nécessairement du même type, du moment qu’ils sont additionnables.

Min/Max

Fichiers à rendre : task03/min.hpp, task03/max.hpp, task03/main.cpp

Écrivez une fonction template max qui prend deux paramètres et renvoie le plus grand des deux en utilisant les opérateurs de comparaison.

Écrivez une fonction template min qui prend deux paramètres et renvoie le plus petit des deux en utilisant les opérateurs de comparaison.

Si les deux paramètres sont égaux, renvoyez le premier.

Les fonctions doivent pouvoir fonctionner avec des paramètres de n’importe quel type, dès lors qu’ils peuvent être comparés avec les opérateurs de comparaison.

Coordonnées templates

Fichiers à rendre : task04/{pos.hpp,main.cpp}

Écrivez deux structures template :

  • pos_2d
  • pos_3d

Elles doivent permettre à leurs utilisateurs de choisir quel type utiliser pour leur champs.

Enfin, surchargez l’opérateur << pour permettre l’affichage de ses structures (dès lors que leur type est affichable).

Prototype d’une surcharge de l’opérateur << pour pos_2d :

template<typename T>
std::ostream &operator<<(std::ostream &os, const pos_2d<T> &rhs);
pos_2d<int> position;
position.x = 12;
position.y = 89;
std::cout << position << "\n";

pos_3d<float> rotation;
rotation.x = 0.145;
rotation.y = 45.2;
rotation.z = 78.1;
std::cout << rotation << "\n";

¿Hola, señora? maps and lambdas

Fichier à rendre : task05/Language.hpp, task05/hello.{cpp,hpp}, task01/main.cpp

Comme l’exercice ¿Hola, señora? mais vous n’avez pas le droit à un seul if. Vous devez utiliser std::unordered_map pour stocker des pointeurs sur fonctions.