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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 22:41   #1
olejaaa
 
Регистрация: 02.04.2011
Сообщений: 4
По умолчанию что неправильно в формуле

Программу писал через с++ builder, работает, но неправильно. Предполагаю, что ошибка в самой формуле, подскажите как записать формулу правильно. Заранее спасибо..

Задание.
В среде программирования С++ Builder 6 создать простейшее приложение для вычис-ления и вывода на экран значения функции представленной с помощью ряда Тейлора при заданном значении х:

arcsin x = x + x^3/2*3 +1*3*x^5/2*4*5 + 1*3*5*x^7/2*4*6*7 + ...
|x|<1;

Использовать визуальные компоненты Edit, Label, ListBox, Button. Организовать кон-троль ввода информации.

Вот сама написаная мною программа:

Код:
#include <vcl.h>
#include <math.h>
#pragma hdrstop

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



void __fastcall TForm1::Button1Click(TObject *Sender)
{int n,i;

        float prch,s=0,x,xch,przn=1,c=0;
        n=StrToInt(Edit2->Text);
        x=StrToFloat(Edit1->Text);
        xch=x; prch=1;
        if(x>-1&&x<1)
        {for(i=1;i<=n;++i)
        {
          xch*=x*x;
          prch*=(2*i-1);
          przn*=(2*i+1)*2*i;
          s+=(xch*prch/przn); c=x+s;  ListBox1->Items->Add(c);}}
          //s=(2*i-1)*pow(x,2*i+1);c+=x+(s/2*i*(2*i+1));ListBox1->Items->Add(c);}}
        else {Close();}
        Label3->Caption=String(c);
}

Последний раз редактировалось ACE Valery; 06.04.2011 в 01:41.
olejaaa вне форума Ответить с цитированием
Старый 08.04.2011, 11:43   #2
Ирина Сергеевна
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 17
По умолчанию

Совершенно правильно предполагаете: но только ошибка не в записи формулы, а в программной реализации. Когда Вы считаете значение знаменателя, то правильным получаете его только при n = 1, после чего оно у Вас постоянно умножается на (2*i+1), тем самым накапливается, а нам нужно только одно.
Вариантов справиться с этим - масса. Можно знаменатель пересчитывать каждый раз отдельно в зависимости от i. Можно воспользоваться другой формулой, где факториалы полностью считаются (а не по чётным-нечётным). Можно, чтобы сохранить код, который у Вас уже написан, сделать, например, так:
Код:
if((x>-1)&&(x<1)){
       for(i=1;i<=n;++i)
       {
              xch*=x*x;
              prch*=(2*i-1);
              przn=przn*(2*i+1)*2*i/(2*i-1);
              s+=(xch*prch/przn); c=x+s;  ListBox1->Items->Add(c);
       }
}
The impossible is possible, if you really want..
Ирина Сергеевна вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает мю, в формуле ковариации? МИНЗДРАВ Microsoft Office Excel 1 21.02.2011 01:51
паскаль.что неправильно? AndrewPl Помощь студентам 9 29.05.2010 22:35
Че неправильно! HixoH Общие вопросы C/C++ 0 23.12.2009 15:04
что неправильно? helavisa Общие вопросы C/C++ 18 02.06.2009 17:51