C pointeurs/Tableau matrices complexes

Début de la boite de navigation du chapitre
Tableau matrices complexes
Icône de la faculté
Chapitre no 12
Leçon : C pointeurs
Chap. préc. :Matrices complexes 3
Chap. suiv. :Matrices fractions
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « C pointeurs : Tableau matrices complexes
C pointeurs/Tableau matrices complexes
 », n'a pu être restituée correctement ci-dessus.


Introduction

modifier
  • Pour approfondir ce travail : "Mathc".
  • 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