Accueil
Au hasard
Se connecter
Configuration
Faire un don
À propos de Wikiversité
Avertissements
Rechercher
« C pointeurs/Double pointeur de double » : 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 à 21:15
modifier
Xhungab
(
discussion
|
contributions
)
Patrouilleurs
3 576
modifications
Aucun résumé des modifications
← Modification précédente
Version du 28 juillet 2013 à 07:50
modifier
annuler
Xhungab
(
discussion
|
contributions
)
Patrouilleurs
3 576
modifications
Page blanchie
Modification suivante →
Ligne 1 :
{{Chapitre
| niveau = 14
| idfaculté = informatique
| numéro = 5
| précédent = [[../Tableau de pointeurs de fonctions 2 /]]
| suivant = [[../ Double pointeur de double 2/]]
}}
== Introduction ==
=== Présentation ===
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 de la librairie "[[Mathc_Home_Edition_f01|Mathc]]".
=== 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-KoQAOnU4FnWFJJUnNkN3h1bFU&usp=sharing librairie]'''d'algèbre linéaire (n_1aa.zip).
* Indispensable pour tester les exemples de cette page.
* Le deuxième fichier n_1ab.zip sera pour l'étude des tableaux de matrices.
<source lang="c">
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
double a[R2*C3]={ 1,2,3,
4,5,6};
double **A = i_mR(R2,C3);
c_a_A_mR(a,A);
printf(" a[r*c] -> A : \n\n");
p_mR(A,0,0,C6);
f_mR(A);
getchar();
return 0;
}
</source>
Présentation des fonctions :
{| class="wikitable"
|-
| double**A=i_mR(R2,C3); || Initialiser une matrice réelle
* Deux lignes (rows)
* Trois colonnes (columns)
|-
| c_a_A_mR(a,A); || Copier le tableau "a" dans la matrice "A"
|-
| p_mR(A,T,V,C); || Imprimer la matrice "A"
* T espaces entre les nombres
* V chiffres après la virgule.
* C colonnes par lignes.
|-
| f_mR(A); || Libérer l'espace alloué à la matrice "A"
|}
=== Additionner deux matrices ===
<source lang="c">
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int r = rp_I(5);
int c = rp_I(5);
double **A = r_mR(i_mR(r,c),9);
double **B = r_mR(i_mR(r,c),9);
double **AplsB = i_mR(r,c);
printf(" A : ");
p_mR(A,3,0,C6);
printf(" B : ");
p_mR(B,3,0,C6);
printf(" AplsB : ");
p_mR(add_mR(A,B,AplsB),3,0,C6);
f_mR(A);
f_mR(B);
f_mR(AplsB);
getchar();
return 0;
}
</source>
Résultat :
A :
+8 +6 -5 +4
+2 +2 -5 -1
-9 +2 +8 -7
+4 +4 -7 -9
-7 +2 +6 +2
.
B :
+4 +8 -5 +8
+8 -7 +2 +4
+4 +6 -9 -1
+2 +2 +4 -3
-3 -9 -1 -9
.
AplsB :
+12 +14 -10 +12
+10 -5 -3 +3
-5 +8 -1 -8
+6 +6 -3 -12
-10 -7 +5 -7
=== Mutiplier deux matrices ===
<source lang="c">
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int a = rp_I(5);
int b = rp_I(5);
int c = rp_I(5);
double **A = r_mR(i_mR(a,c),9);
double **B = r_mR(i_mR(c,b),9);
double **AB = i_mR(a,b);
printf(" A : ");
p_mR(A,3,0,C6);
printf(" B : ");
p_mR(B,3,0,C6);
printf(" AB : ");
p_mR(mul_mR(A,B,AB),3,0,C6);
f_mR(A);
f_mR(B);
f_mR(AB);
getchar();
return 0;
}
</source>
Résultat :
A :
-7 -1 -1
-3 +2 -1
+8 -3 -5
-9 -5 -3
+2 +6 -3
.
B :
-3 +8 -5 -3
+2 +8 +4 -9
+6 +8 -7 +8
.
AB :
+13 -72 +38 +22
+7 -16 +30 -17
-60 +0 -17 -37
-1 -136 +46 +48
-12 +40 +35 -84
=== Inverser une matrice ===
<source lang="c">
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
int r = rp_I(5)+1;
double **A = r_mR(i_mR(r,r),9);
double **invA = r_mR(i_mR(r,r),9);
double **AinvA = i_mR(r,r);
printf(" A : ");
p_mR(A,3,0,C6);
printf(" invA : ");
p_mR(inv_mR(A,invA),6,3,C6);
printf(" A *& invA : ");
p_mR(mul_mR(A,invA,AinvA),6,3,C6);
f_mR(A);
f_mR(invA);
f_mR(AinvA);
getchar();
return 0;
}
</source>
Résultat :
A
-1 +2 +2 -3 -5 +6
-1 -5 -9 -3 +2 -3
-5 -7 +4 -3 -3 -7
+4 +8 +6 -3 -7 +6
-3 +2 +6 -1 -3 +6
-5 -1 -5 +4 -3 -7
.
invA :
+0.382 -0.241 +0.023 -0.125 -0.448 -0.082
-0.598 +0.310 -0.063 +0.305 +0.470 +0.083
-0.055 -0.057 +0.046 +0.006 +0.031 -0.037
+0.441 -0.339 -0.029 -0.254 -0.363 +0.023
-0.448 +0.213 -0.041 +0.117 +0.354 -0.031
+0.296 -0.116 -0.039 -0.154 -0.129 -0.043
.
A *& invA :
+1.000 -0.000 +0.000 -0.000 -0.000 -0.000
+0.000 +1.000 -0.000 +0.000 +0.000 +0.000
-0.000 +0.000 +1.000 +0.000 +0.000 -0.000
+0.000 -0.000 +0.000 +1.000 -0.000 -0.000
+0.000 -0.000 +0.000 +0.000 +1.000 -0.000
-0.000 +0.000 -0.000 +0.000 +0.000 +1.000
Remarque :
* r_ pour rand.
* p_ pour print.
* i_ pour initialize.
* f_ pour free.
* mR pour Real matrix
== La fonction f_mR(); ==
* Nous allons commencer par cette fonction.
* Elle libère l'espace alloué à la matrice par la fonction i_mR();
=== Code source ===
<source lang="c">
/* ------------------------------------ */
void f_mR(
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_mR(
double **A
)
{
if(A){
free(A[0]);
free(A);
}
}
</source>
* Ces [[Mathc_Home_Edition_t01/Matrices|vidéos]] terminent notre premier pas sur les double pointeurs.
{{Bas de page
| idfaculté = informatique
| précédent = [[../Tableau de pointeurs de fonctions 2/]]
| suivant = [[../ Double pointeur de double 2/]]
}}