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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 00:04   #1
isla
 
Регистрация: 22.12.2010
Сообщений: 8
По умолчанию Вычисление арккосинуса рядом тейлора

Ребят, прошу помощи, всегда старался обойтись своими навыками(и вроде удавалось), но сейчас как-то странно, знаю в чем ошибка, но исправить не могу.

Задание:

вот мой код:
Код:
program laba3;
Const maxiter =2;
var arccos,rez, x,xnach, eps,xk,dx: real;
c,y,a: real;
n:integer;
done:boolean;
begin
writeln ('x, xk, dx, eps - ?');
readln (x, xk, dx, eps);

  done:=true;


writeln ('|    x   | |     y    |');
while abs(x)<1 do begin


     c:=1;
     y:=0;
     n:=0;



   while abs(c)>eps do begin
      c:=c*( (sqr(2*n+1)*sqr(x)*n) / ((n+1)*(2*n+3)*(2*n-1)) ) ;
      writeln ('', c);
      y:=y+c;
            inc(n);

          if n>maxiter then begin
          writeln ('ooops');
           done:=false;
            break
            end;
         end;



     
              if done then begin

                rez:=pi/2-(x+y);
                writeln (x:6:5,'     ',rez:6:4);
                end;



y:=0;
x:=x+dx;
end;

writeln ('|________| |__________|');
readln;
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось isla; 23.12.2010 в 10:11.
isla вне форума Ответить с цитированием
Старый 23.12.2010, 08:59   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) а что за странная одинокая точка с запятой посредине программы?

2)
Цитата:
но сейчас как-то странно, знаю в чем ошибка, но исправить не могу.
ну так расскажите, в чём ошибка, что не работает, тогда больше шансов получить помощь...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2010, 09:59   #3
isla
 
Регистрация: 22.12.2010
Сообщений: 8
По умолчанию

Прошу прошения у модератора, не нашёл кнопочку.

Проанализорав код, я понял, что у меня что-то с входными данными (c и y); x^3 как и все остальные нечетные степени не получаться никогда, как исправить?

Точку с запятой да не заметил, а ПаскальАбц ничего не сказал, от оператора, наверное осталось.

Спасибо заранее

Убрал точку с запятой. Насчет того, что делал
1)Реккурентной формулой вывел множитель, если нужно могу рассписать рассчет.
2)Остальной алгоритм в учебнике, его выписывать не буду, думаю он и так понятен)

Последний раз редактировалось Stilet; 23.12.2010 в 13:16.
isla вне форума Ответить с цитированием
Старый 23.12.2010, 12:26   #4
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Напишите исходную формулу.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 23.12.2010, 16:21   #5
isla
 
Регистрация: 22.12.2010
Сообщений: 8
По умолчанию

arccosX=Pi/2-(x+сумматор(по N) ((2n-1)*x^(2n+1))/(2n*(2n+1)))
isla вне форума Ответить с цитированием
Старый 23.12.2010, 20:57   #6
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Похоже что Вы неправильно поняли формулу.
Подставляем n=1, получим ((1)*x^(3))/(2*3)
Подставляем n=2, получим (3)*x^(5))/(4*5)
Подставляем n=3, получим (5)*x^(7))/(6*7) , что не соответствует Вашему примеру
(у меня очень размытая картинка)
Очевидно в Вашей формуле (((2n-1)!)*x^(2n+1))/(2*n!*(2n+1))) и чтобы получить нечетную степень первое значение д.б. Х
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 23.12.2010, 21:28   #7
isla
 
Регистрация: 22.12.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Похоже что Вы неправильно поняли формулу.
Подставляем n=1, получим ((1)*x^(3))/(2*3)
Подставляем n=2, получим (3)*x^(5))/(4*5)
Подставляем n=3, получим (5)*x^(7))/(6*7) , что не соответствует Вашему примеру
(у меня очень размытая картинка)
Очевидно в Вашей формуле (((2n-1)!)*x^(2n+1))/(2*n!*(2n+1))) и чтобы получить нечетную степень первое значение д.б. Х
Мммм, я тоже в Вики видел формулу с факториалами, но в моем учебнике без факториалов, и нужно сделать по данной формуле. могу сфотографировать еще раз
isla вне форума Ответить с цитированием
Старый 24.12.2010, 08:47   #8
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вопрос не в факториалах, а как Вы поняли запись формулы.
Если не нравятся факториалы, то можно рассмотреть как
arccosX=Pi/2-(x+сумматор(по N)((x^(2n+1))*Произведение(по N)(2n-1))/((2n+1)*(Произведение(по N)2n))

Множитель получится ((x^2)*((2n-1)^2))/(2*n*(2*n+1)), при начальном c=x
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 24.12.2010, 12:55   #9
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
program arccos;
var
 x,y,sumodd,sumeven,e: real;
 farccosstep,farccos : real;
 n : Integer;
begin
write('Vvedite x=');
readln(x);
write('Vvedite tochnost e=');
readln(e);
n := 1; // øàã
sumeven := 1;
sumodd := 1;
farccos := Pi/2 - x;
farccosstep := x;
while ( farccosstep > e ) do
 begin
 sumeven := sumeven * (2*n -1);
 sumodd := sumodd * (2*n);
 farccosstep := (sumeven * Power(x,2*n+1)) / (sumodd * (2*n+1));
 inc(n);
 writeln(farccosstep);
 farccos := farccos - farccosstep;
 end;
writeln(farccos);
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 26.12.2010, 05:05   #10
isla
 
Регистрация: 22.12.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
Код:
program arccos;
var
 x,y,sumodd,sumeven,e: real;
 farccosstep,farccos : real;
 n : Integer;
begin
write('Vvedite x=');
readln(x);
write('Vvedite tochnost e=');
readln(e);
n := 1; // øàã
sumeven := 1;
sumodd := 1;
farccos := Pi/2 - x;
farccosstep := x;
while ( farccosstep > e ) do
 begin
 sumeven := sumeven * (2*n -1);
 sumodd := sumodd * (2*n);
 farccosstep := (sumeven * Power(x,2*n+1)) / (sumodd * (2*n+1));
 inc(n);
 writeln(farccosstep);
 farccos := farccos - farccosstep;
 end;
writeln(farccos);
end.
считает кстати неправильно, помогите пожалуйста, в пн сдавать
isla вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление функции с помощью ряда Тейлора Wast Общие вопросы C/C++ 6 25.12.2011 19:42
Разложить ф-цию рядом Тейлора (С++) Дезик Помощь студентам 7 15.11.2010 09:19
Картинка рядом с input Manonia HTML и CSS 4 19.02.2010 10:48
Вычисление арктангенса через ряд Тейлора. С++. chibbis Помощь студентам 1 23.12.2009 11:48
Два календаря рядом vladimir_86 JavaScript, Ajax 0 17.01.2008 17:04