Całkowanie numeryczne funkcji obiektowo

0

Witam,
Jako że dopiero liznąłem C++ i nie czuję się w nim najlepiej, mam do Was pytanie o mój program

#include<iostream>
#include<cstdlib>
#include<math.h>

using namespace std; 

class calka
{
	protected:
		double pocz, kon, a, b, c, d, e, f;
		int dok;
	public:
		calka();
		calka(double p, double k, int n)
		{
			pocz=p;
			kon=k;
			dok=n;
		}
		void wprowadz();
		void prostokat();
		void trapez();
		void simpson();
	private:
		double fun(double x)
		{
			return a*pow(x,5) + b*pow(x,4) + c*pow(x,3) + d*pow(x,2) + e*x +f ;
		}
};
calka::calka()
{
	pocz=kon=dok=0;
}
void calka::wprowadz()
{
	cout << "Ax^5 + Bx^4 + Cx^3 + Dx^2 + Ex + F"<<endl;
	cout << "Podaj parametr a = "; cin >> a;
	cout << "Podaj parametr b = "; cin >> b;
	cout << "Podaj parametr c = "; cin >> c;
	cout << "Podaj parametr d = "; cin >> d;
	cout << "Podaj parametr e = "; cin >> e;
	cout << "Podaj wyraz wolny= "; cin >> f;
	cout << "Podaj początek = "; cin >> pocz;
	cout << "Podaj koniec = "; cin >> kon;
	cout << "Podaj dokladnosc = "; cin >> dok;
	
}
void calka::prostokat()
{
	double dx, calka;
	int i;
	dx=(kon-pocz)/dok;
	calka =0;
	for(i=1; i<=dok; i++)
	{
		calka+=fun(pocz+i*dx);
	}
	calka*=dx;
	cout<<"Wartosc calki metoda prostakatow wynosi: "<<calka<<endl;
}
void calka::trapez()
{
	double dx, calka;
	int i;
	dx=(kon-pocz)/dok;
	calka =0;
	for(i=1; i<=dok; i++)
	{
		calka+=fun(pocz+i*dx);
	}
	calka+=(fun(pocz)+fun(kon))/2;
	calka*=dx;
	cout<<"Wartosc calki metoda trapezow wynosi: "<<calka<<endl;
	
}
class calka_wyk: public calka
{
	public:
	void wprowadz();
	double fun(double x)
	{
		return pow(a, x);
	}
	
};
void calka_wyk::wprowadz()
{
	cout << "A^x"<<endl;
	cout << "Podaj parametr a = "; cin >> a;
	cout << "Podaj początek = "; cin >> pocz;
	cout << "Podaj koniec = "; cin >> kon;
	cout << "Podaj dokladnosc = "; cin >> dok;
}
int main()
{
	calka c1;	
	c1.wprowadz();	
	c1.prostokat();
	c1.trapez();
	calka_wyk w1;
	w1.wprowadz();
	w1.prostokat();
	w1.trapez();
	
	cout << endl;
	return 0;
}

Problem jest taki, że po wywołaniu metody prostokat dla obiektu w1, metoda ta korzysta z funkcji fun z klasy bazowej,

double fun(double x)
		{
			return a*pow(x,5) + b*pow(x,4) + c*pow(x,3) + d*pow(x,2) + e*x +f ;
		}

a ja bym chciał aby skorzystała z funkcji fun z klasy pochodnej

double fun(double x)
	{
		return pow(a, x);
	}

poprawienie tytułu wątku + lekkie sformatowanie posta - fp

1
virtual double fun(double x) // przy bazowej koniecznie, przy pochodnej wypada
0

Dzięki,
Muszę się douczyć meod wirtualnych(i innych rzeczy też) bo nasz kurs C++ tego nie obejmował.

0

Jak oceniaice ten mój "projekt". Dodałem jeszcze całkowanie metodą simpsona, motodę monte carlo,i funkcje logarytmiczne. Co mogę jeszcze dodać, ulepszyć aby program był bardziej "obiektowy" i poprawny programistycznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1