Exercices supplémentaires: tableaux, chaînes de caractères, switch

#include <vector>
using namespace std;

Exercice (tableaux)

  • ♣ Implanter une fonction plus_proche qui prend en arguments un tableau de réels et un réel, puis renvoie l’élement du tableau le plus proche de ce réel. S’il y en a plusieurs, n’importe lequel convient. Commencer par en écrire la documentation.

// VOTRE CODE ICI
// VOTRE CODE ICI
CHECK( plus_proche( {0., 100., 200., 300.}, 245.) == 200. );
CHECK( plus_proche( {42., -4.2, 4.2}, 0.) == -4.2 or plus_proche( {42., -4.2, 4.2}, 0.) == 4.2);
  • ♣ Implanter une fonction est_dense qui prend en arguments un tableau de réels et une valeur d’espacement réelle, et renvoie vrai si le tableau est dense et faux sinon. Un tableau est dense si deux valeurs consécutives du tableau n’ont jamais une différence supérieure à la valeur d’espacement.

/** Tester si un tableau est dense
 *  @param t un tableau de réels
 *  @param espacement un réel
 *  @return vrai deux valeurs consécutives de t ont une différence d au plus espacement
 **/
bool est_dense(vector<double> t, double espacement) {
// VOTRE CODE ICI
}
CHECK( not est_dense( {100., 200., 300.}, 10. ));
CHECK(     est_dense( {0.7, 1.5, 2.4, 3.2}, 1. ));
CHECK( not est_dense( {0.7, 1.5, 2.1, 3.2}, 1. ));

Exercice (Code Morse ♣)

  • Voici une fonction qui traduit une lettre en code Morse. Elle contient une instruction switch que nous n’avons pas encore vue. À quoi ressemblerait la fonction avec des if à la place?

/** Traduction d une lettre en Morse
 *  @param a un caractère
 *  @return une chaîne de caractère représentant le code Morse du caractère
 **/
string morseCaractere(char a) {
    switch(a) {
    case 'A':
        return ".-";
    case 'B':
        return "-...";
    case 'C':
        return "-.-.";
    case 'D':
        return "-..";
    case 'E':
        return ".";
    case 'F':
        return "..-.";
    case 'G':
        return "--.";
    case 'H':
        return "....";
    case 'I':
        return "..";
    case 'J':
        return ".---";
    case 'K':
        return "-.-";
    case 'L':
        return ".-..";
    case 'M':
        return "--";
    case 'N':
        return "-.";
    case 'O':
        return "---";
    case 'P':
        return ".--.";
    case 'Q':
        return "--.-";
    case 'R':
        return ".-.";
    case 'S':
        return "...";
    case 'T':
        return "-";
    case 'U':
        return "..-";
    case 'V':
        return "...-";
    case 'W':
        return ".--";
    case 'X':
        return "-..-";
    case 'Y':
        return "-.--";
    case 'Z':
        return "--..";
    default:
        return "???";
    }
}
  • Implanter une fonction morseString qui prend en entrée une chaîne de caractères de longueur arbitraire et qui la traduit entièrement en code Morse.
    Indication: les chaînes de caractères (string) se comportent essentiellement comme des tableaux de caractères (char).

/** Traduction d un texte en Morse
 *  @param chaine une chaîne de caractères
 *  @return une chaîne de caractère contenant la traduction en Morse de la chaîne de caractère
 **/
string morseString(string texte) {
    // VOTRE CODE ICI
}
  • Compléter les tests ci-dessous et vérifier que la fonction les passe:

CHECK( morseString("HELLO") == "......-...-..---" );
CHECK( morseString("GOOD LUCK") == "--.-------..???.-....--.-.-.-" );
// VOTRE CODE ICI

Bilan

Si vous êtes arrivés jusqu’ici, bravo ! Vous pouvez reprendre le TP, en Python cette fois-ci :)