Test de C++ n° 2 : (25 mars 2000 – durée : 2h)

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

Tout document autorisé

Sommaire

Ajout de la fonction at() à la classe vector
Fonction CopyFile ()
Lancement de la fonction CopyFile() à partir de la fonction main()
Vérification des arguments de la fonction main()
Fonction ComptCaract()
Fonction EssaiComptCaract(void)

Ajout de la fonction at() à la classe vector

    L'accès à un élément d'un vecteur (vector), tant pour en extraire une valeur que pour lui en affecter une, est possible grâce à l'opérateur [] :
 
vector <int> V (10);
...
V [1] = 12;
int i = V [1];

    La fonction membre at() fait exactement la même chose :
 
vector <int> V (10);
...
V.at (1) = 12;
int i    = V.at (1);

    Contrairement à la fonction at(), l'opérateur [] ne vérifie pas la validité de l'indice. Plus rapide mais moins sûr, son utilisation devrait être limitée aux cas où une erreur est impossible. En cas d'erreur d'indice, l'utilisation de l'opérateur [] provoque l'arrêt du programme (Segmentation fault) et la fonction at() lève l'exception standard out_of_range. Malheureusement, la fonction at() est optionnelle (norme de C++ ). Elle n'existe donc pas obligatoirement dans toutes les implémentations des compilateurs, en particulier dans celle que nous utilisons à l'IUT. Cependant, il est toujours possible d'enrichir une classe en ajoutant des fonctionnalités à sa classe dérivée.

    Dériver la classe générique vector en une classe CVector et implémenter la fonction membre at() pour qu'elle corresponde à la description ci-dessus.

    Voir corrigé.

Sommaire

Fonction CopyFile ()

    Ecrire la fonction CopyFile() qui recopie, octet par octet, un fichier Source dans un fichier Destination. Les noms des deux fichiers sont passés en paramètres de type string. Ne pas valider l'existence du fichier Source.

    Voir corrigé.

Sommaire

Lancement de la fonction CopyFile() à partir de la fonction main()

    Ecrire la fonction main() qui appelle la fonction CopyFile() ci-dessus, en utilisant comme noms de fichiers les arguments de la commande de lancement. Rappel de la syntaxe de la fonction main() à utiliser ici :
 
int main (int argc, char * argv []);

    Voir corrigé.

Sommaire

Vérification des arguments de la fonction main()

    A la fonction main() ci-dessus, ajouter la vérification des arguments qui affiche un message et renvoie un code d'erreur quelconque au shell.

    Voir corrigé.

Sommaire
 

Fonction ComptCaract()

    Ecrire la fonction ComptCaract() qui compte la fréquence d'apparition de chaque caractère d'un fichier dont le nom est passé en paramètre. La fonction a deux paramètres résultats : le vecteur VCaract des caractères trouvés dans le fichier et le vecteur VCpt des compteurs de ces caractères, tous deux de type vector : ne pas compter les caractères qui ne sont pas dans le fichier.

  Voir corrigé.

Sommaire

Fonction EssaiComptCaract(void)

    Ecrire la fonction EssaiComptCaract(void) qui teste la fonction, à partir d'un fichier dont le nom est lu au clavier, et qui n'affiche les fréquences que des caractère éditables trouvés (code ASCII >= 20).

  Voir corrigé.

Sommaire

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