TP : exercices supplémentaires : tableaux, chaînes de caractères, switch#

#include <vector>
using namespace std;

Exercice 1 : 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.

// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
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) {
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
}
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 2 : 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) {
    // Remplacer cette ligne et la suivante par le code adéquat
    throw runtime_error("Code non implanté");
}
  • Compléter les tests ci-dessous et vérifier que la fonction les passe:

CHECK( morseString("HELLO") == "......-...-..---" );
CHECK( morseString("GOOD LUCK") == "--.-------..???.-....--.-.-.-" );
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");
// Remplacer cette ligne et la suivante par le code adéquat
throw runtime_error("Code non implanté");

Bilan#

Si vous êtes arrivés jusqu’ici, bravo! Votre prochain défi est de résoudre le projet Euler 26.