C pointeurs/Matrices complexes fractions 3

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

Introduction (troisième partie)

modifier
  • Ces fonctions sont données pour ceux qui ne sont pas intéressés par la librairie.
  • Il suffit de rajouter ces fonctions à celles du cours précédent pour créer sa propre librairie.


Présentation des fonctions

modifier
  • Je rajoute deux fonctions pour imprimer les matrices.
  • p_mF() pour imprime à l'écran.
  • fp_mF() pour imprimer dans le fichier "aamatrix.txt"
    • f_p=fopen("aamatrix.txt", "a");
    • les matrices se rajoutent les unes derrière les autres.
  • Une fonction pour copier un tableau dans une matrice
    • c_a_A_mF(a,A);
  • La fonction pour mettre à zéro la matrice.
    • m_0_mF();


Pour aller plus loin

modifier
  • Dans la librairie, voir fichier (f04a.zip), vous pourrez récupéré les fonctions :
  • add_mF(), sub_mF(), mul_mF(), des matrices à introduire dans maple...

La fonction fp_mF()

modifier
  • Imprimer la matrice dans le fichier "aamatrix.txt".
  • S'il y a plusieurs appels, les matrices ce rajoutent les unes derrière les autres.

Le code

modifier
/* ------------------------------------ */
/* Imprimer une matrice dans un fichier */
/* ------------------------------------ */
double **fp_mF(
double **A,
char MatrixName[],
int er,
int ei,
int n
)
{
FILE * fp = fopen("aamatrix.txt","a");

int r;
int c;
int n_c;
int n_c_LAST;
int n_c_FIRST;

fprintf(fp,"%s",MatrixName);

n_c = FIRST;

while(n_c<A[C_SIZE][OF])
     {
      n_c+=n*C4;
                          n_c_FIRST = n_c-n*C4;
      if(n_c<A[C_SIZE][OF])n_c_LAST  = n_c;
      else                n_c_LAST  = A[C_SIZE][OF];

 	  for(r=FIRST; r<A[R_SIZE][OF]; r++)
         {
          fprintf(fp,"\n");
 	      for (c=n_c_FIRST; c<n_c_LAST; c+=C4)
               fprintf(fp,"%+*.0f/%*.0f %+*.0f/%*.0f*I ",
               er,A[r][c   ],
               ei,A[r][c+C1],
               C1,
                  A[r][c+C2],
               ei,A[r][c+C3]
               );
          }
      fprintf(fp,"\n");
     }
fprintf(fp,"\n");

fclose(fp);

return(A);
}

Appel de la fonction

modifier
  • Remplace la fonction main() dans le fichier de la librairie.
/* ------------------------------------ */
int main(void)
{
double **A = i_mF(R2,C3);
double **B = i_mF(R3,C2);
double **C = i_mF(R3,C9);


  fp_mF(A,"Matrix A :\n", 5,0,C6); /*  0 Tab  avant le signe /       */
  fp_mF(B,"Matrix B :\n",10,0,C6); /* 10 Tab  avant le numerateur    */
  fp_mF(C,"Matrix C :\n", 0,0,C4); /* Quatre colonnes par ligne      */

  f_mF(A);
  f_mF(B);
  f_mF(C);

  printf(" Open the file aamatrix.txt. \n\n Press return to continue ");

  getchar();

  return 0;
}

Sortie dans le fichier "aamatrix.txt" :

Matrix A :
.
  +0/1 +0/1*I    +0/1 +0/1*I    +0/1 +0/1*I 
  +0/1 +0/1*I    +0/1 +0/1*I    +0/1 +0/1*I 
.
Matrix B :
.
       +0/1 +0/1*I         +0/1 +0/1*I 
       +0/1 +0/1*I         +0/1 +0/1*I 
       +0/1 +0/1*I         +0/1 +0/1*I 
.
Matrix C :
.
+0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I 
+0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I 
+0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I 
.
+0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I 
+0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I 
+0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I +0/1 +0/1*I 
.
+0/1 +0/1*I 
+0/1 +0/1*I 
+0/1 +0/1*I 


