Справка по шаблону C ++, использование шаблона для интеграции - PullRequest
0 голосов
/ 27 сентября 2011

Привет! Я слежу за учебным пособием и видео, которые я нашел в Интернете. Я пытаюсь создать шаблон для предварительной числовой интеграции функции, где пользователь может решить, какую форму интеграции выполнять, я пытаюсь сохранить его в одном файле.так как не использовать заголовки и не использовать огромное количество циклов, код для первой интеграции прекрасно работает сам по себе, но когда я запускаю его через шаблон, я получаю неправильный ответ и то же значение 1.9147e-307 для каждого ввода, что яя делаю не так?

#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include<conio.h>

using namespace std;

//declared function
double F(double X)
{
   double f;

   f = (X*X);
   return f;
};

double unifRand()
{
    return rand() / double(RAND_MAX);
};

template<typename T> class INTG{
    private:
        T a;
        T b;
        T n;
    public:
        INTG(T a, T b,T n){
            INTG::a = a;
            INTG::b = b;
        }

        ~INTG(){}

        T MC() {
            // some code

            return ans;}

        T SIMPC(){ // Simpson integration code here
            return a+b+n;
        }
};

int main() {
    double a,b,mc,simp,ans;
    int OP,n;
    cout<<"Enter 1 for Monte Carlo Integration , Enter 2 for Composite Simpson Integration, enter 3 for trapezoidal int...."<<endl;
    cin>>OP;
    clock_t start = clock();


    if (OP == 1) {
        cout<<"Enter lower limit of integration"<<endl;
        cin>>a;
        cout<<"Enter upper limit of integration"<<endl;
        cin>>b;
        cout<<"Enter number of iterations"<<endl;
        cin>>n;
        ans = INTG<double>::MC(a, b, n);
        INTG<double> MyCalc(a,b,n);

        cout<< ans <<endl;

        //mc =  INTG::MC(a, b, n);
        getch();
    }
}

Ответы [ 2 ]

5 голосов
/ 27 сентября 2011

ans никогда не присваивается значение. Это будет учитывать ваш 1.9147e-307.

Вы намеревались

ans = MyCalc.MC();

до cout?

Также

INTG(T a, T b,T n){
    INTG::a = a;
    INTG::b = b;
}

Лучше описывается как

INTG(T a, T b, T n):a(a),b(b),n(n) {}

Инициализация вместо присвоения и запоминания n.

Таким образом, последовательность вычислений будет

INTG<double> MyCalc(a,b,n);
ans = MyCalc.MC();
2 голосов
/ 27 сентября 2011

if (OP = 1) {

... должно быть ...

if (OP == 1) {

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...