Test de C++ n° 1 : (10 mars 2001 – durée : 2h)

 © D. Mathieu    mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 06/03/2001 - Dernière mise à jour : 06/03/2001

Tout document autorisé

Sommaire

Tri par insertion : utilisation de sentinelle
Chaînes
Flux, chaînes et vecteurs

Tri par insertion : utilisation de sentinelle


    Dans la fonction Exo_01c() du fichier exo_01.cxx (TP 4 de C++), nous avons montré que la boucle de décalage à droite des éléments du vecteur s'arrête soit lorsqu'est trouvé un élément inférieur ou égal à l'élément à insérer, soit lorsque le premier élément du vecteur est atteint. Dans ce cas, il faut encore vérifier si ce premier élément doit lui-même être décalé.

    Si N désigne le nombre d'éléments du vecteur et si les éléments à insérer se présentent dans un ordre aléatoire, la probabilité d'insérer en tête est de 1/N, et pourtant le test de début de vecteur doit toujours être effectué. Pour supprimer ce test, il faut être sûr que l'autre test sera toujours satisfait, donc que sera toujours trouvé un élément inférieur ou égal à l'élément à insérer. Une telle certitude peut être obtenue en plaçant la nouvelle valeur en première position du vecteur avant de commencer le décalage. Cette position est appelée la sentinelle.

    Un vecteur de N valeurs "utiles" contient donc N+1 éléments, l'élément de rang 0 étant réservé à une utilisation interne du tri.

Corrigé :     TriInsertSent.cxx

Sommaire


Chaînes

    La classe standard string ne possède pas de fonction membre permettant de mettre une chaîne en majuscules. Une solution serait de la dériver en une autre classe qui serait enrichie de cette fonctionnalité (et de bien d'autres). Ce n'est pas la solution retenue dans cet exercice.
  Corrigé :     StrToUpper()      -      StrToUpper2()      -      Reponse

Sommaire

Flux, chaînes et vecteurs

    Un fichier écrit dans le langage html (ou plus simplement appelé "fichier html"), utilisé par les navigateurs (browsers) est un fichier texte dans lequel les mots-clés, appelés des balises, sont encadrés de <>. Les balises ne peuvent être imbriquées. Voici par exemple un extrait du fichier contenant l'énoncé du test (balises en gras) :
 
<li>
&nbsp;&nbsp;&nbsp; Quelle(s) modification(s) faut-il apporter &agrave;
la fonction <tt>EditVString()</tt> ?</li>
</ul>
<b>Corrig&eacute;</b> :&nbsp;&nbsp;&nbsp;&nbsp; 
<tt><a href="TriInsertSent_cxx.html">TriInsertSent.cxx</a></tt>
<br>
<hr WIDTH="50%">
<p>&nbsp;&nbsp;&nbsp; La classe standard <tt>string</tt> ne poss&egrave;de

  1. - Ecrire la fonction AfficherBalises() qui affiche à l'écran, sans les stocker, toutes les balises d'un fichier html qui lui est passé en paramètre, à raison d'une balise par ligne. Les <> doivent aussi être affichés. On supposera que :     Pour la lecture dans le fichier, utiliser la fonction get(char & C) membre de la classe istream.

    Corrigé : Balises_01.cxx


  2. - On considèrera ici que le changement de ligne dans un fichier texte est marqué par la suite des deux caractères suivants :     Indiquer précisément la ou les modifications à apporter à la fonction AfficherBalises() pour que chaque balise soit affichée sur une ligne, même si elle est sur plusieurs lignes différentes du fichier.

    Corrigé :     Balises_02.cxx


  3. - Ecrire la fonction StockerBalises() qui range dans un vecteur (vector) de chaînes (string) toutes les balises d'un fichier html. Le vecteur et le fichier sont passés en paramètres de la fonction. Une balise peut être sur des lignes différentes dans le fichier, mais doit être stockée dans une seule chaîne. Pour cet exercice, il est impérativement demandé de : Corrigé :     Balises_03.cxx

Sommaire

© D. Mathieu    mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique