Rappel de quelques
commandes de base
Linux/Unix
Rappel ::
possibilités de passage d'arguments aux fonctions
-
par valeur
(ou copie)
: double f1(double x) {return x*x;}
-
par pointeur (on évite
la copie) : double f2(double *x) {return (*x)*(*x);}
-
par référence (on évite la copie) :
double f3(double &x) {return x*x;};
Rappel ::
possibilités de définition de tableaux
- tableaux de taille fixe (à utiliser avec modération) :
int N=30; double u[N];
- en utilisant la bibliothèque STL (#include <vector>) :
vector<double> v(100);
- en utilisant un entier et un pointeur (recommandé)
int N; double * u = new double[N];
-
en utilisant la classse tableau
construite en cours (à définir la semaine prochaine).
Rappel ::
utilisation de la bibliothèque STL pour définir des tableaux
-
#include <vector> //en entête du programme
- vector<double> v(n); // déclaration d'un vecteur de taille n
(valeur de l'indice de 0 a n-1)
- v[i]; //expression pour avoir l'élément i du vecteur v
- v.at(i); //expression pour avoir l'élément i du vecteur v
(avec vérification des limites)
- v.size() ; // pour obtenir la taille du vecteur.
- v.front() ; // pour obtenir le premier élément.
- v.end() ; // pour obtenir le dernier élément.
- v=w; // copie d'un vecteur (v a la taille de w)
- v.resize(N1) ; // redimensionner le tableau à la taille N1.
-
v.pop_back() ; // élimine le dernier élément (la dimension devient
N-1).
- v.push_back(val) ; // rajoute un nouveau élément (de
valeur val) à la fin -- la dimension devient N+1.
Exercice 1
(exemples de passage d'arguments aux fonctions)
- analyser le programme
ex_fonctions_1.cpp qui explique le passage d'arguments aux
fonctions ;
- compiler et exécuter le programme ; commenter les résultats.
Exercice
2 (exemples d'utilisation de la STL pour travailler avec des tableaux)
- analyser le programme
ex_stl_utilisation.cpp qui
explique l'utilisation de la bibliothèque STL pour définir des tableaux ;
- compiler et exécuter le programme ; commenter les résultats.
Exercice
3 (exemples de passage d'arguments en utilisant la STL)
- analyser le programme
ex_stl_fonctions.cpp qui explique le passage d'arguments de type
tableau (définis avec la STL) ;
- compiler et exécuter le programme ; commenter les résultats.
Exercice 4
- revenir sur les programmes test_argc.cpp et
first.cpp analyser les éléments de syntaxe utilisés
- entrée/sortie : cout
-
les types de base : int, bool, double
-
les expressions : + - * / % , < > <= >= == != ! , && || , = += , -=
-
les instructions : if, for, break, continue
- remarquer l'utilisation de la bibliothèque STL pour la définition
des tableaux
#include <vector> //en entête du programme
vector<double> v(n); // déclaration d'un vecteur de taille n
(valeur de l'indice de 0 a n-1)
v[i]; //expression pour avoir la composante i du vecteur v
v.size() ; // pour obtenir la taille du vecteur.
v=w; // copie d'un vecteur (v a la taille de w)
- modifier le programme test_argc.cpp pour afficher sur trois colonnes les valeurs
[x, cos(x), sin(x)] et représenter sur le même graphe les courbes
correspondant aux deux fonctions. Utiliser la commande Gnuplot :
plot "resultat.dat" title "cos" w l, "resultat.dat" using 1:3
title "sin" w l
- utiliser des variables de type char* ou string pour stocker des chaînes de caractères (pour les noms des fichiers par exemple)
- créer des fonctions pour remplir les vecteurs avec des valeurs aléatoires (fonction
rand()) : utiliser les différentes techniques de passage d'arguments.
Exercice 5 :
résolution d'un système linéaire à matrice tridiagonale
Indication : utiliser
le programme
ex_stl_fonctions.cpp
comme base de départ pour écrire votre programme.
- Analyser l'algorithme de résolution utilisant la décomposition LU
présenté dans ce
fichier pdf
- Ecrire une fonction C++ qui utilise cet algorithme pour
résoudre le système linéaire A*X=F,
-
avec A une matrice tridiagonale (définie par trois vecteurs
de taille n, les diagonales a,b,c )
-
et F le second membre (un vecteur de taille n).
-
-
Le prototype de la fonction sera, par exemple,
-
int tridiag_LU ( int
n,
-
vector<double> & a,
-
vector<double> & b,
-
vector<double> & c,
-
vector<double> & F,
-
vector<double> & X)
-
-
Attention à la correspondance des indices (en C++, les éléments
d'un tableau de taille n sont indicés entre 0 et n-1) !!
-
- Ecrire la fonction main qui définit les vecteurs a,b,c, F,X
de taille n, suivant la procédure suivante :
- --> donner des valeurs aléatoires (entre 0 et 1) aux éléments de a et c ;
- --> corriger : a[0]=0; c[n-1]=0;
- --> calculer : b[i] = a[i]+c[i]+1, 0<= i <n;
- --> calculer : f [i] = a[i]+b[i]+c[i], 0<= i <n.
-
- Dans la fonction main, appeler la fonction tridiag_LU
et afficher la solution X du système linéaire.
- Quels valeurs faut-il obtenir pour X[i] ? Pourquoi le
système linéaire est inversible ?
- Imaginer d'autres cas pour tester la fonction tridiag_LU.
-