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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2012, 14:10   #1
yzen
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 37
По умолчанию вычислить


Нужно сделать через цикл
а то у меня не получается это сделать компактно
не могу сообразить
Изображения
Тип файла: jpg Безымянный67.jpg (10.2 Кб, 96 просмотров)
yzen вне форума Ответить с цитированием
Старый 13.10.2012, 15:13   #2
Chuckle
Пользователь
 
Регистрация: 13.10.2012
Сообщений: 12
По умолчанию

Код (часть кода) на си:
Код:
sin = x;
    for (i = 2; i <= 7; i++)
    {
        tmp = i * 2 - 1;
        if (i % 2)
        {
            sin += power(x, tmp) / factorial(tmp);
        }
        else
        {
            sin -= power(x, tmp) / factorial(tmp);
        }
    }
printf("%lf", sinx);
sinx - искомое значение. power(x, tmp) - функция возведения числа х в степень tmp. factorial(tmp) - функция вычисления факториала числа tmp.

Последний раз редактировалось Chuckle; 13.10.2012 в 15:35.
Chuckle вне форума Ответить с цитированием
Старый 13.10.2012, 16:13   #3
yzen
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 37
По умолчанию

забыл.. на паскале надо
просто уже сколько читал толком не чего не получается
то что цикл в цикле здесь
как я понимаю
yzen вне форума Ответить с цитированием
Старый 13.10.2012, 16:30   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
var
    s, x, a: double;
    i: integer;
BEGIN
    readln(x);
    s := x;
    a := x;
    for i := 2 to 7 do
    begin
        a := - a * x * x / ((2 * i - 2) * (2 * i - 1));
        s := s + a;
    end;
    writeln(s);
    readln;
END.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.10.2012, 16:39   #5
Chuckle
Пользователь
 
Регистрация: 13.10.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
for i := 2 to 7 do
    begin
        a := - a * x * x / ((2 * i - 2) * (2 * i - 1));
        s := s + a;
    end;
Это разве будет вычислять то, что нужно?
Chuckle вне форума Ответить с цитированием
Старый 13.10.2012, 16:47   #6
yzen
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
var
    s, x, a: double;
    i: integer;
BEGIN
    readln(x);
    s := x;
    a := x;
    for i := 2 to 7 do
    begin
        a := - a * x * x / ((2 * i - 2) * (2 * i - 1));
        s := s + a;
    end;
    writeln(s);
    readln;
END.
ты еще больше на вел на меня мути
как то с задачей сопоставить не особо получается
yzen вне форума Ответить с цитированием
Старый 13.10.2012, 17:15   #7
Chuckle
Пользователь
 
Регистрация: 13.10.2012
Сообщений: 12
По умолчанию

В общем, попробую рассказать, что было написано в моем коде.

Код:
sin = x; 
/* изначально присваиваем sin значение х,
потому что оно известно сразу, его не надо вычислять в цикле */
    for (i = 2; i <= 7; i++) 
/* запускаем цикл от 2 до 7 
(потому что количество членов ряда Тейлора (формула, данная в задаче) 
для вычисления синуса х равно 7 (по условию). 
А первый член, равный х, мы уже присвоили sin, поэтому цикл нужно запускать с двойки.*/
    {
        tmp = i * 2 - 1; 
/* переменная tmp нам нужна для того, 
чтобы получать в i-м члене ряда Тейлора нужные числа, такие как 3, 5, 7, 9, 11, 13. 
Просто эти нечетные числа можно получить из числа i путем умножения i на 2 
и вычитания из полученного значения единицы (что мы и делаем). */

if (i % 2) 
/* проверяем i на четность. 
Здесь: если i нечетное (т.е. остаток от деления на 2 не равен нулю */
        {
            sin += power(x, tmp) // factorial(tmp); 
/* прибавляем к sin (к искомому значению) 
x в степени tmp, деленное на факториал числа tmp. 
Если i-й по счету член ряда стоит на нечетном месте, 
то его нужно брать со знаком "плюс", поэтому мы прибавляем. */
        }
        else /* иначе (т.е. если член ряда Тейлора стоит на четном месте) */
        {
            sin -= power(x, tmp) // factorial(tmp);  
/* вычитаем из sin (из искомого значения) 
x в степени tmp, деленное на факториал числа tmp. 
Если i-й по счету член ряда стоит на четном месте (как в этой ветке условия), 
то его нужно брать со знаком "минус", поэтому мы вычитаем. */
        }
        }
    }
printf("%lf", sinx); 
/* печатаем искомое значение на экран */
sinx - искомое значение. power(x, tmp) - функция возведения числа х в степень tmp. factorial(tmp) - функция вычисления факториала числа tmp.

PS: деление в алгоритме обозначено как "//", чтобы текст кода не смешивался с комментариями

PSS: думаю, что алгоритм должен быть понятен по комментариям (даже если вы не знаете си)

Последний раз редактировалось Chuckle; 13.10.2012 в 17:25.
Chuckle вне форума Ответить с цитированием
Старый 13.10.2012, 17:36   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от Chuckle Посмотреть сообщение
Это разве будет вычислять то, что нужно?
Будет.
Алгоритм почти такой-же как у вас, но я опираюсь на предыдущее значение слагаемого, а не высчитываю его каждый раз.
Чтобы убедиться в правильности, стоит на бумажке повыписывать получающееся "a":
Цитата:
i = 1 a = x
i = 2 a = -x^3/(2*3)
i = 3 a = x^5/(2*3*4*5)
...
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.10.2012, 17:52   #9
Chuckle
Пользователь
 
Регистрация: 13.10.2012
Сообщений: 12
По умолчанию

BDA
Хм, прошу прощения, не заметил этого. Действительно работает
Chuckle вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить as1212 Помощь студентам 1 13.10.2011 22:26
Вычислить adm2010 Паскаль, Turbo Pascal, PascalABC.NET 7 16.05.2011 23:16
вычислить -maxim92- Помощь студентам 1 25.01.2010 09:49
Вычислить. svobodys Помощь студентам 7 16.12.2008 17:21