Calcolo dimensione matrice da file {HELP ME!}

di il
7 risposte

Calcolo dimensione matrice da file {HELP ME!}

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

7 Risposte

  • Re: Calcolo dimensione matrice da file {HELP ME!}

    Ciao, se sai che la matrice è quadrata allora ti basta fare un primo ciclo in cui conti le righe del file, quindi allochi la matrice e poi torni indietro a leggere i valori.

  • Re: Calcolo dimensione matrice da file {HELP ME!}

    Ah quindi tu dici di fare prima un ciclo while(!miofile.eof()) nel quale conto gli elementi poi inizializzo la matrice e poi rifaccio il ciclo while(!miofile.eof()) dove questa volta leggo i valori ?

    perchè le righe come faccio a contarle ? cioè posso saperle contando tutti gli elementi e poi facendo la radice quadrata.

  • Re: Calcolo dimensione matrice da file {HELP ME!}

    In C++ hai la funzione getline che legge una riga intera (trovi un esempio qui o con una veloce ricerca su Google). Poi per il conteggio ti basta tenere una variabile che incrementi ad ogni riga che trovi. Così non c'è bisogno di fare la radice quadrata ecc.

    P.S. Io sto supponendo che il file sia fatto così:
    
    1 2 3
    4 5 6
    7 8 9
    
    Se invece è fatto così
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    allora puoi contare tutte le righe come dicevo prima e poi fare la radice quadrata per sapere il numero di righe e colonne che dovrà avere la matrice.
  • Re: Calcolo dimensione matrice da file {HELP ME!}

    C....
    Hai ragioneeeeeeeeeeeeeeeeeeeeeeeeee


    mi ero completamente dimenticato dell'esistenza della getline.

    Grazie mille !!
  • Re: Calcolo dimensione matrice da file {HELP ME!}

    Mica siamo al bar ...
  • Re: Calcolo dimensione matrice da file {HELP ME!}

    oregon ha scritto:


    Mica siamo al bar ...
    Lo stile è morto!
  • Re: Calcolo dimensione matrice da file {HELP ME!}

    X VSR: ti chiedo di utilizzare un linguaggio più appropriato alla serietà di questo forum, grazie
Devi accedere o registrarti per scrivere nel forum
7 risposte