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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2015, 23:18   #1
AlexG_
Новичок
Джуниор
 
Регистрация: 06.11.2015
Сообщений: 2
По умолчанию Помогите исправить

Такое задание:
Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы.
Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; n=80



Проблема в том, что если "n" < 15 - всё вроде бы работает, при большом "n" ошибка в делении на "0" при расчёте суммы. Может кто укажет на ошибку

вот текст:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Clear();
Memo1->Lines->Add("Лабораторная работа №3");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a,b,x,h,s,y,m;
int n,zn=-1,k,f,i;
a=StrToFloat (Edit1->Text);
b=StrToFloat (Edit2->Text);
n=StrToInt (Edit3->Text);
h=StrToFloat (Edit4->Text);
for (x=a;x<=b;x+=h){
y=cos(x);
for (k=s=1;k<=n;k++){
for(i=f=1;i<=2*k;i++)
f*=i;
s+=pow(zn,k)*pow(x,(2*k))/f;
m=fabs(y-s);

}

Memo1->Lines->Add(" при x= "+FloatToStrF(x,ffFixed,8,2)+" сумма= "
+FloatToStrF(s,ffFixed,8,5)+" y= "+FloatToStrF(y,ffFixed,8,5)
+" |Y(x)-S(x)|= "+FloatToStrF(m,ffFixed,8,5));
}
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1->Clear();
}
//-------------------------------------------------
AlexG_ вне форума Ответить с цитированием
Старый 07.11.2015, 09:57   #2
AlexG_
Новичок
Джуниор
 
Регистрация: 06.11.2015
Сообщений: 2
По умолчанию Разобрался

Спасибо, вопрос закрыт, сам разобрался. Всего лишь надо было задекларировать факториал через double, а не int на больших n
AlexG_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить. Smile189 Паскаль, Turbo Pascal, PascalABC.NET 1 02.10.2016 21:46
Помогите исправить.... BROOKS Фриланс 7 25.11.2009 15:00
помогите исправить _llllllllll_ Общие вопросы C/C++ 3 21.09.2009 09:22
Помогите исправить NeiL Общие вопросы C/C++ 1 31.05.2008 13:31