
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
