Salve a tutti,
Sto cercando di imparare il c++ e mi sono trovato di fronte il seguente problema:
Ho una matrice su un file .txt
So che la matrice contiene elementi INTERI ed è QUADRATA.
Voglio conoscere le dimensioni della matrice presente su file e poi caricare gli elementi dal file alla mat[dim][dim] per evitare spreco di memoria e visualizzazione di spazzatura alla stampa della matrice.
So che potrei farlo con l'allocazione dinamica ma preferirei capire anche come fare senza allocazione dinamica.
Io ho provato a farlo così ma il problema è che dichiarando mat[N][M] quando leggo il file giustamente mi mette tanta altra spazzatura nello spazio rimanente.
Vi posto il codice:
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <fstream>
#define N 20
#define M 20
using namespace std;
int main(){
fstream miofile;
int cont=0;
int dim;
int mat[N][M];
miofile.open("c:/Users/Luigi/Desktop/ESERCIZI PER ESAME DI FONDAMENTI/Esercizi a fine libro/FILE/CalcoloDimMatDaFile/a.txt",ios::in);
if(!miofile){
cout<<"Impossibile aprire il file.\n";
}
system("pause");
while(!miofile.eof()){
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
miofile>>mat[i][j];
cont++;
}
}
};
system("pause");
cout<<"La matrice e' composta da "<<cont<<" caratteri.\n"<<endl;
dim=sqrt(cont);
cout<<"La matrice e' di grandezza ("<<dim<<"x"<<dim<<")."<<endl;
system("pause");
system("pause");
cout<<"Stampa matrice acquisita.\n"<<endl;
for(int i=0; i<dim; i++){
for(int j=0; j<dim; j++){
if(mat[i][j]!=0)
cout<<mat[i][j]<<"\t";
}
cout<<"\n";
}
}
Grazie mille in anticipo