Introduction au langage C/Matrices complexes
Apparence
Introduction
[modifier | modifier le wikicode]Présentation
[modifier | modifier le wikicode]Double pointeur de double.
- Pour nous ce sera un travail sur les matrices.
Ce cours en deux parties va vous présenter la création et la destruction de matrices complexes de la librairie "Mathc".
Le but
[modifier | modifier le wikicode]Cela vous permettra :
- Soit de construire votre propre méthode de création de matrices.
- Soit de construire votre propre librairie à partir de ces deux méthodes.
- Soit de commencer votre apprentissage de la méthode "mathc".
Exemple d'utilisation de la librairie
[modifier | modifier le wikicode]Copie d'un tableau dans une matrice
[modifier | modifier le wikicode]- Pour récupérer la librairied'algèbre linéaire (n_1aa.zip).
- Indispensable pour tester les exemples de cette page.
- Le deuxième fichier n_1ab.zip sera pour l'étude des tableaux de matrices.
/* ------------------------------------ */
/* Save as : c01.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
int main(void)
{
double a[R2*(C3*C2)] ={ 1, 2, 3, 4, 5, 6,
10,20, 30,40, 50,60};
double **A = i_mZ(R2,C3);
c_a_A_mZ(a,A);
printf(" a[r*c] -> A : \n\n");
p_mZ(A,4,0,3,0,C6);
f_mZ(A);
getchar();
return 0;
}
Présentation des fonctions :
double **A = i_mZ(C2,R3); | Initialiser une matrice complexe
|
c_a_A_mZ(a,A); | Copier le tableau "a" dans la matrice "A" |
p_mZ(A,N,V,RI,V,C); | Imprimer la matrice "A"
|
f_mR(A); | Libérer l'espace alloué à la matrice "A" |
- On ne passe pas la taille de la matrice en argument dans les fonctions.
Additionner deux matrices
[modifier | modifier le wikicode]/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int r = rp_I(5);
int c = rp_I(5);
double **A = r_mZ(i_mZ(r,c),9);
double **B = r_mZ(i_mZ(r,c),9);
double **AplsB = i_mZ(r,c);
printf(" A :");
p_mZ(A,3,0,3,0,C6);
printf(" B :");
p_mZ(B,3,0,3,0,C6);
add_mZ(A,B,AplsB);
printf(" AplsB :");
p_mZ(AplsB,3,0,3,0,C6);
f_mZ(A);
f_mZ(B);
f_mZ(AplsB);
getchar();
return 0;
}
À faire :
- Essayer de lire ce code comme pour l'exemple ci-dessus.
- On commence par l'intérieur.
- r_ pour rand.
- p_ pour print.
- i_ pour initialize.
- f_ pour free.
La fonction f_mZ();
[modifier | modifier le wikicode]- Nous allons commencer par cette fonction.
- Elle libère l'espace alloué à la matrice par la fonction i_mR();
Code source
[modifier | modifier le wikicode]/* ------------------------------------ */
void f_mZ(
double **A
)
{
if(A) free(A[0]);
free(A);
}
- Nous travaillons avec des double pointeurs (**A).
- Il y a deux pointeurs dans la fonction. (A,A[0])
- C'est un bon début.
- On commence par vérifier que "A" n’est pas NULL.
- Si tout va bien on libère "A[0]" le deuxième pointeur.
- Puis on libère A.
- Si "A" n'existe pas, on saute "A[0]", mais on libère "A".
- Peut-être aurait-il mieux valu écrire
/* ------------------------------------ */
void f_mZ(
double **A
)
{
if(A){
free(A[0]);
free(A);
}
}
Ceci termine notre premier pas sur les double pointeurs.