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:
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);
}
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.
Vi ringrazio per l'attenzione.
LeonardoG