Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Обработка ряда


Автор: Palladin 19.1.2007, 19:13
Вот задание:
Значение аргумента x изменяется от a до b с шагом h. Для каждого x найти значения функции Y(x), суммы S(x) и |Y(x)-S(x)| и вывести в виде таблицы. Значения a,b,h и n вводятся с клавиатуры. Функция Y(x) разложена в ряд  S(x). Значения S и Y для данного аргумента x должны совпадать в целой части и в первых  двух-четырех позициях после десятичной точки. Работу программы проверить для a=0,1; b=0,8; h=0,1; n брать в зависимости от варианта задания (с факториалом, без факториала).

Мой вариант в ссылке...

Код

int main()
{
float x,a,b,h,s,y,e;
int n,k;


cout<<"Vvedite Xn: ";
cin>>a;
cout<<endl;
cout<<"Vvedite Xk: ";
cin>>b;
cout<<endl;
cout<<"Vvedite shag(h): ";
cin>>h;
cout<<endl;
cout<<"Vvedite N ";
cin>>n;
cout<<endl;
s=0;
e=1,17;
k=0;
x=a;
int t=1,g=1;

while(x<=b)
{
t=(t*g);
g++;
y=(pow(e,x)+pow(e,-x))/2;

if(k<=n)
{
s=s+(pow(x,(2*k))/t);
k=(k+1);
cout<<"S= "<<s<<"       Y= "<<y<<endl;
}


x=(x+h);
}

getch();
return 0;
}


Хел что-то не так работает программа....

Автор: Anikmar 19.1.2007, 20:24
Предлагаете телепатически узнать "как не так"?

Поконкретнее - что не так.

Автор: zkv 19.1.2007, 20:34
Цитата(Anikmar @  19.1.2007,  20:24 Найти цитируемый пост)
Поконкретнее - что не так. 

а ерунду выводит всякую smile, я прав? Судя по условию, в проге должно быть, по крайней мере, два цикла 1-й - перебор x-ов, 2-й (внутренний) - подсчет S(x)

Автор: Palladin 19.1.2007, 21:41
Там так и есть просто второй цикл самодельныйsmile т.е. не for не Do и не While а выводит не ерунду, почемуто S(x) считается вроде как надо, а вот Y(x) почемуто либо всегда 0 либо всегда 1, лана щас попробую без самопала..... smile 

Автор: Rockie 19.1.2007, 22:01
Цитата(RooR @  19.1.2007,  19:13 Найти цитируемый пост)
e=1,17;

imho здесь должна быть точка вместо запятой


Автор: Palladin 19.1.2007, 22:06
Вообщем передал код расчета на этот:

Код

.........................
for(k=0;k<n+1;k++)
{
if(x<=b)
{
t=t*k+1;
s=s+(pow(x,2*k))/(2*t);
y=(pow(e,x)+pow(e,-x))/2;
x=x+h;
cout<<setw(10)<<"S= "<<s;
cout<<setw(20)<<"Y= "<<y<<endl;
}
}
......................


но всеравно показывает эту ерунду: вот пример теста и то что получилось:

Vvedite Xn: 1
Vvedite Xk: 10
Vvedite shag(h): 1
Vvedite N: 10

S=0.5             y=1
S=1.5             y=1
S=9.6             y=1
S=137.6         y=1
S=3142.41     y=1
S=95881.9     y=1

ну и т.д.

а должно быть примерно так:

S=0.5             y=0.512412
S=1.5             y=1.5324234
S=9.6             y=9.647474
S=137.6         y=137.6123123
S=3142.41     y=3142.4123259
S=95881.9     y=95881.99081

примерно конечноsmile

Какие будут предложения????

Добавлено @ 22:09 
2Роки 
сенкс сморозил здесь немного, но погоду особо не меняет, теперь вместо 1 или 0 выводит 1.12345145 примерно конечно, а должно быть так, цифры S должны совпадать цифрам Y, а после запятой чтобы совпадали по крайней мере пару символов, во как....

Автор: Rockie 19.1.2007, 22:29
RooR, не знаю что у тебя здесь, почему ты x вводишь через a и зачем g, но то что у тебя в прикрепленном доке должно считать факториал. что-то этой функции вообще не вижу. и X  и Y там - две не зависящие друг от друга функции

