Dans cet exercice, on veut construire un programme modulaire permettant de manipuler des vecteurs de double. Un vecteur sera défini comme une structure contenant sa dimension (sa taille) et ses valeurs. On prendra soin de n’allouer que la mémoire strictement nécessaire à l’exécution du programme, et de correctement libérer la mémoire ainsi allouée. Les fonctions de manipulation de vecteurs seront écrites dans un premier module vecteur. Si vous le souhaitez, vous ajouterez le mot-clé const partout où vous le jugerez utile.
struct vecteur *vecteur_saisir(int);
void vecteur_afficher(struct vecteur *);
void vecteur_detruire(struct vecteur *);
Ecrivez un fichier d’en-tête qui déclare cette interface, et définissez les fonctions ainsi déclarées dans un fichier d’implémentation. On prendra soin de demander la dimension de vecteur souhaitée avant d’appeler vecteur_saisir() pour récupérer les différents coefficients.
void vecteur_multiplication_scalaire(struct vecteur *, double);
double vecteur_produit_scalaire(struct vecteur *, struct vecteur *);
double vecteur_norme_euclidienne(struct vecteur *);
Complétez le fichier d’en-tête en déclarant cette interface, et implémentez-la.
Dans cet exercice, on veut disposer d’un module matrice de manipulation de matrices de double. Une matrice sera définie comme une structure contenant sa hauteur, sa largeur et ses vecteurs lignes. Vous utiliserez dès que possible les fonctions définies dans le module de l’exercice précédent.