Exercices S04 – Tests possibles

Ce qui suit propose quelques solutions possibles pour les exercices proposés à la séance S04. Vous aurez peut-être même trouvé mieux, qui sait?

Problème de trouver_consecutifs(debut,fin,n)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
using namespace std;
int main() {
   int tab[] { 2, 3, 3, 3, 5, 7, 7, 7, 7, 11, 11 };
   auto pos = trouver_consecutifs(begin(tab), end(tab), 1);
   assert(pos == begin(tab));
   pos = trouver_consecutifs(begin(tab), end(tab), 2);
   assert(pos == begin(tab) + 1);
   pos = trouver_consecutifs(begin(tab), end(tab), 3);
   assert(pos == begin(tab) + 1);
   pos = trouver_consecutifs(begin(tab), end(tab), 4);
   assert(pos == begin(tab) + 5);
   pos = trouver_consecutifs(begin(tab), end(tab), 5);
   assert(pos == end(tab));
   pos = trouver_consecutifs(begin(tab), end(tab), -2);
   assert(pos == end(tab));
}

Remarquez que :

Problème de plus_longue_sequence(debut,fin)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <vector>
#include <algorithm>
#include <utility>
#include <cassert>
using namespace std;
int main() {
   vector<int> v;
   auto resultat = plus_longue_sequence(begin(v), end(v));
   assert(resultat.first == end(v) && resultat.second == end(v));
   v = { 2, 2, 3, 4, 5, 5, 5, 6 };
   resultat = plus_longue_sequence(begin(v), end(v));
   assert(resultat.first == begin(v) + 4 && resultat.second == begin(v) + 7);
   v = { 2 };
   resultat = plus_longue_sequence(begin(v), end(v));
   assert(resultat.first == begin(v) && resultat.second == end(v));
   v = { 2, 2, 3, 3 };
   resultat = plus_longue_sequence(begin(v), end(v));
   assert(resultat.first == begin(v) && resultat.second == begin(v) + 2);
}

Remarquez que :

Problème de plus_longue_sequence(debut,fin,pred)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <vector>
#include <cassert>
using namespace std;
int main() {
   auto est_pair = [](int n) { return n % 2 == 0; };
   auto est_impair = [=](int n) { return !est_pair(n); };
   vector<int> v;
   auto resultat = plus_longue_sequence(begin(v), end(v), est_pair);
   assert(resultat.first == end(v) && resultat.second == end(v));
   v = { 2, 2, 3, 4, 5, 5, 5, 6 };
   resultat = plus_longue_sequence(begin(v), end(v), est_pair);
   assert(resultat.first == begin(v) && resultat.second == begin(v) + 2);
   resultat = plus_longue_sequence(begin(v), end(v), est_impair);
   assert(resultat.first == begin(v) + 4 && resultat.second == begin(v) + 7);
   v = { 2 };
   resultat = plus_longue_sequence(begin(v), end(v), est_pair);
   assert(resultat.first == begin(v) && resultat.second == end(v));
   resultat = plus_longue_sequence(begin(v), end(v), est_impair);
   assert(resultat.first == end(v) && resultat.second == end(v));
   v = { 2, 2, 4, 4 };
   resultat = plus_longue_sequence(begin(v), end(v), est_pair);
   assert(resultat.first == begin(v) && resultat.second == end(v));
}

Les tests sont semblables à ceux réalisés pour plus_longue_sequence(debut,fin), à ceci près que nous utilisons ici des prédicats pour déterminer les caractéristiques d'une séquence. Par exemple, le dernier test trouvera le contenu de v tout entier puisque tous les nombres qui y sont sont pairs.


Pour les exercices suivants, vous aurez besoin de déterminer si un caractère c est un blanc ou non. Utilisez pour ce faire la fonction std::isspace(char,std::locale) que vous trouverez dans <locale>, en utilisant locale{""} à titre de paramètre pour le locale.

Notez qu'il existe aussi un std::isspace(char), fonction du langage C, dans <cctype>, version C++ de <ctype.h>, mais cette version (plus rapide, car moins puissante) ne tient pas compte de la culture et ne correspond pas à nos attentes pour cet exercice.

Problème de inverser_mots(s)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
int main() {
   assert(inverser_mots("") == "");
   assert(inverser_mots(" j'aime   mon prof  ") == " prof   mon j'aime  ");
   assert(inverser_mots("yo") == "yo");
   assert(inverser_mots("     yo man") == "     man yo");
   assert(inverser_mots("yo  man") == "man  yo");
}

Ceci correspond aux cas de tests proposés dans l'énoncé du travail. Le cas d'une chaîne vide n'avait pas été imposé, mais quelle excellent cas de test, n'est-ce pas?

Problème de inverser_lettres(s)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
int main() {
   assert(inverser_lettres("") == "");
   assert(inverser_lettres(" j'aime   mon prof  ") == " emia'j   nom forp  ");
   assert(inverser_lettres("yo") == "oy");
   assert(inverser_lettres("     yo man") == "     oy nam");
   assert(inverser_lettres("yo  man") == "oy  nam");
}

Ceci correspond aux cas de tests proposés dans l'énoncé du travail. Le cas d'une chaîne vide n'avait pas été imposé, mais quelle excellent cas de test, n'est-ce pas?

Problème de ltrim(s)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
int main() {
   assert(ltrim(" j'aime   mon prof  ") == "j'aime   mon prof  ");
   assert(ltrim("j'aime   mon prof  ") == "j'aime   mon prof  ");
   assert(ltrim(" x ") == "x ");
   assert(ltrim("   ") == "");
   assert(ltrim("") == "");
}

Ceci correspond aux cas de tests proposés dans l'énoncé du travail.

Problème de rtrim(s)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
int main() {
   assert(rtrim(" j'aime   mon prof  ") == " j'aime   mon prof");
   assert(rtrim(" j'aime   mon prof") == " j'aime   mon prof");
   assert(rtrim(" x ") == " x");
   assert(rtrim("   ") == "");
   assert(rtrim("") == "");
}

Ceci correspond aux cas de tests proposés dans l'énoncé du travail.

Problème de trim(s)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
int main() {
   assert(trim(" j'aime   mon prof  ") == "j'aime   mon prof");
   assert(trim("j'aime   mon prof") == "j'aime   mon prof");
   assert(trim("x") == "x");
   assert(trim("   ") == "");
   assert(trim("") == "");
}

Ceci correspond aux cas de tests proposés dans l'énoncé du travail.

Problème de elaguer_blancs(s)

Consigne :

Programme de test possible : il serait possible de tester votre solution avec un programme comme celui-ci.

//
// Votre code va ici, ou dans un .h que vous inclurez
//
#include <cassert>
int main() {
   assert(elaguer_blancs(" j'aime   mon prof  ") == " j'aime mon prof ");
   assert(elaguer_blancs("j'aime   mon prof") == "j'aime mon prof");
   assert(elaguer_blancs("   ") == " ");
   assert(elaguer_blancs(" ") == " ");
   assert(elaguer_blancs("") == "");
}

Ceci correspond aux cas de tests proposés dans l'énoncé du travail.


Valid XHTML 1.0 Transitional

CSS Valide !