* 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_mF() pour imprime à l'écran.
* fp_mF() 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_mF(a,A);
* La fonction pour mettre à zéro la matrice.
** m_0_mF();
=== Pour aller plus loin ===
* Dans la '''[https://drive.google.com/folderview?id=0B-KoQAOnU4FnTWt2MnRnV3Y3UUE&usp=sharing librairie]''', voir fichier (f04a.zip), vous pourrez récupéré les fonctions :
* add_mF(), sub_mF(), mul_mF(), des matrices a introduire dans maple...
== La fonction fp_mF() ==
* Imprimer la matrice dans le fichier "aamatrix.txt".
* Si il y a plusieurs appels, les matrices ce rajoutent les unes derrière les autres.
=== Le code ===
* A ajouter dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]].
<source lang="c">
/* ------------------------------------ */
/* 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);
}
</source>
=== Appel de la fonction ===
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]].
<source lang="c">
/* ------------------------------------ */
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;
}
</source>
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
{| class="wikitable"
|-
| 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() ==
* Imprimer la matrice à l'écran.
=== Le code ===
* A ajouter dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]].
<source lang="c">
/* ------------------------------------ */
/* 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);
}
</source>
=== Appel de la fonction ===
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]].
<source lang="c">
/* ------------------------------------ */
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;
}
</source>
{| class="wikitable"
|-
| 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() ==
* Copier un tableau dans une matrice.
=== Le code ===
* A ajouter dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]]
<source lang="c">
/* ------------------------------------ */
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);
}
</source>
=== Appel de la fonction ===
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]].
<source lang="c">
/* ------------------------------------ */
/* ------------------------------------ */
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;
}
</source>
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() ==
* Mettre à zéro la matrice.
=== Le code ===
* A ajouter dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]]
<source lang="c">
/* ------------------------------------ */
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);
}
</source>
=== Appel de la fonction ===
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Matrices complexes fractions 2|librairie]]
<source lang="c">
/* ------------------------------------ */
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;
}
</source>
* Cette [http://www.dailymotion.com/video/xeqr4p_f03-4a_tech Vidéo] termine notre premier pas sur les double pointeurs.