« Introduction au langage C/Matrices complexes 3 » : différence entre les versions

Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-(\*)(.*)\n{2,}(\*) +\1\2\n\3)
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
Ligne 7 : Ligne 7 :
}}
}}


== Introduction (troisième partie) ==
== Introduction (troisième partie) ==




=== Le but ===
=== Le but ===


* Ces fonctions sont donnés pour ceux qui ne sont pas intéressés par la librairie.
* Ces fonctions sont donnés pour ceux qui ne sont pas intéressés par la librairie.
Ligne 16 : Ligne 16 :




=== Présentation des fonctions ===
=== Présentation des fonctions ===


* Je rajoute deux fonctions pour imprimer les matrices.
* Je rajoute deux fonctions pour imprimer les matrices.
Ligne 29 : Ligne 29 :




=== Pour aller plus loin ===
=== Pour aller plus loin ===


* Dans la '''[https://drive.google.com/folderview?id=0B-KoQAOnU4FnWFJJUnNkN3h1bFU&usp=sharing librairie]''', voir fichier '''wbm.h''', vous pourrez récupéré les fonctions :
* Dans la '''[https://drive.google.com/folderview?id=0B-KoQAOnU4FnWFJJUnNkN3h1bFU&usp=sharing librairie]''', voir fichier '''wbm.h''', vous pourrez récupéré les fonctions :
Ligne 37 : Ligne 37 :




== La fonction fp_mZ() ==
== La fonction fp_mZ() ==


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


=== Le code ===
=== Le code ===


* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 91 : Ligne 91 :
</source>
</source>


=== Appel de la fonction ===
=== Appel de la fonction ===


* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 173 : Ligne 173 :




== La fonction p_mR() ==
== La fonction p_mR() ==


* Imprimer la matrice à l'écran.
* Imprimer la matrice à l'écran.


=== Le code ===
=== Le code ===


* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 222 : Ligne 222 :




=== Appel de la fonction ===
=== Appel de la fonction ===


* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 255 : Ligne 255 :
|}
|}


== La fonction c_a_A_mR() ==
== La fonction c_a_A_mR() ==


* Copier un tableau dans une matrice.
* Copier un tableau dans une matrice.


=== Le code ===
=== Le code ===


* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 284 : Ligne 284 :




=== Appel de la fonction ===
=== Appel de la fonction ===


* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 310 : Ligne 310 :




== La fonction m_0_mR() ==
== La fonction m_0_mR() ==


* Mettre à zéro la matrice.
* Mettre à zéro la matrice.


=== Le code ===
=== Le code ===


* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* À ajouter dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
Ligne 339 : Ligne 339 :




=== Appel de la fonction ===
=== Appel de la fonction ===


* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].
* Remplace la fonction main() dans le fichier de la [[Introduction_au_langage_C/Matrices_complexes_2|librairie]].

Version du 1 août 2017 à 17:29

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

Introduction (troisième partie)

Le but

  • Ces fonctions sont donnés 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

  • Je rajoute deux fonctions pour imprimer les matrices.
  • p_mZ() pour imprime à l'écran.
  • fp_mZ() pour imprimer dans le fichier "aamatrix.txt"
    • f_p=fopen("aamatrix.txt", "a");
    • les matrices ce rajoutent les unes derrières les autres.
  • Une fonction pour copier un tableau dans une matrice
    • c_a_A_mZ(a,A);
  • La fonction pour mettre à zéro la matrice.
    • m_0_mZ();


Pour aller plus loin

  • Dans la librairie, voir fichier wbm.h, vous pourrez récupéré les fonctions :
  • add_mZ(), sub_mZ(), mul_mZ(), smul_mZ(), pow_mZ() ... pour vous faire la main.



La fonction fp_mZ()

  • 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

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

int r;
int c;
int n_c = FIRST;
int n_c_LAST;
int n_c_FIRST;

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

while(n_c<A[C_SIZE][OF])
     {
      n_c+=n;
                           n_c_FIRST = n_c-n;
      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++)
               fprintf(fp,"%+*.*f ",er,dr,A[r][c]);
          }
      fprintf(fp,"\n");
     }
fprintf(fp,"\n");

fclose(fp);

