Informatique Scientifique en C++

support de cours/TD (2010-2011)

F. Hecht, I. Danaila


Semaine 3

Cours

mardi 17/01/2011 (ID) :
  • Retour sur le passage d'argument.  Surcharge de fonctions.
  • Retour sur la définitions des tableaux en C++ 
  • Chaînes de caractères.
 
 
vendredi, 20/01/2011 (ID)
  • Classes : syntaxe, lexique. Création d'objets (statiques et dynamiques).
  • Définition déportée, constructeurs, destructeur, opérateurs. 
  • Exemples de classes : ClasseComplex, ClasseVide (voir les exercices plus bas).


TD

Utilisation des classes. Un premier programme C++ pour le calcul scientifique.

Pour commencer à programmer en C++ (notions de base de C++ sous forme de fichier pdf)

Notes de cours



Rappel :: manipulation de chaînes de caractères  

  1. // 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

     

  2. // 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)

  1. analyser le programme  ex_caracteres.cpp  qui explique le passage d'arguments aux fonctions ;  
  2. compiler et exécuter le programme ; commenter les résultats.
     

Exercice 2 (exemple de classe pour modéliser les nombres complexes)

  1. analyser le programme  ClassComplex.cpp  ;  
  2. compiler et exécuter le programme ; commenter les résultats ;
  3. 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)

  1. télécharger le programme C++ ClassVide.cpp et les fichiers Makefile et CheckPtr.cpp
  2. 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)
  3. 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)

  1. Revenir sur le programme écrit pour l'exercice 5 de la semaine02
  2. 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 ?
     
  3. 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.
  4. 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
  • int     solve_LU    ( int n,
                                       vector<double> &  a,
                                       vector<double> &  b,
                                       vector<double> &  c, vector<double> &  F)

     Tester le nouveau programme.