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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2012, 18:33   #1
s4egol
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 56
По умолчанию задача из лабороторной

Значение функции sin(x) можно вычислить с помощью разложения её в ряд Маклорена
Sin²(x) = x² – x⁴/3 + 2x⁶/45 - … + (-1)ᶰ⁻¹*2²ᶰ⁻¹*x²ᶰ /(2n)! + …
Вычислить sin(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Подсчитайте количество членов ряда, которое для этого понадобилось.


Program yp4;
var
y, eps, a1, a2, e, x : real;
I : longint;
begin
readln(x);
eps:=0.0001;
y:=x*x;
a1:=x*x;
i:=2;
repeat
a2:=(-1)*a1*x*x*4/(2*i*(2*i-1));
inc(i);
y:=y+a2;
e:=a1+a2;
a1:=a2;
until abs(e)<eps;
writeln('y=',y:6:2,'eps=',eps,'i=', i);
end.

я её сделал так...сам понимаю что решение запутанное но не знаю как облегчить его...преподователь ругается и требует переписать её, ну или упростить...помогите пожалуйста.
s4egol вне форума Ответить с цитированием
Старый 22.10.2012, 19:41   #2
s4egol
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 56
По умолчанию

помогите пожалуйста...завтра просто желательно сдать...
s4egol вне форума Ответить с цитированием
Старый 22.10.2012, 20:03   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Program yp4;

function Pow(a: real; n: integer): real;  {Степень числа}
var i: integer;
     res: real;
begin
  res:=1;
  if n<>0 then 
    for i:=1 to n do res:=res*a;
  if n<0 then res:=1/res;
  Pow:=res;
end;

function Fact(a: integer): integer; {Факториал числа}
var res: integer;
     i: integer;
begin
  res:=1;
  if a>0 then
    for i:=1 to a do
      res:=res*i;
  Fact:=res;
end;

var
eps, x,y,e: real;
i: longint;


begin                                 {Сама программа}
  readln(x);
  eps:=0.0001;
  i:=0; y:=0;
  repeat
    inc(i);
    e:=Pow(-1,i-1)*Pow(2,2*i-1)*Pow(x,2*i)/Fact(2*i);
    y:=y+e
  until abs(e)<eps;
  y:=SQRT(y);
  writeln('y=',y:6:2,' eps=',eps,' i=', i);
  ReadLn;
  writeln('sin(x)=',sin(x));
  ReadLn;
end.

Примерно так. Вы забыли, что ряд Маклорена дает квадрат синуса, поэтому итоговое значение будет равно SQRT(y). Плюсом выводится синус икса, вычисленный родной функцией - для сравненияя
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 22.10.2012 в 20:39.
Sciv вне форума Ответить с цитированием
Старый 22.10.2012, 20:26   #4
s4egol
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 56
По умолчанию

спасибо большое) ваше решение очень подробное и понятное)
вот только в этом месте until abs(e)<eps; при выходе там вроде abs(eps) а не abs(e) если я не ошибаюсь)
s4egol вне форума Ответить с цитированием
Старый 22.10.2012, 20:40   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
вот только в этом месте until abs(e)<eps
миль пардон, забыл про е. Исправил код прямо в тексте поста, ловите
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача о стрелках (задача Майхелла) Silly Student Помощь студентам 0 14.12.2011 22:20
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51