Accueil
Au hasard
Se connecter
Configuration
Faire un don
À propos de Wikiversité
Avertissements
Rechercher
« C pointeurs/Matrices complexes fractions » : différence entre les versions
Langue
Suivre
Modifier
Navigation interactive dans l’historique
← Modification précédente
Modification suivante →
Contenu supprimé
Contenu ajouté
Visuel
Wikicode
Version du 7 juillet 2013 à 16:24
modifier
Xhungab
(
discussion
|
contributions
)
Patrouilleurs
3 576
modifications
Aucun résumé des modifications
← Modification précédente
Version du 28 juillet 2013 à 07:55
modifier
annuler
Xhungab
(
discussion
|
contributions
)
Patrouilleurs
3 576
modifications
Page blanchie
Modification suivante →
Ligne 1 :
{{Chapitre
| niveau = 14
| idfaculté = informatique
| numéro = 16
| précédent = [[../Matrices fractions 3/]]
| suivant = [[../Matrices complexes fractions 2/]]
}}
== Introduction ==
Double pointeur de double.
* Pour nous ce sera un travail sur les matrices.
* Ce cours en deux parties va vous présenter la création et la destruction de matrices.
* Les valeurs sont des complexes dont les parties sont des fractions.
=== Le but ===
Cela vous permettra :
* Soit de construire votre propre méthode de création de matrices.
* Soit de construire votre propre librairie à partir de ces deux méthodes.
* Soit de commencer votre apprentissage de la méthode "mathc".
== Exemple d'utilisation de la librairie ==
=== Copie d'un tableau dans une matrice ===
* Pour récupérer la '''[https://drive.google.com/folderview?id=0B-KoQAOnU4FnTWt2MnRnV3Y3UUE&usp=sharing librairie]'''d'algèbre linéaire (f04a.zip).
* Indispensable pour tester les exemples de cette page.
<source lang="c">
/* ------------------------------------ */
/* Save as : c01.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
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,5,0,4);
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
* Présentation des fonctions :
{| class="wikitable"
|-
| double **A = i_mF(R2,C3); || Initialiser une matrice avec des fractions
* Deux lignes (Rows)
* Trois colonnes (Columns)
|-
| c_a_A_mF(a,A); || Copier le tableau "a" dans la matrice "A"
|-
| p_mF(A,N,F,C); || Imprimer la matrice "A"
* N espaces entre les nombres.
* F espaces entre les numérateurs et les dénominateurs.
* C colonnes par lignes.
|-
| f_mF(A); || Libérer l'espace alloué à la matrice "A"
|}
=== Additionner deux matrices ===
<source lang="c">
/* ------------------------------------ */
/* Save as : c02.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int r = rp_I(5);
int c = rp_I(5);
double **A = r_mF(i_mF(r,c),5,5);
double **B = r_mF(i_mF(r,c),5,5);
double **AplsB = i_mF(r,c);
printf(" A:");
p_mF(A,5,0,C4);
printf(" B:");
p_mF(B,5,0,C4);
printf(" AplsB:");
p_mF(add_mF(A,B,AplsB),7,3, C3);
getchar();
f_mF(A);
f_mF(B);
f_mF(AplsB);
return 0;
}
</source>
Résultat :
A:
+4/3 +3/5*I +3/4 +4/4*I +5/3 +1/3*I
+4/2 +4/2*I +2/1 +2/1*I +2/2 +3/3*I
+5/5 +5/5*I +5/1 +2/4*I +3/5 +5/5*I
+3/3 +3/4*I +1/1 +3/1*I +2/3 +3/5*I
+4/1 +1/2*I +2/5 +2/2*I +4/3 +1/5*I
.
B:
+3/4 +3/5*I +3/2 +5/3*I +5/4 +1/2*I
+1/4 +2/2*I +1/4 +4/1*I +5/4 +3/3*I
+5/4 +1/5*I +3/3 +4/5*I +2/2 +1/4*I
+5/2 +3/4*I +1/4 +2/1*I +2/4 +5/4*I
+4/3 +5/5*I +3/2 +3/4*I +2/3 +3/4*I
.
AplsB:
+25/ 12 +6/ 5*I +9/ 4 +8/ 3*I +35/ 12 +5/ 6*I
+9/ 4 +3/ 1*I +9/ 4 +6/ 1*I +9/ 4 +2/ 1*I
+9/ 4 +6/ 5*I +6/ 1 +13/ 10*I +8/ 5 +5/ 4*I
+7/ 2 +3/ 2*I +5/ 4 +5/ 1*I +7/ 6 +37/ 20*I
+16/ 3 +3/ 2*I +19/ 10 +7/ 4*I +2/ 1 +19/ 20*I
=== Multiplier deux matrices ===
<source lang="c">
/* ------------------------------------ */
/* Save as : c02.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int a = rp_I(4);
int b = rp_I(4);
int c = rp_I(4);
double **A = r_mF(i_mF(a,b),5,5);
double **B = r_mF(i_mF(b,c),5,5);
double **AB = i_mF(a,c);
printf(" A:");
p_mF(A,5,0,C4);
printf(" B:");
p_mF(B,5,0,C4);
printf(" AB:");
p_mF(mul_mF(A,B,AB),7,3, C3);
getchar();
f_mF(A);
f_mF(B);
f_mF(AB);
return 0;
}
</source>
Résultat :
A:
+1/4 +2/1*I +2/4 +3/4*I
+1/5 +1/4*I +3/3 +5/4*I
+2/2 +2/4*I +2/5 +5/5*I
+1/4 +3/4*I +3/4 +4/3*I
.
B:
+3/2 +3/4*I +5/2 +2/3*I +4/4 +1/3*I +1/3 +4/4*I
+1/5 +2/2*I +2/3 +1/4*I +1/1 +4/1*I +4/3 +3/3*I
.
AB:
-71/ 40 +307/ 80*I -9/ 16 +139/ 24*I -35/ 12 +29/ 6*I
-15/ 16 +71/ 40*I +11/ 16 +221/120*I -233/ 60 +167/ 30*I
+41/200 +21/ 10*I +131/ 60 +161/ 60*I -83/ 30 +103/ 30*I
-329/240 +559/240*I +7/ 24 +449/144*I -55/ 12 +31/ 6*I
.
-2/ 1 +29/ 12*I
-1/ 10 +59/ 20*I
-19/ 30 +29/ 10*I
-1/ 1 +109/ 36*I
Remarque :
* r_ pour rand.
* p_ pour print.
* i_ pour initialize.
* f_ pour free.
== La fonction f_mF(); ==
* Nous allons commencer par cette fonction.
* Elle libère l'espace alloué à la matrice par la fonction i_mF();
=== Code source ===
<source lang="c">
/* ------------------------------------ */
void f_mF(
double **A
)
{
if(A) free(A[0]);
free(A);
}
</source>
* Nous travaillons avec des double pointeurs (**A).
* Il y a deux pointeurs dans la fonction. (A,A[0])
* C'est un bon début.
* On commence par vérifier que "A" n'est pas NULL.
* Si tout va bien on libère "A[0]" le deuxième pointeur.
* Puis on libère A.
* Si "A" n'existe pas, on saute "A[0]", mais on libère "A".
* Peut-être aurait-il mieux valu écrire
<source lang="c">
/* ------------------------------------ */
void f_mF(
double **A
)
{
if(A){
free(A[0]);
free(A);
}
}
</source>
Ceci termine notre premier pas sur les double pointeurs.
{{Bas de page
| idfaculté = informatique
| précédent = [[../Matrices fractions 3/]]
| suivant = [[../Matrices complexes fractions 2/]]
}}