Mam problem natury technicznej czyli nie przeciazyć operatora dodawania i dodac go do ciała klasy za pomocą listy inicjalizacyjnej. Nie mam na to pomysłu. Kody:
main
#include "wyznacznik.h"
using namespace std;
int main()
{
wyznacznik wyznacz;
return 0;
}
wyznacznik.h
#ifndef WYZNACZNIK_H
#define WYZNACZNIK_H
#include <stdlib.h>
#include <iostream>
#include <gmpxx.h>
#include <time.h>
#include <math.h>
#include "macierz.h"
using namespace std;
class wyznacznik
{
public:
long long int i,j,k,N,m,p;
float** tab;
wyznacznik();
virtual ~wyznacznik();
protected:
private:
};
#endif // WYZNACZNIK_H
macierz.h
#ifndef MACIERZ_H
#define MACIERZ_H
#include <iostream>
#include "macierz.h"
#include "wyznacznik.h"
using namespace std;
class Macierz
{
public:
Macierz();
friend Macierz operator+(Macierz x, Macierz y);
friend ostream & operator<<(Macierz x, ostream y);
float** tab;
int N;
~Macierz();
};
#endif
wyznacznik.cpp
#include "wyznacznik.h"
#include "macierz.h"
wyznacznik::wyznacznik()
{
cout<<"podaj rozmiar macierzy. Wazne jest abys program zakonczyl enterem. Inaczej dekonstruktor nie zostanie wywolany ";
cin>>N;
time_t t;
srand((unsigned) time(&t));
tab=new float *[N];
cout<<"zawartosc macierzy"<<endl<<endl;
for(i=0;i<N;i++) tab[i]=new float[N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
tab[i][j]=rand()%100;
cout<<tab[i][j]<<" ";
if(j==N-1)cout<<endl;
}
Macierz macierz;
// tworzenie macierzy trojkatnej
for (k=0; k<N-1; k++)
{
for (i=k+1; i<N; i++)
for (j=N-1; j>=k; j--)
tab[i][j] = tab[i][j] - tab[i][k]*tab[k][j]/tab[k][k];
}
if (N<=3) {
long long det = 1.0;
//tu wyliczamy wyznacznik po przekątnej
for (i=0; i<N; i++) det = det * tab[i][i];
cout<<endl<<"wyznacznik wynosi "<<det<<endl;
cout<<"aby zakonczyc nacisnij dowolny klawisz ";
}
else if (N>=4 and N<=100){
mpz_class det = 1.0;
for (i=0; i<N; i++) det = det * tab[i][i];
cout<<endl<<"wyznacznik wynosi "<<det<<endl;
cout<<"aby zakonczyc nacisnij dowolny klawisz ";}
else if (N>100){
mpq_class det = 1.0;
for (i=0; i<N; i++) det = det * tab[i][i];
cout<<endl<<"wyznacznik wynosi "<<det<<endl;
}
cin.sync();
cin.get();
}
Macierz::Macierz(){
float x,y;
tab=new float *[N];
cout<<"podaj pierwsza wspolrzedna ktora ma zostac dodana z osi x"<<endl;
cin>>x;
cout<<"podaj druga wspolrzedna ktora ma zostac dodana z osi y"<<endl;
cin>>y;
//nie wiem co tutaj wpisac
}
wyznacznik::~wyznacznik()
{
for (int i = 0; i < N; i++) delete [] tab[i];
delete tab;
}
Macierz::~Macierz(){
}
Wciąż się uczę i przepraszam za ewentualne błędy. Pozddrawiam