Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 16:09   #1
vinternete
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 10
По умолчанию Формула синуса на Си

даны 2 числа X i N
найти сумму по формуле
формула синуса :
X − X^3/(3!) + X^5/(5!) − … + (−1)^N·X^(2·N+1)/((2·N+1)!)
значение должно быть ~ sin(x)

Код:
#include<stdio.h>
#include<math.h>
main()
{
        int x,i,n,fa;
        double s=1,f=1,re=1,j;
        printf("vvedite N - ");
        scanf("%d",&n);
 
        printf("vvedite X - ");
        scanf("%d",&x);
        for(i=1;i<=n;i++)
        {
                f*=i;
                fa=2*i+1;
                
for(j=1;j<=fa;j++)
re*=j;
 
                s+=(pow(-1,i)*pow(x,fa))/re;
re=1;
        }
        printf("Virajenie ravno= %f\n",s);
printf("sin(x)=%f\n",sin(x));
}
где ошибка?
vinternete вне форума Ответить с цитированием
Старый 28.06.2011, 16:50   #2
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

А вот зачем тебе f если ты ее нигде не используешь
Код:
f*=i;
Попробуй цикл с i от нуля до n делать, а то помоему у тебя первое слагаемое выпадает.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 28.06.2011, 16:58   #3
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
#include<stdio.h>
#include<math.h>

float factor(int n);

int main()
{
    float s, x;
    int n;
    printf("vvedite N - ");
    printf("vvedite X - ");
    scanf("%f", &x);
    s = 0.0;
    for (int i = 0; i <= n; i++)
        s += pow(-1, i) * pow(x, 2 * i + 1) / factor(2 * i + 1);
    printf("Virajenie ravno = %f\n", s);
    printf("sin(x) = %f\n", sin(x));

    return 0;
}

float factor(int n)
{
    float f = 1.0;
    for (int i = 2; i <= n; i++)
        f *= i;
    return f;
}
Факториал сделал действительным, чтобы обойти переполнение.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 28.06.2011, 17:02   #4
Volinad
 
Регистрация: 23.06.2011
Сообщений: 3
По умолчанию

Начнем с того, что x и n не целые числа, а вещественные. Исправите- получите результат для синуса в радианах. Но, вычисленная по вашей формуле сумма далека от приближенного значения. Проверьте ваш цикл
Volinad вне форума Ответить с цитированием
Старый 28.06.2011, 17:36   #5
vinternete
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Код:
#include<stdio.h>
#include<math.h>

float factor(int n);

int main()
{
    float s, x;
    int n;
    printf("vvedite N - ");
    printf("vvedite X - ");
    scanf("%f", &x);
    s = 0.0;
    for (int i = 0; i <= n; i++)
        s += pow(-1, i) * pow(x, 2 * i + 1) / factor(2 * i + 1);
    printf("Virajenie ravno = %f\n", s);
    printf("sin(x) = %f\n", sin(x));

    return 0;
}

float factor(int n)
{
    float f = 1.0;
    for (int i = 2; i <= n; i++)
        f *= i;
    return f;
}
Факториал сделал действительным, чтобы обойти переполнение.
спасибо
vinternete вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] График Синуса midletarket Помощь студентам 1 23.11.2010 09:43
Градусы из синуса [Java] [CODER] Помощь студентам 2 25.04.2010 20:45
Нахождение синуса whatever Помощь студентам 1 17.11.2009 20:23
Реализация синуса angol Помощь студентам 5 07.11.2008 22:00
Генератор синуса Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.09.2008 12:53