Ciao,da poco ho iniziato a studiare le operazioni sui file.
Ora devo leggere una matrice di interi da un file di testo e stamparla a video, quindi devo sommare i suoi valori e stampare a video anche questo risultato.
Con un array mi viene perfettamente.
codice:
#include "fileArray.h"
void leggiArrayFile( vett v, int &r )
{
int register i;
fstream file;
file.open( SORGENTE, ios::in );
if( !file )
{
cout<<"Il file non esiste!\n";
}
else{
r = 0;
while( !file.eof() )
{
file>> v[ r ];
r++;
}
}
for( i = 0; i < r; i++ )
{
cout<< v[ i ] << " ";
}
file.close();
}
void sommaArrayFile( vett v, int &r )
{
int register i;
int sArray = 0;
for( i = 0; i < r; i++ )
{
sArray += v[ i ];
}
cout<<"\nLa somma degli interi contenuto nel file e' di: " << sArray;
}
Nel caso della matrice invece,per far stampare i numeri devo utilizzare un metodo diverso e in ogni caso non me li stampa seguendo lo schema della matrice( righe e colonne ) ma uno sotto l'altro.
codice:
#include "FileMatrici.h"
void leggiMatriceFile( matrice m, int &r, int &c )
{
int register i, j;
fstream file;
file.open( SORGENTE, ios::in );
if( !file )
{
cout<<"Il file non esiste!\n";
}
else{
file>> r;
file>> c;
for( i = 0; i < r; i++ )
{
for( j = 0; j < c; j++ )
{
file>> m[ i ][ j ];
}
cout<< "\n";
}
}
for( i = 0; i < r; i++ )
{
for( j = 0; j < c; j++ )
{
cout<< m[ i ][ j ];
}
cout<<"\n";
}
file.close();
}
void sommaMatriceFile( matrice m, int &r, int &c )
{
int register i, j;
int sMatrice = 0;
for( i = 0; i < r; i++ )
{
for( j = 0; j < c; j++ )
{
sMatrice += m[ i ][ j ];
}
}
cout<<"\nLa somma degli interi della matrice contenuti nel file e\' di: " << sMatrice << "\n";
}
In pratica in questo modo il primo numero scritto all'interno del file viene considerato riempimento.
Il file in questo caso deve essere scritto così:
codice:
16
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
Dove 16 serve per far capire al ciclco che deve leggere 16 valori in totale.
Però io vorrei che il riempimento fosse calcolato,in base alla fine del file, così come viene fatto con l'array.
Cioè in questo modo:
codice:
r = 0;
c = 0;
while( !file.eof() )
{
file>> m[ r ][ c ];
r++;
c++;
}
In questo modo non bisogna aggiungere alcun numero alla matrice esistente nel file.
Come posso fare per integrare questo metodo senza che mi spari una serie di numeri enormi che non riguardano la matrice scritta nel file?
Grazie.