• Aucun résultat trouvé

Contrôle de Programmation C++

N/A
N/A
Protected

Academic year: 2022

Partager "Contrôle de Programmation C++"

Copied!
6
0
0

Texte intégral

(1)

Nom : Prénom :

POLYTECH – ELEC4 2019–2020

Contrôle de Programmation C++

Durée : 1h Aucun document autorisé

Exercice 1

RLE (Run Length Encoding) est une technique de compression de données, anciennement utilisée pour la compression d’images. Le principe est simplissime : une séquence de caractèresc identiques estremplacéepar :

c marqueur L

marqueurest un caractère spécial, si possible, peu fréquent dans la suite de caractères à comprimer etLla longueur de la séquence de caractèresccodée sur 1 seul caractère. PuisqueLest codée sur un caractère, cela veut dire que ce codage ne comprime qu’une suite d’au plus 9 caractères identiques. Si la suite fait plus de 9 caractères, les 9 premiers seront comprimés, puis la suite de la séquence sera considérée comme une nouvelle séquence à coder. Lorsque le marqueur apparaît dans les données à comprimer, il est remplacé par «marqueur0 ».

Par exemple, si on choisit comme marqueur le caractère#, la suite bbbbb##aaaaaaaaaaabb#xxx sera codéeb#5#0#0a#9a#2b#2#0x#3.

On définit la classe (incomplète)rle: c l a s s rle {

p r i v a t e :

c o n s t i n t l g _ m a x = 9;

c h a r m a r q u e u r ; p u b l i c:

rle (c o n s t c h a r c ) : m a r q u e u r ( c ) {}

std :: s t r i n g c o m p r i m e r (c o n s t std :: s t r i n g & s ) c o n s t ; std :: s t r i n g d e c o m p r i m e r (c o n s t std :: s t r i n g & s ) c o n s t; };

I 1. Écrivez la méthode decomprimer qui décode la chaîne de caractères codée passée en paramètre. Cette fonction devra émettre des exceptions que vous définirez par héritage de la classestd::exceptionpour les cas d’erreurs possibles.

En cas d’erreur, l’exception émise devra contenir :

1

(2)

— un message décrivant l’erreur ;

— le fragment de la chaîne déjà décomprimé ;

— le reste de la chaîne à partir de la position erronée.

Vous pourrez utiliser la méthodesubstr de la classestring qui renvoie une sous-chaîne de la chaîne courante :

— substr(pos,len)renvoie la sous-chaîne entre[pos ; pos+len];

— substr(pos) renvoie la sous-chaîne de l’indice pos jusqu’à la fin de la chaîne courante.

(3)

I 2. Écrivez un fragment de code C++ qui crée un objet de type rle, qui dé- comprime une chaîne de caractères codée, et qui affiche sur la sortie d’erreur standard les éventuelles exceptions.

3

(4)

Exercice 2

On souhaite représenter des grands ensembles (au sens mathématique) de taille quelconque dont les d’éléments sont de type quelconque. Ces grands en- sembles sont implémentés par une suite d’intervalles alloués dynamiquement et simplement chaînés. Chaque intervalle possède une borne inférieure, une borne supérieure et un lien sur l’intervalle suivant. Les intervalles sont en ordre croissant, et la borne supérieure d’un intervalle doit toujours être inférieure à la borne inférieure de l’intervalle suivant :

Par exemple, l’ensemble d’entiers{3,5,6,7,8,11,12} est représenté par :

3 3 5 8 11 12

I 3. Écrivez la classe générique intervalleavec :

— 3 variables d’instancebinf,bsup etsuivant;

— un constructeur pour initialiser les deux bornes de l’intervalle ;

— 3 accesseurs pour accéder aux 3 variables d’instance.

(5)

I 4. Par héritage de la classeintervalle, écrivez la classe génériquesingletonqui représente un intervalle dont la borne inférieure et supérieure sont identiques.

I 5. Écrivez la classe générique hlm qui représente les grands ensembles. Cette classe contiendra :

— un constructeur pour créer un ensemble vide ;

— la méthode booléenne vide qui teste si l’ensemble courant est vide ou non ;

— la méthode booléenneappartientqui teste si la valeur de son paramètre xappartient à l’ensemblehlmcourant.

5

(6)

Références

Documents relatifs

En vertu de la formule des accroissements nis, il nous sut de montrer qu'il existe deux points du graphe de f dénissant un segment de

Soient f et g deux fonctions définies et dérivables sur un intervalle I, et telles que leurs dérivées f ′ et g′ soient continues sur I... Primitive définie par

Si on considère 577 personnes françaises tirées aléatoirement avec remise, à quel intervalle appartiendra la proportion de femmes parmi ces 577 personnes avec une probabilité

Sous l’hypothèse que l’échantillon est issu d’un tirage aléatoire correspondant à un schéma de Bernoulli (tirage avec remise ou s’y apparentant), la

Le plus souvent on se contente de travailler sur un échantillon de la population, dont on peut parfois vérifier au préalable s’il est représentatif de la po- pulation entière

La dérivation, née de la résolution de problèmes locaux ( tangente à une courbe en un point, approximation locale ) se révèle être un outil essentiel pour

Elle recalcule donc beaucoup de fois les mêmes probabilités :

Le