Добавлено @ 22:43 
1)
Код

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

using namespace std;

int Fact(int n)
{
  if (n>1) return (n*Fact(n-1));
  else return 1;
}


int main()
{
   int n = 10;
   double s = 0, x = 2;

   for(double k=0;k<n;k++)
     {
         s+=( pow(x,2*k) / Fact(2*k) );
     }

   cout<<s;

   cin.get();
   return 0;
}



Автор: Palladin 19.1.2007, 23:18
Есть там факториал смотри внимательнее, по поводу а так надо по заданию, читай первый топ, задача на циклы, такчто функции отпадают, да и вообще что ты сделал, посчитал функцию S??? и толку она и у меня прекрасно считается smile 

Автор: Rockie 19.1.2007, 23:41
Цитата(RooR @  19.1.2007,  23:18 Найти цитируемый пост)
 и толку она и у меня прекрасно считается  

путь считается.  smile 

Цитата(RooR @  19.1.2007,  23:18 Найти цитируемый пост)
 да и вообще что ты сделал, посчитал функцию S???

посчитал функцию S(x) для x=2

Цитата

 такчто функции отпадают

не увидел этого в задании

Цитата(RooR @  19.1.2007,  23:18 Найти цитируемый пост)
 задача на циклы

ну перепиши итеративный вариант факториала и вытащи из функции. хотя это изуродует всю суть c/с++


Автор: Palladin 20.1.2007, 00:01
Пусть уродует, эт у меня препод просто такойsmile)) надо сделать все с помощью чисто циклов, да и не в функции дело, если б надо было я б переписалsmile) тут ниче сложного нет, но почему мой код не пашет, возьмите ктонить мой код и исправьте, не пишите свой, а то потом мне придется снова писать что нельзя юзать здесь тото и тото

Плзsmile  smile 

Автор: zkv 20.1.2007, 07:55
RooR, возможно вы задание не до конца поняли, попробуйте это smile
я писал учитывая ваше пожелание избежать функций
Код

int main()
{
    double x,a,b,h,s,y,fact;
    int i,n,k;
    //input
    cout<<"Vvedite Xn: ";
    cin>>a;
    cout<<endl;
    cout<<"Vvedite Xk: ";
    cin>>b;
    cout<<endl;
    cout<<"Vvedite shag(h): ";
    cin>>h;
    cout<<endl;
    cout<<"Vvedite N ";
    cin>>n;
    cout<<endl;
    //точность e имеет значение
    static const double e = 2.71828182845904523536;
    for( x = a; x <= b; x += h )
    {
        //y(x)
        y=( pow(e,x) + pow(e,-x) ) / 2;
        //S(x)
        s = 0;
        for( k = 0; k <= n; ++k )
        {
            //(2k)!
            fact = 1;
            for( i = 2; i <= 2*k; ++i )
                fact *= i;

            s += pow( x, 2*k ) / fact;
        }
        //output
        cout<<"\n x = "<<x<<" y(x) = "<<y<<" S(x) = "<<s<<" |y(x) - S(x)| = "<<abs( y - s ); 
    }
    return 0;
}
 

Автор: Palladin 20.1.2007, 14:35
Все может быть, дак ты хочеш сказать что функцию Y(x) надо только раз, а потом считать всю сумму S(x) и сравнивать???? я точно незнаю, мне просто дали задание и все, лан ща проверю, сенкс

Автор: Rockie 20.1.2007, 14:38
Цитата(RooR @  20.1.2007,  14:35 Найти цитируемый пост)
Все может быть, дак ты хочеш сказать что функцию Y(x) надо только раз, а потом считать всю сумму S(x) и сравнивать???? 

ну конечно, в описании Y же не указан значок суммы по интевалу


Автор: Palladin 20.1.2007, 14:41
Все пашет сенкс
Плюс за опыт в таком делеsmile

Автор: sergejzr 23.1.2007, 22:43
Внимание! Эта тема не соответствует правилам форума

Заголовок темы не отражает её суть, или несколько вопросов в одной теме.

Ознакомьтесь с правилами! http://forum.vingrad.ruhttp://forum.vingrad.ru/act-SR/f-27.html[ММ]

Тема перенесена в Центр Помощи

Автор: Palladin 23.1.2007, 23:02
Сорри, правила я знаю, обычно так не морожуsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)