Introduction au langage C/Double pointeur de double
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 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.
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
double a[R2*C3]={ 1,2,3,
4,5,6};
double **A = i_mR(R2,C3);
c_a_A_mR(a,A);
printf(" a[r*c] -> A : \n\n");
p_mR(A,0,0,C6);
f_mR(A);
getchar();
return 0;
}
Présentation des fonctions :
double**A=i_mR(R2,C3); | Initialiser une matrice réelle
|
c_a_A_mR(a,A); | Copier le tableau "a" dans la matrice "A" |
p_mR(A,T,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 "v_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int r = rp_I(5);
int c = rp_I(5);
double **A = r_mR(i_mR(r,c),9);
double **B = r_mR(i_mR(r,c),9);
double **AplsB = i_mR(r,c);
printf(" A : ");
p_mR(A,3,0,C6);
printf(" B : ");
p_mR(B,3,0,C6);
printf(" AplsB : ");
p_mR(add_mR(A,B,AplsB),3,0,C6);
f_mR(A);
f_mR(B);
f_mR(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_mR();
[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_mR(
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_mR(
double **A
)
{
if(A){
free(A[0]);
free(A);
}
}
Ceci termine notre premier pas sur les double pointeurs.