Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Не могу найти ошибку (http://www.tehnari.ru/f41/t105183/)

akkelas3 09.11.2015 00:26

Не могу найти ошибку
 
Вложений: 1
программу написал,а в значение синуса не попасть,не могу найти ошибку
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define EPS 1e-4

int main(void)
{

double a,s,si;
int n=0;
a=M_PI/3;
si=sin(a);
s=a;
while (fabs(a)>EPS)
{
n++;
a*=-1*pow(a,2)/(2*pow(n,2)+5*n+2);
s+=a;
}
printf("s=%lf\n",s);
printf("sin p/3=%lf",si);
system ("PAUSE");
return 0;
}

Vladimir_S 09.11.2015 13:58

Цитата:

Сообщение от akkelas3 (Сообщение 1176603)
программу написал,а в значение синуса не попасть,не могу найти ошибку

Ошибки две: первая - Вы обозначили одной буквой (а) как аргумент функции, так и текущее слагаемое, вторая - Вы неправильно вычисляете знаменатель.
Цитата:

Сообщение от akkelas3 (Сообщение 1176603)
a*=-1*pow(a,2)/(2*pow(n,2)+5*n+2);

Для того, чтобы из слагаемого с (n-1) получить слагаемое с (n), нужно:
1. Изменить знак (сделано).
2. Домножить на квадрат аргумента (ошибка: вместо аргумента π/3 подставляется предыдущее слагаемое).
3. Поделить на 2n*(2n+1) = 4n² + 2n (полная ахинея).
Исправьте, и будет Вам счастье.

К сожалению, я на СИ не пишу, да и транслятора нету, поэтому я переписал Вашу программу на Паскаль, исправил ошибки и оттестировал:
Код:

Const
 EPS=1e-4;

Var
 a,s,si,x:Real;
 n:Integer;

Begin
 n:=0;
 x:=Pi/3;
 si:=sin(x);
 a:=x;
 s:=a;
 while (abs(a)>EPS) do
  begin
  Inc(n);
  a:=a*(-1)*Sqr(x)/(4*Sqr(n)+2*n);
  s:=s+a;
  end;
 writeln('s = ',s:0:7,'  sin(p/3) =',si:0:7);
 readln
End.

Обратите внимание на отсутствующую у Вас переменную "х" - она строго обязательна!


Часовой пояс GMT +4, время: 21:23.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.