Matrices Creuses

Une Matrice creuse est une Matrice comprenant peu d'élements significatifs, par exemple :
1
0
0
0
0
0
0
0
0
0
0
0
0
0
-2
0
0
0
0
0
0
0
0
0
0
0
0
0
3
0
0
-4
0
0
0
0
0
0
0
0
0
0

Pour coder de telles matrices, on se propose, pour gagner de l'espace mémoire, d'utiliser un codage ligne de ciel, beaucoup moins volumineux pour de grandes matrices creuses:
 

Le codage ligne de ciel utilise trois tableaux:

On utilisera donc le codage suivant:
struct Matrice{int nb_lignes;
                int nb_colonnes;
                int Mat[50];
                int S[51];
                int L[50]}
Remarque : Le choix de 50 comme taille des tableaux est tout a fait arbitraire. Si la matrice
            de taille 50 lignes par 50 colonnes était pleine, l'espace mémoire nécessaire serait de 50 x 50 = 2500 !
            Il faut donc penser à vérifier que l'on ne saisit pas plus de valeurs que de place disponible !
0 - Saisie d'une matrice

Ecrire une fonction de saisie de matrice retournant un pointeur sur une structure de type Matrice.

Vous êtes libre pour cela d'utiliser l'interface que vous voudrez ( entrée ligne par ligne, colonne par colonne?.),
en pensant cependant à choisir un type de saisie adapté au codage ligne de ciel). Spécifiez explicitement à l'utilisateur la façon dont il devra entrer sa matrice.
La fonction aura le prototype suivant :   Struct Matrice * Saisir_matrice()

I - Affichage de la matrice

Ecrire une fonction d'affichage de la matrice prenant en paramètre un pointeur sur une structure de type matrice, la matrice devra être affichée sous forme matricielle explicite :
 

1
0
0
0
0
0
0
0
0
0
0
0
0
0
-2
0
0
0
0
0
0
0
0
0
0
0
0
0
3
0
0
-4
0
0
0
0
0
0
0
0
0
0
Le prototype de la fonction sera le suivant :    void print_matrice(struct matrice *matrice1)
 

II - Addition de deux matrices

Ecrire une fonction d'addition de deux matrices retournant une matrice en résultat, la matrice retournée devra utiliser le codage ligne de ciel:
 

Le prototype de la fonction sera le suivant :

struct matrice add_matrice(struct matrice *matrice1, struct matrice *matrice2)

III - Création du menu

Utiliser le programme crée pour le TP2(gestion de menu) pour présenter un interface permettant :
 

  1. de saisir une matrice A
  2. de saisir une matrice B
  3. d'imprimer la matrice A
  4. d'imprimer la matrice B
  5. d'additioner les matrices A et B en affichant le résultat


Vous pourrez ne donner l'accès aux choix que ceux ci sont possibles (par exemple, imprimer une matrice alors que celle ci n'est pas saisie n'est pas possible)

IV - FACULTATIF : Multiplication de deux matrices

Ecrire une fonction de multiplication de deux matrices utilisant le codage ligne de ciel :

struct matrice mult_matrice(struct matrice *matrice1, struct matrice *matrice2)