Introduction au langage C/Tableau de double pointeur
Introduction
modifier- Pour approfondir ce travail : "Mathc".
Le but
modifier- Des tableaux de matrices permet de travailler avec des boucles.
Les exemples
modifier- Le premier exemple montre la méthode.
- Le second exemple automatise le travail (boucle for).
- Le troisième exemple nous montre qu’il n'y a aucune raison que les matrices soient toutes de tailles identiques.
La librairie
modifier- Il faut utiliser la librairied'algèbre linéaire (n_1aa.zip).
- Indispensable pour tester les exemples de cette page.
- Le deuxième fichier n_1ab.zip donne des exemples sur les tableaux de matrices réelles et complexes.
Premier exemple
modifier- On créé un tableau de double pointeur fixe (double **A[3];)
- On fait pointer chaque élément du tableau sur une matrice.
- Ne pas oublier de libérer chaque élément du tableau.
Code source
modifier/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
double **A[3];
time_t t;
srand(time(&t));
int r = rp_I(5);
int c = rp_I(5);
A[0] = r_mR(i_mR(r,c),9);
A[1] = r_mR(i_mR(r,c),9);
A[2] = i_mR(r,c);
printf(" A0 : ");
p_mR(A[0],5,0,6);
printf(" A1 : ");
p_mR(A[1],5,0,6);
add_mR(A[0],A[1],A[2]);
printf(" A0plsA1 : ");
p_mR(A[2],5,0,6);
f_mR(A[0]);
f_mR(A[1]);
f_mR(A[2]);
printf(" Press return to continue \n");
getchar();
return 0;
}
Deuxième exemple
modifier- L'intérêt des tableaux est d’utiliser une boucle.
- Ici on initialise et on détruit le tableau dans une boucle for.
- J’ai choisi de soulager la fonction main() en portant le maximum dans i_mR_An()
Code source
modifier/* ------------------------------------ */
#include "v_a.h"
/* --------------------------------------------------- */
/* Initialisation d'un tableau de double pointeurs */
/* Cette fonction dépend de la feuille de travail */
/* Ici on veut des matrices de tailles alétoires [1..5] */
/* Initialiser avec des valeurs aléatoire [-9..9] */
/* Ce travail est effectué ici pour soulager main() */
/* --------------------------------------------------- */
void i_mR_An(
double **A[],
int n
)
{
int i = 0;
int r = rp_I(5);
int c = rp_I(5);
for(;i<n;i++) A[i] = r_mR(i_mR(r,c),9);
}
/* ------------------------------------ */
void f_mR_An(
double **A[],
int n
)
{
int i=0;
for(;i<n;i++)f_mR(A[i]);
}
/* ------------------------------------ */
int main(void)
{
double **A[3];
int i=0;
time_t t;
srand(time(&t));
i_mR_An(A,3);
add_mR(A[0],A[1],A[2]);
for(;i<3;)
{
printf(" A%d : ",i);
p_mR(A[i++],5,0,6);
}
f_mR_An(A,3);
printf(" Press return to continue \n");
getchar();
return 0;
}
Troisième exemple
modifier- Le tableau à 100 matrices de tailles différentes.
- Ne pas oublier de libérer chaque élément du tableau.
Code source
modifier/* ------------------------------------ */
#include "v_a.h"
/* --------------------------------------------------- */
/* Initialisation d'un tableau de double pointeurs */
/* Cette fonction dépend de la feuille de travail */
/* Ici on veut des matrices de tailles alétoires [1..5] */
/* Initialiser avec des valeurs aléatoire [-9..9] */
/* */
/* LES MATRICES NON PAS TOUTES LA MEME TAILLE */
/* --------------------------------------------------- */
void i_mR_An(
double **A[],
int n
)
{
int i = 0;
for(;i<n;i++) A[i] = r_mR(i_mR(rp_I(5),rp_I(5)),9);
}
/* ------------------------------------ */
void f_mR_An(
double **A[],
int n
)
{
int i=0;
for(;i<n;i++)f_mR(A[i]);
}
/* ------------------------------------ */
int main(void)
{
double **A[100];
int i=0;
time_t t;
srand(time(&t));
i_mR_An(A,100);
for(;i<100;)
{
printf(" A%d : ",i);
p_mR(A[i++],5,0,6);
}
f_mR_An(A,100);
printf(" Press return to continue \n");
getchar();
return 0;
}