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];
}
}