Matrice rare

Un fişier binar conţine mai multe matrice rare. Scrieţi un program implementat prin comandă

dispmat numef n1 n2 ...

care afişează matricele rare din fişierul numef, având numerele de ordine n1, n2, … Fiecare matrice rară este un articol în fişier, iar articolele au lungimi variabile. Pentru a putea accesa o matrice rară (cu un număr de ordine specificat) din fişier se poate defini o funcţie care face o poziţionare în dreptul acesteia. Pentru citirea matricelor în memorie, în vederea afişării lor, se va alocă dinamic memoria. Orice tablou auxiliar folosit va fi alocat/re-alocat dinamic în memorie.

Atenţie: nu se va citit întreg fişierul în memorie, ci se va folosi o variabilă de tip structura pentru citirea unei matrice. Dacă un număr de ordine este mai mare decât numărul de matrice din fişier (se va defini o funcţie care va întoare numărul de matrice din fişier) se va afişa mesajul: “Matrice inexistentă”.

Indicaţie: O matrice rară (cu multe elemente 0) este memorată în mod optim prin: dimensiunile ei (nl şi nc), numărul de elemente nenule (nn) şi un vector term care conţine nn termeni nenuli daţi prin poziţie (linie şi coloana) şi valoare. În acest scop se consideră definiţiile:

typedef struct {
    int lin, col;
    double val;
} termen;

typedef struct {
    int nl, nc, nn;
    termen *term;
} matrice_rara;

De exemplu, pentru matricea

    \[\left( \begin{array}{ccc}0 & 0 & 1 \\0.5 & 0 & 0\\\end{array} \right)\\]

o variabilă matrice_rara are valoarea: {2, 3, 2, {{1, 3, 1.0}, {2, 1, 0.5}}}.