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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2013, 22:33   #1
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию Помогите разобраться с программой С++ Builder

Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Так как значение S(x) является рядом разложения функции Y(x), при правильном решении значения S и Y для заданного аргумента x (для тестовых значений исходных данных) должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.
Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n=7.
Помогите пожалуйсто,не знаю как сделать,чтобы программа работала правильно.
Условие.PNG
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
double a, b, x, h,s,y,r,rez;
const double PI = 3.1415926;
int n, k;
puts("Input a,b,h,n");
scanf("%lf%lf%lf%d", &a, &b, &h, &n);
printf("\n x | Y(x) | S(x) | |Y(x)-S(x)|");
printf("\n------------------------------------------");
for(x = a; x<=b; x+=h)
{
r=s=1;
y=-1/2*log(1-2*x*cos(PI/3)+pow(x,2));
for(k=1;k<=n;k++)
{
s=(pow(x,k)*cos(k*PI/3))/k;
}
rez=fabs(y-s);
printf("\n %1.1lf | %1.4lf | %1.4lf | %1.4lf |", x,y,s,rez);
}
printf("\n--------------------------------------------");
system "pause";
}
spectrum988 вне форума Ответить с цитированием
Старый 24.10.2013, 22:42   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

s=(pow(x,k)*cos(k*(PI/3)))/k;
Вроде так.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.10.2013, 23:30   #3
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Ну да,согласен,но почему-то в самой программе не считает значение y(выводит на экран 000000000000)а функцию s cчитает нормально.
spectrum988 вне форума Ответить с цитированием
Старый 24.10.2013, 23:35   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
y=-log(1-2*x*cos(PI/3)+pow(x,2))/2;
1/2 = 0 (целая арифметика)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 24.10.2013, 23:55   #5
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Ответы выражений у и s должны быть одинаковыми,но почему-то они не совпадают.
spectrum988 вне форума Ответить с цитированием
Старый 25.10.2013, 00:11   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

int
main()
{
    double a, b, x, h, s, y, rez;
    //const double PI = 3.1415926;
    int n, k;
    puts("Input a, b, h, n");
    scanf("%lf%lf%lf%d", &a, &b, &h, &n);
    printf("\n x | Y(x) | S(x) | |Y(x)-S(x)|");
    printf("\n------------------------------------------");
    for(x = a; x <= b; x += h) {
        s = 0;
        y = -log(1 - 2 * x * cos(M_PI / 3) + x * x) / 2;
        for(k = 1; k <= n; ++k)
            s += (pow(x, k) * cos(k * M_PI / 3)) / k;
        rez = fabs(y - s);
        printf("\n %1.1lf | %1.4lf | %1.4lf | %1.4lf |", x, y, s, rez);
    }
    printf("\n--------------------------------------------");
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.10.2013, 00:25   #7
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Cпасибо за помощь,программа работает правильно,буду признателен если обьясните мою ошибку,что я не учел.
spectrum988 вне форума Ответить с цитированием
Старый 25.10.2013, 00:28   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Вы не считали сумму (s += ...), а переписывали значение в s новым числом (s = ...). После цикла в s хранился последний вычисленный элемент.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.10.2013, 00:52   #9
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Спасибо еще раз,очень выручили,скажите а запись M_PI это предопределенная константа,которую не нужно присваивать в самой программе(вы написали мне как в комментарии //const double PI = 3.1415926; ).Значит будет и так и так правильно ?!

Последний раз редактировалось spectrum988; 25.10.2013 в 00:56.
spectrum988 вне форума Ответить с цитированием
Старый 25.10.2013, 01:00   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Пожалуйста.
Да, предопределенная, поэтому можно самому не объявлять её, но если откажется компилироваться, то просто расскоментируете свое определение.
Точнее, в math.h есть такая запись: #define M_PI 3.14159265358979323846.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с программой Bercut48rus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.12.2009 02:40
Помогите разобраться с программой IrinaPetrova Фриланс 3 01.12.2009 13:03
Помогите разобраться с программой Svetlyachok Общие вопросы C/C++ 7 06.06.2009 17:55
Помогите разобраться с программой First90_19 Паскаль, Turbo Pascal, PascalABC.NET 0 23.12.2008 01:58