Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.06.2009, 21:49   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
Плохо Вывести результат (Вычисление интегралов)

Здравствуйте программисты! Подскажите пожалуйста,как вывести результат в этом коде, когда-то брался решать,но не дорешал,подскажите пож.как вывести результат. Вот код:

Код:
#include <vcl>
#include <iostream>
#include <conio>
using namespace std;

double Simpson(double (*Fx)(double))
{
        double I;
        double h;
        double x;
        double a,b;
        int m;
        

        cout << "\n Input integral atributes:\n" << endl;
        cout << "\t-> Enter a = ";
        cin >> a;
 
        cout << "\t-> Enter b = ";
        cin >> b;
 
        cout << "\t-> Enter m = ";
        cin >> m;
 
        h=(b-a)/(m-1);
        x = a;
 
        I = Fx(a) + Fx(b);
        int n=0;
 
        while (n < m-2)
        {
                x = x+h;
                if (n%2==0) I=I+4*Fx(x);
                        else  I = I+2*Fx(x);
                n++;
        }
 
        return I*h/3;
}

int main()
{
system("pause");
}
Мне нужно чтоб вычисляло результат 2 интегралов:
1 -ый интеграл какой вычислить нужно (1/sqrt(0.5*pow(x,2)+1.5))
2 - ой интеграл (x+1)*cos(x*x)

Последний раз редактировалось prikolist; 05.06.2009 в 22:05.
prikolist вне форума
Старый 05.06.2009, 22:13   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Объявляете функции:
Код:
double F1(double x)
{
 return (1/sqrt(0.5*pow(x,2)+1.5));
}

double F2(double x)
{
return (x+1)*cos(x*x);
}
И в главной функции:
Код:
 cout<<Simpson(&F1)<<endl;
 cout<<Simpson(&F2)<<endl;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 05.06.2009, 22:25   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Ясно,спасибо, попробывал вроде работает, осталось последнее,методом трапеций, не знаю как сделать. У вас Сазари где-то видел такой код, по трапециям:
Код:
h=(b-a)/n;
 
for(i=0,x=a; i<n; i++,x+=h)
 F[i] = 1/((0.5 + 0.1*pow(x,3))*sqrt(x));
 
I1 = 0;
for(i=1;i<n-1;i++)
 I1 = I1+F[i];
I1 = I1+ F[0]/2 + F[n-1]/2;
I1 =I1 * h;
Но не знаю, как сделать так,чтоб был похожее, как выше у Симпсона,только по трапециям.
prikolist вне форума
Старый 05.06.2009, 22:33   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что-то вроде этого:
Код:
for(i=1,x=a; i<m-1; i++,x+=h)
         I += Fx(x);
        I += Fx(a)/2 + Fx(b)/2;
        I *= h;
        return I;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 05.06.2009, 22:42   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Вычисление интегралов:
1. Метод Левых прямоугольников
Код:
double M_leftRectangle( pointFunc F, double a, double b,unsigned N)
{
        double Res = 0.0;
        double h=(b-a)/N;
        for (double x=a; x<b;x+=h)
                Res+= (*F)(x);
        return Res*h;
}
2. Метод Правых прямоугольников
Код:
double M_rightRectangle( pointFunc F, double a, double b,unsigned N)
{
        double Res = 0.0;
        double h=(b-a)/N;
        for (double x=a+h; x<=b;x+=h)
                Res+= (*F)(x);
        return Res*h;
}
3. Метод средних прямоугольников
Код:
double M_middleRectangle( pointFunc F, double a, double b,unsigned N)
{
        double Res = 0.0;
        double h=(b-a)/N;
        for (double x=a+h/2; x<=b; x+=h)
                Res+= (*F)(x);
        return Res*h;
}
4. Метод Трапеций
Код:
double M_trapet( pointFunc F, double a, double b,unsigned N)
{
        double Res = 0.0;
        double h=(b-a)/N;
        for (double x=a+h; x<b; x+=h)
                Res+= (*F)(x);
        Res=h*((*F)(a)+(*F)(b))/2+Res*h;
        return Res;
}
5. Метод Симпсона
Код:
double M_Simpson( pointFunc F, double a, double b,unsigned N)
{
        double Res = 0.0;
        double h=(b-a)/N;
        for (double x=a+h; x<b; x+=2*h)
                Res+= 2*(*F)(x);
        for (double x=a+2*h; x<b; x+=2*h)
                Res+= 4*(*F)(x);
        Res=h*((*F)(a)+(*F)(b)+Res)/3;
        return Res;
}
MaTBeu вне форума
Старый 05.06.2009, 22:44   #6
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Попробывал так, что-то ерунда получилась.
Код:
#include <vcl>
#include <iostream>
#include <math>
#include <conio>
using namespace std;


