* Aucune valeur ne doit contenir de zéros terminaux (sauf la valeur `0`); par exemple la valeur `1.0` doit être écrite 1, la valeur `7.450` doit être écrite `7.45`, la valeur `0.000` doit être écrite `0`, etc. (cf. plus bas pour voir comment réaliser ceci en `C`).
Voici une illustration d'une matrice avec `row=5` et `col=4`.
Il faut d'abord allouer la zone mémoire des éléments et le tableau de pointeurs content,
puis faire pointer chaque pointeur de content au bon endroit dans la zone mémoire des éléments
(c'est-à-dire sur chaque élément de début de ligne, voir @fig:matrix).
A titre d’exemple, soit la matrice A ci-dessous
<!-- {#fig:matrix width=100%} -->
Écrire un programme de test `matrix_compute.c` utilisant vos fichiers de manipulation de matrices.
Les matrices avec lesquelles on effectuera les opérations doivent être stockées dans des fichiers
structurés en un format spécifique (voir plus bas). Le programme lit donc les matrices depuis des
fichiers et écrit le résultat de l'opération à l'écran dans le même format.
## Rapide introductions aux matrice
Une matrice est un **tableau de nombres** et a un nombre de lignes noté, $m$, et un nombre de colonne noté $n$. Pour simplifier, on dit que c'est une matrice $m\times n$. La matrice $\underline{\underline{A}}$ ci-dessous, a 3 lignes et
4 colonnes
\begin{equation}
\underline{\underline{A}} =
\begin{pmatrix}
2.2 & 1.3 & -1.2 & -2.2 \\
3.0 & 1.2 & 1.3 & 3.3 \\
1.0 & 4.0 & -1.3 & -1.0 \\
\end{pmatrix}.
\end{pmatrix},
\end{equation}
on dit que c'est une matrice $3\times 4$.
sera représentée par le contenu du fichier suivant
```
3 4
2.2 1.3 -1.2 -2.2
3 1.2 1.3 3.3
1 4 -1.3 -1
```
La fonction `printf` du langage `C` permet d’afficher des nombres de type double dans le format correct avec le formatteur `%g`.
Par exemple, pour afficher le double `x=9.230` dans le bon format (sans zéros terminaux), on écrira
Chaque élément d'une matrice peut être accédé par une paire d'indices, $i$, $j$ ($i$ étant le numéro de la ligne, $j$ le numéro de la colonne), et est noté par $A_{ij}$. Dans le cas
ci-dessus, l'élément $A_{14}=-2.2$.
```language-c
printf("%g", x);
```
Voici maintenant un exemple plus complet d’addition de matrices
Si on considère deux matrices, $\underline{\underline{A}}$, $\underline{\underline{B}}$ de tailes identiques, $m\times n$.
Ces matrices peuvent s'additionner et se soustraire élément par élément. Dans le cas de l'addition (la soustraction se fait de façon similaire), on a
Les éléments des matrices `A` et `B` doivent être stockés selon le format décrit auparavant dans des fichiers nommés par exemple `matA.dat` et `matB.dat`.
Voici le contenu du fichier `matA.dat` correspondant à la matrice `A` ci-dessus
```
3 4
2.2 1.3 -1.2 -2.2
3 1.2 1.3 3.3
1 4 -1.3 -1
```
Le calcul doit pouvoir être lancé avec la commande
```
./matrix_compute add matA.dat matB.dat
```
De façon similaire, on peut définir multiplication (ou l'addition) par un scalaire, $\alpha$
On peut procéder de façon similaire pour l'addition, où on multiplie tous les éléments de la matrice par $\alpha$.
et le résultat s'affiche à l'écran suivant le même format que décrit auparavant
Pour la multiplication de deux matrices, cela est un peu plus compliqué. Supposons que la matrice $\underline{\underline{A}}$ soit de taille $m\times l$, et la matrice $\underline{\underline{B}}$ de taille $l\times n$, la multiplication
et la matrice $\underline{\underline{C}}$ est de taille $m\times n$.
```
3 4
3.4 3.6 2 -3.4
5 1.4 3.6 6.3
2 7.2 0 -2
```
Finalement, on définit également la matrice *transposée* de la matrice $\underline{\underline{A}}$, notée $\underline{\underline{A}}^\mathrm{T}$, comme la matrice obtenue en
inversant tous les indices de $\underline{\underline{A}}$.
On a que $A^\mathrm{T}_{ij}=A_{ji}$. Si $\underline{\underline{A}}$ est une matrice $m\times n$, alors $\underline{\underline{A}}^\mathrm{T}$ est une matrice de taille $n\times m$.
Si le calcul est impossible, rien n'est affiché.
De même, on effectuera respectivement multiplication et transposition avec les commandes
Pour la matrice
\begin{equation}
\underline{\underline{A}} =
\begin{pmatrix}
2.2 & 1.3 & -1.2 & -2.2 \\
3.0 & 1.2 & 1.3 & 3.3 \\
1.0 & 4.0 & -1.3 & -1.0 \\
\end{pmatrix},
\end{equation}
la matrice transposée $\underline{\underline{A}}^\mathrm{T}$ sera
\begin{equation}
\underline{\underline{A}}^\mathrm{T} =
\begin{pmatrix}
2.2 & 3.0 & 1.0 \\
1.3 & 1.2 & 4.0 \\
-1.2 & 1.3 & -1.3 \\
-2.2 & 3.3 & -1.0
\end{pmatrix}.
\end{equation}
```
./matrix_compute mult matA.dat matB.dat
./matrix_compute transpose matA.dat
```
\ No newline at end of file
Finalement, pour que deux matrices soient égales, il faut que tous leurs éléments soient égaux et que leurs tailles soient les mêmes évidemment.