Hej. Chciałam zapytać, czy dobrze zdefiniowałam konwersje typu Wektor na Macierz:
class Wektor
{
private:
unsigned int _n;
float * _W;
public:
Wektor(unsigned int n);
~Wektor();
void Wczytaj();
void Wypisz();
unsigned int Dl();
};
class Wektor;
class Macierz
{
private:
unsigned int _m;
unsigned int _n;
float ** _A;
public:
static unsigned int ileMacierzy;
Macierz(unsigned int n, unsigned int m);
//~Macierz();
Macierz Transponuj();
Macierz(Wektor & W);
Macierz MnozRazySkalar(float skalar);
Macierz operator+(const Macierz & M1);
Macierz operator-(const Macierz & M1);
Macierz operator=(const Macierz & M1);
Macierz operator*(const Macierz & M2);
Macierz(const Macierz& M);
void Wczytaj();
void Wypisz();
Macierz ZmienZnak();
bool JestSymetryczna();
float NormaMaksimum();
float NormaFrobeniusa();
};
Macierz::Macierz(Wektor & W)
{
_n=W.Dl();
_m=1;
}
Program kompiluje się bez błędów, ale gdy dochodzi do pomnożenia macierzy przez wektor wszystko się zawiesza i pojawia się komunikat, że wystąpił problem z aplikacją i zostanie ona zamknięta. Nie wiem czym jest to spowodowane. Może ta konwersja nie jest taka jak powinna być?
void WymnozMacierzePrzezWektor(Macierz &M1, Macierz &M2)
{
int n;
cout << " Podaj liczba elementow wektora: ";
cin >> n;
Wektor W(n);
W.Wczytaj();
cout << endl;
cout << "Wektor: " << endl;
W.Wypisz();
cout << endl;
char wybor;
cout << endl;
cout << "Wymnoz przez wektor macierze: ( 1->M1 / 2->M2 / 3->obie): ";
cin >> wybor;
switch (wybor)
{
case '1':
M1 = M1*W;
break;
case '2':
M2 = M2*W;
break;
case '3':
M1 = M1*W;
M2 = M2*W;
break;
default:
cout << endl;
return;
}
cout << endl;
return;
}
Macierz Macierz::operator*(const Macierz & M2)
{
Macierz C(this->_m, M2._n);
if (this->_n != M2._m)
{
cout << "Blad: nie mozna wymnozyc obu macierzy - konflikt rozmarow: " << this->_m <<"x"<< this->_n <<" vs "<< M2._m <<"x" << M2._n << endl;
exit(1);
}
float suma;
for(unsigned int i = 0 ; i < _m ; i++)
{
for(unsigned int j = 0; j < M2._n; j++)
{
suma = 0;
for (unsigned k = 0; k < _n; k++)
suma += _A[i][k] * M2._A[k][j];
C._A[i][j] = suma;
}
}
cout << "Iloczyn macierzy M1 i M2 wynosi: " << endl;
cout << endl;
C.Wypisz();
return C;
}