Lettura matrice da file e sua allocazione dinamica

di il
1 risposte

Lettura matrice da file e sua allocazione dinamica

Salve a tutti.
E' la prima volta che scrivo su questo sito ed è da poco che mi sto avvicinando al linguaggio C++. Pertanto, avrei necessità di un aiuto riguardo un argomento probabilmente banale. Dovrei creare un programma che legga da file una matrice (NON quadrata), la allochi dinamicamente in memoria e ne ordini poi le righe secondo l'ordine crescente delle rispettive somme ( ossia, sommo i vari elementi di ciascuna riga e li re-inserisco dal minore al maggiore, riordinando di conseguenza tutta la matrice).

Ho iniziato a scrivere il programma ma non capisco come inserire una matrice non quadrata e come allocarla dinamicamente. Help please!
Il mio codice è il seguente (ovviamente è solo una parte: non è ancora completo poichè mi risultano diversi errori che non so correggere e non so come andare avanti):

GRAZIE in anticipo a chiunque mi aiuterà!
 
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

#define r 20
#define c 20
#define maxcarnomefile 30
typedef char T_nome_file[maxcarnomefile];

/* ELENCO PROTOTIPI */
int lettura_matrice(char nf[], int* &mat, int &n);
void output_matrice(int *mat, int n);
void modificata_matrice(int *mat, int n);
int somma();


/* MAIN */

int main(int argc, char** argv) {
	
	T_nome_file nome_file;
	int *MAT; //puntatore a matrice
	int N, M; //ordine della matrice 
	cout<<"Inserisci il nome del file contenente la matrice: "<<endl;
	cin.getline(nome_file, maxcarnomefile-1, '\n');
	lettura_matrice(nome_file, MAT, N, M);
	output_matrice(MAT, N, M);
	
	cout<<"La matrice modificata secondo l'ordine crescente delle somme delle righe e': "<<endl;
	modificata_matrice(MAT, N);
	output_matrice(MAT, N);
	cout<<endl<<endl;
	system("pause");
	
}

/* DICHIARAZIONE FUNZIONI UTILIZZATE */

/*M: funzione di accesso alla matrice mat [r] [c]*/
int *elemento(int *mat, int r, int c, int n)
	{return mat+((r*n)+c);
	};
	
/*M: funzione di lettura della matrice da file*/
int lettura_matrice(char nf[], int* &mat, int &n)
	{int r,c,valore;
	char nf[50];
	fstream miofile;
	miofile.open(nf, ios::in);
	if(!miofile) return 1; // 1 indica una condizione di errore nell'apertura del file
	miofile >> n; 
	/*M: alloco dinamicamente la matrice in memoria*/
	mat = new int[n*m]; 
	for(int r=0; r<n; r++)
		for(int c=0; c<m; c++){
			miofile>>valore;
			*elemento(mat, r, c, n) = valore;
		}
	miofile.close(); //chiudo il file: non mi serve più dato che ho allocato i dati che mi servivano (ossia la matrice) in memoria
	return 0;
	}

/*M: funzione di output della matrice */
void output_matrice(int *mat, int n, int m)
	{int r,c;
	cout<<"\nMatrice di ordine N*M = "<<n<<" x "<<m;
	for(r=0; r<n; r++)
		{cout<<endl;
			for(c=0; c<m; c++)
				cout<< setw(4)<<*elemento(mat,r,c,n,m);
		}				
		
		
		
	}	
	
/*M: funzione di modifica della matrice secondo l'ordine previsto */
void modificata_matrice(int *mat, int n, int m)
	{for(r=0; r<n; r++)
		{int somma=0; 
		 for(c=0; c<m; c++){
		 	somma=somma+MAT[r][c];
		 }
		cout<<"La somma della riga "<<r<<" e' : "<<somma<<endl;	
		}
	/*M: adesso devo inserire le varie somme ottenute in un vettore che ha n elementi. Dopodichè, dovrò riordinare il vettore in ordine crescente. */
	int v[n]; //definisco un vettore di tipo int e di dimensione n per contenere le somme delle n righe
	/*Adesso riempio il vettore*/
	for(i=0; i<n; i++){
		v[i]=somma[r];
	}		
	}
	
 

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte