Есть задание
Для каждого 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 выбрать в зависимости от задания (10, 20, 50, 100).
Не сходятся цифры, видит может кто ошибку? Помогите пожалуйста!
{
double a, b, h, x, y, s, r;
int k, n, zn;
a = StrToFloat(Edit1->Text);
h = StrToFloat(Edit2->Text);
b = StrToFloat(Edit3->Text);
n = StrToFloat(Edit4->Text);
for (x = a; x <= b; x += h)
{
s = 1;
r = 1;
zn = -1;
for (k = 1; k <= n; k++)
{
r *= zn * ((x * x) / (2 * k + 2));
s += r;
}
y = sin(x);
Memo1->Lines->Add("яЁш x= " + FloatToStrF(x, ffFixed, 8, 2) +
" ёєььр S(x)= " + FloatToStrF(s, ffFixed, 8, 6) + " Y(x)= "
+ FloatToStrF(y, ffFixed, 8, 6));
}
}
Не те первые члены ряда (первый член не 1, а x
), не на тот знаменатель делите:
И еще - этот ряд сходится к синусу, а не к косинусу. Вы точно привели в условии верный ряд?
Вот, в консольном, так сказать, варианте:
int main()
{
double
a = 0.0,
b = 1.6,
h = 0.1;
int n = 5;
for(double x = a; x <= b; x+= h)
{
double sum = x, term = x, x2 = x*x;
for(int k = 1; k <= n; ++k)
sum += term *= -x2/(2*k*(2*k+1));
printf("%.3lf %8.5lf %8.5lf\n",x,sum,sin(x));
}
}
А вот - для косинуса:
for(double x = a; x <= b; x+= h)
{
double sum = 1, term = 1, x2 = x*x;
for(int k = 1; k <= n; ++k)
sum += term *= -x2/(2*k*(2*k-1));
printf("%.3lf %8.5lf %8.5lf\n",x,sum,cos(x));
}
Update
Раз все так непонятно...
Задача: параллельно читать файлы и выводить в консоль имя файла и цифру из файла
Имеется такая учебная задача:
Допустим, дано расписание автобусов на какой-то день, в виде списка числовых значенийОпределить ближайший к текущему времени автобус