double Trapesia(double (*Fx)(double))
{
        double I;
        double h;
        double x;
        double a,b;
        int m,i;


        cout << "\n Input integral atributes:\n" << endl;
        cout << "\t-> Enter a = ";
        cin >> a;

        cout << "\t-> Enter b = ";
        cin >> b;
 
        cout << "\t-> Enter m = ";
        cin >> m;

        for(i=1,x=a; i<m-1; i++,x+=h)
         I += Fx(x);
        I += Fx(a)/2 + Fx(b)/2;
        I *= h;
        return I;
 }

double F1(double x)
{
return (1/sqrt(0.5*pow(x,2)+1.5));
}

double F2(double x)
{
return (x+1)*cos(x*x);
}


int main()
{
cout<<Trapesia(&F1)<<endl;
cout<<Trapesia(&F2)<<endl;
cout<<"\n Integral = "<<I;
system("pause");
}
prikolist вне форума
Старый 05.06.2009, 22:49   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так а подсчет h зачем убрали?
Код:
h=(b-a)/m;
А вообще, вон вам MaTBeu какую подборку сделал.. Берите и используйте )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 05.06.2009, 22:52   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Только под мои функции в начале программы нужно написать
Код:
typedef double (*pointFunc)(double);
так вы определите указатель на функцию.
MaTBeu вне форума
Старый 05.06.2009, 23:20   #9
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Попробывал так,согласно инструкции Матвея останавливается на первой строке функции мэин и дальше не идёт.

Код:
#include <vcl>
#include <iostream>
#include <math>
#include <conio>
using namespace std;
double F1(double x);
double F2(double x);
typedef double (*pointFunc)(double);


double M_Simpson( pointFunc F, double a, double b,unsigned N)
{
        double Res = 0.0;
        double h=(b-a)/N;
        for (double x=a+h; x<b; x+=2*h)
                Res+= 2*(*F)(x);
        for (double x=a+2*h; x<b; x+=2*h)
                Res+= 4*(*F)(x);
        Res=h*((*F)(a)+(*F)(b)+Res)/3;
        return Res;
}

double F1(double x)
{
return (1/sqrt(0.5*pow(x,2)+1.5));
}

double F2(double x)
{
return (x+1)*cos(x*x);
}


int main()
{
cout<<Trapesia(&F1)<<endl;
cout<<Trapesia(&F2)<<endl;

system("pause");
}
prikolist вне форума
Старый 05.06.2009, 23:24   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Функция
Код:
double M_Simpson( pointFunc F, double a, double b,unsigned N)
А вызываете:
Код:
cout<<Trapesia(&F1)<<endl;
cout<<Trapesia(&F2)<<endl;
Ничего не замечаете?

И еще на количество параметров обратите внимание.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление интегралов Golovastik Общие вопросы C/C++ 17 25.12.2013 00:05
Нужно вывести результат класса prikolist Общие вопросы C/C++ 20 23.05.2009 20:06
ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ (метод трапеций) maliyusha Помощь студентам 13 25.12.2008 00:34
Программа "вычисление определенных интегралов" Artinka Помощь студентам 5 16.03.2008 22:54