return(A);
}

Appel de la fonction

  • Remplace la fonction main() dans le fichier de la librairie.
/* ------------------------------------ */
int main(void)
{
double **A = i_mZ(4, 7);
double **B = i_mZ(4, 4);
double **C = i_mZ(3,12);
double **D = i_mZ(5, 5);

  fp_mZ(A,"Matrix A :\n", 0,0,0,0,C6);/* 6 colonnes par ligne            */
  fp_mZ(B,"Matrix B :\n", 4,0,0,0,C6);/* 4 espaces entre les nombres     */
  fp_mZ(C,"Matrix C :\n", 4,0,3,0,C6);/* 3 espaces entre les parties R/I */
  fp_mZ(D,"Matrix D :\n", 4,1,3,1,C6);/* 1 chiffre après la virgule      */

  f_mZ(A);
  f_mZ(B);
  f_mZ(C);
  f_mZ(D);

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

  getchar();

  return 0;
}

Dans le fichier :

Matrix A :
.
+0+0i +0+0i +0+0i +0+0i +0+0i +0+0i 
+0+0i +0+0i +0+0i +0+0i +0+0i +0+0i 
+0+0i +0+0i +0+0i +0+0i +0+0i +0+0i 
+0+0i +0+0i +0+0i +0+0i +0+0i +0+0i 
.
+0+0i 
+0+0i 
+0+0i 
+0+0i 
.
Matrix B :
.
 +0+0i   +0+0i   +0+0i   +0+0i 
 +0+0i   +0+0i   +0+0i   +0+0i 
 +0+0i   +0+0i   +0+0i   +0+0i 
 +0+0i   +0+0i   +0+0i   +0+0i 
.
Matrix C :
.
 +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i 
 +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i 
 +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i 
.
 +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i 
 +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i 
 +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i   +0 +0i 
.
Matrix D :
.
+0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i 
+0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i 
+0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i 
+0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i 
+0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i +0.0+0.0i 


p_mZ(A,N,V,RI,V,C); Imprimer la matrice "A"
  • N espaces entre les nombres.
  • RI espaces entre les parties réelles et imaginaire.
  • V chiffres après la virgule.
  • C colonnes par lignes.


La fonction p_mR()

  • Imprimer la matrice à l'écran.

Le code

/* ------------------------------------ */
double **p_mZ(
double **A,
int er,
int dr,
int ei,
int di,
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*C2;
                          n_c_FIRST = n_c-n*C2;
      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+=C2)
               printf("%+*.*f%+*.*fi ",er,dr,A[r][c],ei,di,A[r][c+C1]);
          }
      printf("\n");
     }
printf("\n");

return(A);
}


Appel de la fonction

  • Remplace la fonction main() dans le fichier de la librairie.
/* ------------------------------------ */
int main(void)
{
double **A = i_mZ(R3,C5);


  p_mZ(A,4,0,3,0,C6);

  f_mZ(A);

  printf("\n Press return to continue");

  getchar();

  return 0;
}


p_mZ(A,N,V,RI,V,C); Imprimer la matrice "A"
  • N espaces entre les nombres.
  • RI espaces entre les parties réelles et imaginaire.
  • V chiffres après la virgule.
  • C colonnes par lignes.

La fonction c_a_A_mR()

  • Copier un tableau dans une matrice.

Le code

/* ------------------------------------ */
double **c_a_A_mZ(
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

  • Remplace la fonction main() dans le fichier de la librairie.
/* ------------------------------------ */
int main(void)
{
double a[R2*(C3*C2)] ={ 1, 2,  3, 4,  5, 6,
                       10,20, 30,40, 50,60};

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

  c_a_A_mZ(a,A);

/*printf(" a[r*c] -> A : \n\n");
  p_mZ(A,4,0,3,0,C6);
*/
  f_mZ(A);
  getchar();

  return 0;
}


La fonction m_0_mR()

  • Mettre à zéro la matrice.

Le code

/* ------------------------------------ */
double **m_0_mZ(
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] = 0.;
          }

return(Zer);
}


Appel de la fonction

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

/*  p_mZ(A,4,0,3,0,C6);               
*/

  f_mZ(A);
  getchar();

  return 0;
}