09.11.2015, 00:26 | #1 (permalink) |
Новичок
Регистрация: 09.11.2015
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Не могу найти ошибку
#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; } |
09.11.2015, 00:26 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Очень важно почитать схожие темы, возможно, что там уже есть нужный вам ответ Помогите найти ошибку Не могу найти ошибку |
09.11.2015, 13:58 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ошибки две: первая - Вы обозначили одной буквой (а) как аргумент функции, так и текущее слагаемое, вторая - Вы неправильно вычисляете знаменатель.Для того, чтобы из слагаемого с (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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|