Rappel ::
manipulation de chaînes de caractères
- // travailler avec les chaînes de caractères
(classiques) #include <cstring>
- char * nom = new char[256]; // une chaîne de 256
caractères
- strcpy(nom,"param");
// copier une chaîne
- strcat(nom,".in"); // rajouter une chaîne
- ifstream fic(nom); // création d'un fichier d'entrée
- // travailler avec les chaînes de caractères (strings)
- string nom; // une variable de type string
-
nom ="param"; // initialisation (copier une chaîne)
- nom += ".in"; // rajouter une chaîne
- ifstream fic(nom.c_str()); // création d'un fichier d'entrée
(conversion string -> char *)
Exercice 1
(manipulation de chaînes de caractères)
- analyser le programme ex_caracteres.cpp qui explique le passage d'arguments aux
fonctions ;
- compiler et exécuter le programme ; commenter les résultats.
Exercice
2 (exemple de classe pour modéliser les nombres complexes)
- analyser le programme
ClassComplex.cpp ;
- compiler et exécuter le programme ; commenter les résultats ;
-
rajouter un opérateur (* par exemple) et une méthode (qui calcule le
module et la phase).
Exercice 3 (exemple de classe pour suivre constructeurs et destructeurs dans une
classe)
- télécharger le programme C++
ClassVide.cpp et les fichiers
Makefile et
CheckPtr.cpp
- l'utilisation d'un fichier Makefile facilite la compilation
d'une application formé de plusieurs programmes ; taper
make PROG=ClassVide
et remarquer que l'exécutable final est construit à partir de deux programmes
C++ : ClassVide.cpp et CheckPtr.cpp (ce dernier a comme rôle de
vérifier si les pointeurs sont détruits correctement à la fin de l'exécution)
- Modifier à volonté le programme afin de mieux comprendre le
fonctionnement du constructeur et du destructeur de la classe (ce programme
est discuté dans le document
notions de base en C++) .
Exercice 4 :
résolution d'un système linéaire à matrice tridiagonale (deuxième partie)
- Revenir sur le programme écrit pour l'exercice 5 de la
semaine02
- Ecrire une fonction qui
calcule le produit matrice-vecteur A*X, et tester la fonction
tridiag_LU suivant la procédure :
- --> garder les vecteurs a,b,c définis comme
précédemment (la matrice ne change pas) ;
- --> définir un vecteur X0 et le remplir avec des valeurs aléatoires
;
- --> calculer le produit A*X0 et stocker le résultat dans le
vecteur f (second membre)
- --> appeler tridiag_LU(n,a,b,c,f,X) comme précédemment et
comparer la solution X avec X0. Que doit-on obtenir ?
-
- Optimiser votre fonction tridiag_LU en remarquant que dans la
factorisation LU on peut stoker (b* dans b) et (c* dans c) et dans la résolution
du système on peut stoker la solution X dans F.
- Séparer votre
fonction tridiag_LU en deux fonctions :
-
- la factorisation LU : on peut stoker (b* dans b) et (c* dans c)
-
int fact_LU ( int
n,
-
vector<double> & a,
-
vector<double> & b,
-
vector<double> & c)
la résolution du système : on peut retourner la solution dans F