Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 09.11.2015, 00:26   #1 (permalink)
akkelas3
Новичок
 
Регистрация: 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;
}
Миниатюры
123.png  
akkelas3 вне форума   Ответить с цитированием

Старый 09.11.2015, 00:26
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Очень важно почитать схожие темы, возможно, что там уже есть нужный вам ответ

Помогите найти ошибку
Не могу найти ошибку

Старый 09.11.2015, 13:58   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от akkelas3 Посмотреть сообщение
программу написал,а в значение синуса не попасть,не могу найти ошибку
Ошибки две: первая - Вы обозначили одной буквой (а) как аргумент функции, так и текущее слагаемое, вторая - Вы неправильно вычисляете знаменатель.
Цитата:
Сообщение от akkelas3 Посмотреть сообщение
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.
Обратите внимание на отсутствующую у Вас переменную "х" - она строго обязательна!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.