Introduction au langage C/Matrices complexes 3
Apparence
Introduction (troisième partie)
[modifier | modifier le wikicode]Le but
[modifier | modifier le wikicode]- 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 | modifier le wikicode]- 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 se rajoutent les unes derrière 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
[modifier | modifier le wikicode]- 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()
[modifier | modifier le wikicode]- 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 | modifier le wikicode]- À ajouter dans le fichier de la librairie.
/* ------------------------------------ */
/* 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
[modifier | modifier le wikicode]- 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"
|
La fonction p_mR()
[modifier | modifier le wikicode]- Imprimer la matrice à l'écran.
Le code
[modifier | modifier le wikicode]- À ajouter dans le fichier de la librairie.
/* ------------------------------------ */
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
[modifier | modifier le wikicode]- 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"
|
La fonction c_a_A_mR()
[modifier | modifier le wikicode]- Copier un tableau dans une matrice.
Le code
[modifier | modifier le wikicode]- À ajouter dans le fichier de la librairie.
/* ------------------------------------ */
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
[modifier | modifier le wikicode]- 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()
[modifier | modifier le wikicode]- Mettre à zéro la matrice.
Le code
[modifier | modifier le wikicode]- À ajouter dans le fichier de la librairie.
/* ------------------------------------ */
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
[modifier | modifier le wikicode]- 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;
}