Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Разложение Sin(x) по формуле Тейлора

Автор: Тёмный Эльф 28.02.2007 4:01

Программа должна раскладывать Sin(x) по формуле Тейлора. Какой бы я не ввел x, все члены ряда (temp) равны 0, и в результате сумма членов тоже. Подскажите плиз где я ошибся? Кстати, когда я вместо float temp,x,f пишу int temp,x,f, ответы уже не 0, но все равно не те. не могу понять в чем дело!

#include <stdio.h>
int main(void)
{int i; int k;
int n;
float temp; float x; float f;
printf("введите количество членов ряда: ");
scanf("%d",&k);
printf("Enter x: ");
scanf("%d",&x);
temp=x/1; f=x/1;
printf ("%d\n",temp);
n=1;
for (i=1; i<k; i++)
{
temp=(-1)*(temp*((x*x)/((n+1)*(n+2))));
printf("%d\n",temp);
n=n+2;
f=f+temp;
}
printf("Sin(x) = %d\n", f);
return 0;
}

Автор: volvo 28.02.2007 4:14

Ты же перепутал все типы - работаешь с float, а печатаешь его как int ...

#include <stdio.h>

int main(void) {
int i; int k; int n;
float temp; float x; float f; // <--- X

printf("введите количество членов ряда: ");
scanf("%d",&k);
printf("Enter x: ");
scanf("%f",&x); // <--- смотри на спецификатор

temp=(float)x/1; f=(float)x/1; // Здесь нужно явное приведение типов
printf ("%f\n",temp);
n=1;
for (i=1; i<k; i++) {
temp=(-1)*(temp*((x*x)/((n+1)*(n+2))));
printf("%+12.10f\n",temp); // Увеличиваем поле вывода
n=n+2;
f=f+temp; // Можно f += temp;
}

printf("Sin(x) = %+12.10f\n", f); // Тоже работаем с float
return 0;
}


Автор: Тёмный Эльф 28.02.2007 4:32

Точно! Спасибо...