fp_mF(A,"MatrixName",N,F,C); Imprimer la matrice "A"
  • N espaces entre les nombres.
  • F espaces entre les numérateurs et les dénominateurs.
  • C1 1 espace entre partie réelle et imaginaire
  • C colonnes par lignes.


La fonction p_mF()

modifier
  • Imprimer la matrice à l'écran.

Le code

modifier
/* ------------------------------------ */
/* Imprimer une matrice a l'ecran       */
/* ------------------------------------ */
double **p_mF(
double **A,
int er,
int ei,
int n
)
{
int r;
int c;
int n_c;
int n_c_LAST;
int n_c_FIRST;

n_c = FIRST;

while(n_c<A[C_SIZE][OF])
     {
      n_c+=n*C4;
                          n_c_FIRST = n_c-n*C4;
      if(n_c<A[C_SIZE][OF])n_c_LAST  = n_c;
      else                n_c_LAST  = A[C_SIZE][OF];

 	  for(r=FIRST; r<A[R_SIZE][OF]; r++)
         {
          printf("\n");
 	      for (c=n_c_FIRST; c<n_c_LAST; c+=C4)
               printf("%+*.0f/%*.0f %+*.0f/%*.0f*I ",
               er,A[r][c   ],
               ei,A[r][c+C1],
               C1,
                  A[r][c+C2],
               ei,A[r][c+C3]
               );
          }
      printf("\n");
     }
printf("\n");

return(A);
}


Appel de la fonction

modifier
  • Remplace la fonction main() dans le fichier de la librairie.
/* ------------------------------------ */
int main(void)
{
double **A = i_mF(R2,C3);

  p_mF(A,0,0,C6);

  f_mF(A);

  printf(" Press return to continue ");

  getchar();

  return 0;
}


p_mF(A,N,F,C); afficher la matrice "A"
  • N espaces entre les nombres.
  • F espaces entre les numérateurs et les dénominateurs.
  • C colonnes par lignes.

La fonction c_a_A_mF()

modifier
  • Copier un tableau dans une matrice.

Le code

modifier
/* ------------------------------------ */
double **c_a_A_mF(
double  a[],
double  **A
)
{
int r;
int c;
int i=0;

 	for    (r=FIRST; r<A[R_SIZE][OF]; r++)
 	   for (c=FIRST; c<A[C_SIZE][OF]; c++)

            A[r][c] = a[i++];
            
return(A);
}


Appel de la fonction

modifier
  • Remplace la fonction main() dans le fichier de la librairie.
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double a[R2*(C3*C4)]={ 1,1,1,1, 2,2,2,2, 3,3,3,3,
                       4,4,4,4, 5,5,5,5, 6,6,6,6};

double **A = i_mF(R2,C3);

   c_a_A_mF(a,A);

   printf(" A: \n");
   p_mF(A,0,10,C4);

   f_mF(A);

   getchar();

 return 0;
}


Le résultat:

A: 
.
  +1/1 +1/1*I    +2/2 +2/2*I    +3/3 +3/3*I 
  +4/4 +4/4*I    +5/5 +5/5*I    +6/6 +6/6*I 


La fonction m_0_mF()

modifier
  • Mettre à zéro la matrice.

Le code

modifier
/* ------------------------------------ */
double **m_0_mF(
double **Zer
)
{
int r;
int c;

  for  (r=FIRST; r<Zer[R_SIZE][OF]; r++)
    for(c=FIRST; c<Zer[C_SIZE][OF]; c+=C2)
          {
           Zer[r][c   ] = 0.;
           Zer[r][c+C1] = 1.;
          }
          
return(Zer);
}


Appel de la fonction

modifier
  • Remplace la fonction main() dans le fichier de la librairie
/* ------------------------------------ */
int main(void)
{
double **A = m_0_mF(i_mF(C2,R3));

/* p_mF(A,0,0,C6); */

  f_mF(A);

  printf(" Press return to continue ");

  getchar();

  return 0;
}


  • Cette Vidéo termine notre premier pas sur les double pointeurs.