Buongiorno,
sto avendo alcuni problemi con un programma utile alle operazioni sulle matrici. Nello specifico ho creato la classe Matrice e le diverse funzioni (prodotto righe per colonne, matrice trasposta etc). Queste funzioni returnano ognuna un oggetto di tipo Matrice, tuttavia non riesco in nessun modo a riutilizzare i nuovi oggetti che le funzioni creano e quindi a fare ulteriori operazioni (per esempio una trasposta di una trasposta). Il problema potrebbe essere nella distruzione inaspettata degli oggetti che vengono creati oppure in errori nell'implementazione del costruttore di copia o dell'overload dell'operatore =. Posto alcune parti di codice.
codice:
Il programma così scritto funziona, riesco a inserire le matrici n ed m e fare su di esse le operazioni. Il problema è svolgere operazioni su matrici che sono risultati delle funzioni sia Prodotto che Trasposta.codice://ClassMatrix.h #ifndef CLASSMATRIX_H #define CLASSMATRIX_H #include <iostream> #include <cmath> using namespace std; class Matrice { public: //int a; float** matrice; Matrice(int a); ~Matrice(); Matrice (Matrice& m); Matrice operator= (const Matrice n); void Stampa(int a); friend ostream& operator<< (ostream& os, Matrice& m); friend istream& operator>> (istream& is, Matrice& m); }; // ClassMatrix.cpp #include "ClassMatrix.h" #include <iostream> #include <cmath> using namespace std; Matrice::Matrice (int a) // costruttore { matrice = new float* [a]; for (int i=0; i<a; i++) { matrice[i]= new float [a]; for (int j=0; j<a; j++) matrice [i][j] = 0; { } } cout << "Ho costruito una matrice nulla di dimensioni " << a <<" x "<< a << endl; }; Matrice::~Matrice() { cout << "Oggetto eliminato" << endl; }; Matrice::Matrice(Matrice& m) //costruttore di copia { matrice=m.matrice; }; Matrice Matrice::operator=(const Matrice n) { matrice=n.matrice; return *this; }; ostream& operator<< (ostream& os, Matrice& m) { int a; for (int i=0; i<a; i++) { for (int j=0; j<a; j++) { cout << " "; os << m.matrice[i][j]; } cout << endl; } return os; } istream& operator>> (istream& is, Matrice& m) { int a,i,j; cout << "Inserire i vettori riga separando ogni componente con uno SPAZIO: \n"; for (i=0; i<a; i++) { cout << "Vettore riga " << i << " : "; for (j=0; j<a; j++) { is >> m.matrice[i][j]; } } return is; }; Matrice Trasposta (int a, Matrice m) { Matrice n(m); for (int i=0; i<a; i++) { for (int j=0; j<a; j++) { n.matrice[i][j]=m.matrice[j][i]; } } return n; }; Matrice Prodotto(int a, Matrice m, Matrice n ) { Matrice p(a); for (int I=0;I<a;I++) { for (int J=0;J<a;J++) { for (int h=0; h<a; h++) { p.matrice[I][J]=p.matrice[I][J] + m.matrice[I][h]*n.matrice[h][J]; } } } return p; }; int main () { cout << "Operazioni su matrici " << endl; int r; do { cout << "Le dimensioni della matrice sono: " << endl; cin >> r; } while (r<=0); Matrice m(r); //cout << m << endl; cin >> m; cout << m << endl; Matrice n(r); cin >> n; cout << n << endl; Trasposta(r,m); Prodotto(r,m,n); }
Vi ringrazio per l'attenzione.
LeonardoG

Rispondi quotando
