Archivi sequenziali in C++. Esercizio “Memorizzare matrici”.

Scrivere un programma in C++ che permetta di scrivere una sequenza di matrici in un file di testo. All’avvio il programma deve chiedere all’utente di aggiungere nel file una nuova matrice, dando la possibilità di annullare l’inserimento mediante uno zero. Successivamente deve visualizzare tutte le matrici memorizzate nel file. Le matrici memorizzate nel file possono avere una dimensione a piacere e le dimensioni possono essere fra loro diverse.

La figura di sotto mostra un esempio di output che il programma dovrà produrre a video in corrispondenza dell’inserimento di una matrice di dimensioni 2×4, quando una matrice 2×3 è già presente nel file, in quanto già caricata nel corso di un’esecuzione precedente.

memorizza-matrici

(Soluzione proposta)

La figura seguente mostra il file di testo dell’archivio prodotto in corrispondenza dell’esecuzione dell’esempio di sopra. Essa mostra il file aperto con un editor di testi ed evidenzia in giallo gli elementi di ogni riga che rappresentano le dimensioni delle matrici in esso memorizzate.

memorizza-matrici2

La soluzione proposta, infatti, si basa su un’organizzazione dei dati che prevede che nel file:

  1. ciascuna riga del file rappresenta una matrice;
  2. (poiché le matrici possono avere dimensioni diverse) la dimensione di ciascuna matrice viene memorizzata nel file all’inizio di ogni riga, nei primi due elementi: il primo rappresenta il numero di righe, il secondo invece il numero di colonne.
  3. gli elementi successivi di una riga rappresentano in sequenza le righe della matrice, dalla prima fino all’ultima.

Il problema può essere scomposto nei seguenti sotto-problemi:

memorizzamatrici3

e il programma può essere cosi organizzato:

L’aggiunta di una nuova matrice nel file di testo avviene tramite la chiamata alla funzione inserisciMatrice():

La visualizzazione delle matrici memorizzate nel file di testo, avviene tramite la chiamata alla funzione visualizzaMartici():

La seguente funzione, infine, calcola il numero di matrici memorizzate nel file per dare gli opportuni output a video circa il numero di matrici presenti nel file.