« C pointeurs/Double pointeur de double 3 » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Page blanchie
Ligne 1 :
{{Chapitre
| niveau = 14
| idfaculté = informatique
| numéro = 7
| précédent = [[../Double pointeur de double 2/]]
| suivant = [[../Tableau de double pointeur/]]
}}
 
== Introduction (troisième partie) ==
 
 
=== Le but ===
 
* 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_mR() pour imprime à l'écran.
 
 
* fp_mR() 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_mR(a,A);
 
 
* La fonction pour mettre à zéro la matrice.
** m_0_mR();
 
 
=== Pour aller plus loin ===
 
* Dans la '''[https://drive.google.com/folderview?id=0B-KoQAOnU4FnWFJJUnNkN3h1bFU&usp=sharing librairie]''', voir fichier '''vbm.h''', vous pourrez récupéré les fonctions :
* add_mR(), sub_mR(), mul_mR(), smul_mR(), pow_mR() ... pour vous faire la main.
 
 
 
 
== La fonction fp_mR() ==
 
* 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/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
/* 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);
}
</source>
 
=== Appel de la fonction ===
 
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double **A = i_mR(R2,C3);
double **B = i_mR(R3,C2);
double **C = i_mR(R3,C9);
 
 
fp_mR(A,"Matrix A :\n", 0,3,C6); /* Trois chiffres après la virgule */
fp_mR(B,"Matrix B :\n",10,2,C6); /* Tab 10 */
fp_mR(C,"Matrix C :\n", 0,2,C4); /* Quatre colonnes par ligne */
 
f_mR(A);
f_mR(B);
f_mR(C);
 
printf(" Open the file aamatrix.txt. \n\n Press return to continue ");
 
getchar();
 
return 0;
}
</source>
 
Dans le fichier :
 
Matrix A :
.
+0.000 +0.000 +0.000
+0.000 +0.000 +0.000
.
Matrix B :
.
+0.00 +0.00
+0.00 +0.00
+0.00 +0.00
.
Matrix C :
.
+0.00 +0.00 +0.00 +0.00
+0.00 +0.00 +0.00 +0.00
+0.00 +0.00 +0.00 +0.00
.
+0.00 +0.00 +0.00 +0.00
+0.00 +0.00 +0.00 +0.00
+0.00 +0.00 +0.00 +0.00
.
+0.00
+0.00
+0.00
 
 
 
{| class="wikitable"
|-
| fp_mR(A,"MatrixName",T,V,C); || Imprimer la matrice "A"
* T espaces entre les nombres
* V chiffres après la virgule.
* C colonnes par lignes.
|-
|}
 
 
== La fonction p_mR() ==
 
* Imprimer la matrice à l'écran.
 
=== Le code ===
 
* A ajouter dans le fichier de la [[C pointeurs/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
double **p_mR(
double **A,
int er,
int dr,
int n
)
{
int r;
int c;
int n_c = FIRST;
int n_c_LAST;
int n_c_FIRST;
 
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++)
{
printf("\n");
for (c=n_c_FIRST; c<n_c_LAST; c++)
printf("%+*.*f ",er,dr,A[r][c]);
}
printf("\n");
}
printf("\n");
 
return(A);
}
</source>
 
 
=== Appel de la fonction ===
 
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
int main(void)
{
double **A = i_mR(R2,C3);
 
p_mR(A,0,0,C6);
 
f_mR(A);
 
printf(" Press return to continue ");
 
getchar();
 
return 0;
}
</source>
 
 
{| class="wikitable"
|-
| 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.
|-
|}
 
== La fonction c_a_A_mR() ==
 
* Copier un tableau dans une matrice.
 
=== Le code ===
 
* A ajouter dans le fichier de la [[C pointeurs/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
double **c_a_A_mR(
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/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
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);
 
/* p_mR(A,0,0,C6); */
 
f_mR(A);
 
printf(" Press return to continue ");
 
getchar();
 
return 0;
}
</source>
 
 
== La fonction m_0_mR() ==
 
* Mettre à zéro la matrice.
 
=== Le code ===
 
* A ajouter dans le fichier de la [[C pointeurs/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
double **m_0_mR(
double **Zer
)
{
int r;
int c;
 
for ( r=FIRST; r<Zer[R_SIZE][OF]; r++)
for ( c=FIRST; c<Zer[C_SIZE][OF]; c++)
 
Zer[r][c] = 0.;
return(Zer);
}
</source>
 
 
=== Appel de la fonction ===
 
* Remplace la fonction main() dans le fichier de la [[C pointeurs/Double_pointeur_de_double_2|librairie]].
 
<source lang="c">
/* ------------------------------------ */
int main(void)
{
double **A = m_0_mR(i_mR(R2,C3));
 
/* p_mR(A,0,0,C6); */
 
f_mR(A);
 
printf(" Press return to continue ");
 
getchar();
 
return 0;
}
</source>
 
 
 
== La fonction m_2_mR() ==
 
* En règle général mes fonctions sur les matrices retournent la matrice.
* Ce n'est pas une obligation.
* Elles peuvent soit retourner rien du tout ou un entier ou un double...
* double **A = m_0_mR(i_mR(2,3)); Est possible.
* double **A = m_2_mR(i_mR(2,3)); N'est plus possible. (voir code)
* m_2_mR() retourne rien (pas de return).
 
 
=== Le code ===
 
<source lang="c">
/* ------------------------------------ */
void m_2_mR(
double **Zer
)
{
int r;
int c;
 
for ( r=FIRST; r<Zer[R_SIZE][OF]; r++)
for ( c=FIRST; c<Zer[C_SIZE][OF]; c++)
 
Zer[r][c] = 2.;
}
</source>
 
 
=== Appel de la fonction ===
 
<source lang="c">
/* ------------------------------------ */
int main(void)
{
double **A = i_mR(R2,C3);
 
m_2_mR(A);
 
p_mR(A,0,0,C6);
 
f_mR(A);
 
printf(" Press return to continue ");
 
getchar();
 
return 0;
}
</source>
 
* A l'écran cela donne :
 
+2 +2 +2
+2 +2 +2
 
 
{{Bas de page
| idfaculté = informatique
| précédent = [[../Double pointeur de double 2/]]
| suivant = [[../Tableau de double pointeur/]]
}}