Mathc complexes/Fichiers c : mul r r
Apparence
Installer et compiler ce fichier dans votre répertoire de travail.
mul.c |
|---|
/* ------------------------------------ */
/* Save as : mul.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **xmul_mZ(
double **A,
double **B,
double **AB
)
{
int i,n;
int j;
int k;
nb_Z a;
nb_Z b;
nb_Z ab;
nb_Z abplsab;
canImul_mZ(A,B,AB,"mul_mR();","(A or B or AB)");
/* Work on the rows k */
for(k= R1; k < A[R_SIZE][C0]; k++)
/* Work on the cols j */
for(j=C1; j<B[C_SIZE][C0]; j += C2)
{
abplsab = i_Z(0,0);
/* Compute AB(k,j) */
for(i=C1,n=R1; i<A[C_SIZE][C0]; i += C2,n++)
{
a = i_Z(A[k][i], /* Create the number a */
A[k][i+C1]);
b = i_Z(B[n][j], /* Create the number b */
B[n][j+C1]);
ab = mul_Z(a,b); /* Multiply a by b */
abplsab = add_Z(abplsab,ab); /* Add the products */
}
AB[k][j] = abplsab.r; /* Save the result into AB */
AB[k][j+C1] = abplsab.i;
}
return(AB);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r,int rc,int c)
{
double **A = r_mZ( i_mZ(r,rc),9);
double **B = r_mZ( i_mZ(rc,c),9);
double **AB = mul_mZ(A,B, i_mZ(r,c));
clrscrn();
printf(" A : ");
p_mZ(A, S5,P0, S4,P0,C6);
printf(" B : ");
p_mZ(B, S5,P0, S4,P0,C6);
printf(" AB : ");
p_mZ(AB, S5,P0, S4,P0,C6);
f_mZ(A);
f_mZ(B);
f_mZ(AB);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
fun(rp_I(R4),rp_I(RC4),rp_I(C4));
while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
J'ai utilisé rc pour le nombre de colonnes de A et le nombre de lignes de B car ces deux valeurs doivent être identiques. Elles correspondent pour A au nombre de colonnes et pour B au nombre de lignes. Je créé les nombres complexes a et b avec la fonction i_Z(); J'utilise la fonction mul_Z(); qui multiplie deux nombres complexes. J'utilise la fonction add_Z(); qui additionne tous les produits d'une ligne i multiplié par une colonne j.
Exemple de sortie écran :
A :
+8 +8i -7 -5i -5 +4i
-7 -7i -3 +4i -1 +6i
+2 -7i +2 -5i -5 +2i
B :
-5 +6i -7 +4i -5 +4i -7 +2i
-1 +4i -9 -1i -5 -7i +6 -9i
-9 -1i +4 +6i +8 +6i -7 +8i
AB :
-12 -46i -74 +14i -136 +68i -156 -75i
+79 -76i +68 +6i +62 +50i +40 +36i
+97 +47i -41 +78i -79 +40i -14 -49i
Press return to continue
Press X to stop