• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

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

  • Автор темы Автор темы akkelas3
  • Дата начала Дата начала

akkelas3

Ученик
Регистрация
8 Ноя 2015
Сообщения
1
Реакции
0
Баллы
0
Не могу найти ошибку

программу написал,а в значение синуса не попасть,не могу найти ошибку
#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.webp
    123.png.webp
    11.4 KB · Просмотры: 42
программу написал,а в значение синуса не попасть,не могу найти ошибку
Ошибки две: первая - Вы обозначили одной буквой (а) как аргумент функции, так и текущее слагаемое, вторая - Вы неправильно вычисляете знаменатель.
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.
Обратите внимание на отсутствующую у Вас переменную "х" - она строго обязательна!
 
Назад
Сверху