C pointeurs/Tableau matrices complexes
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 "w_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
double **A[3];
int r = rp_I(5);
int c = rp_I(5);
srand(time(&t));
A[0] = r_mZ(i_mZ(r,c),9);
A[1] = r_mZ(i_mZ(r,c),9);
A[2] = i_mZ(r,c);
printf(" A0 : ");
p_mZ(A[0],5,0,5,0,C6);
printf(" A1 : ");
p_mZ(A[1],5,0,5,0,C6);
printf(" A0plsA1 : ");
p_mZ(add_mZ(A[0],A[1],A[2]),5,0,5,0,C6);
f_mZ(A[0]);
f_mZ(A[1]);
f_mZ(A[2]);
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_mZ_An()
Code source
modifier/* ------------------------------------ */
#include "w_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_mZ_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_mZ(i_mZ(r,c),9);
}
/* ------------------------------------ */
void f_mZ_An(
double **A[],
int n
)
{
int i=0;
for(;i<n;i++)f_mZ(A[i]);
}
/* ------------------------------------ */
int main(void)
{
double **A[3];
int i=0;
time_t t;
srand(time(&t));
i_mZ_An(A,3);
add_mZ(A[0],A[1],A[2]);
for(;i<3;)
{
printf(" A%d : ",i);
p_mZ(A[i++],5,0,5,0,C6);
}
f_mZ_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 "w_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_mZ_An(
double **A[],
int n
)
{
int i = 0;
for(;i<n;i++) A[i] = r_mZ(i_mZ(rp_I(5),rp_I(5)),9);
}
/* ------------------------------------ */
void f_mZ_An(
double **A[],
int n
)
{
int i=0;
for(;i<n;i++)f_mZ(A[i]);
}
/* ------------------------------------ */
int main(void)
{
double **A[100];
int i=0;
time_t t;
srand(time(&t));
i_mZ_An(A,100);
for(;i<100;)
{
printf(" A%d : ",i);
p_mZ(A[i++],5,0,5,0,C6);;
}
f_mZ_An(A,100);
printf(" Press return to continue \n");
getchar();
return 0;
}
Conclusion
modifier- Vous pouvez approfondir ce travail sur wikiversité : Mathc Home Edition