|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.10.2008, 17:44 | #1 |
Пользователь
Регистрация: 26.10.2008
Сообщений: 40
|
задача на итерационные циклы.
Товарищи, нужна помощь в решении задачи на итерациооные циклы. Условие тривиальное вычислить арктангенс по формуле
вот мой исходник, помогите пожалуйста найти ошибку. компилироваться компилируется, но считать никак не хочет. program lab4; uses crt; const maxiter = 500; var x1,x2,dX,E:real; {x1 - Xnach, x2- Xkon, dX- shag, E -tochnost} n:integer; {schetchik vicheslennih elementov ryada} function getY(x,E:real):real; var y,ch:real; {y-znachenie funcii arcctg(x), ch - element ryada} begin ch:= 1/x; {pervii element ryada} y:= -pi/2; n:=1; while (abs(ch)>E) do begin y:=y+ch; ch:=ch*(-1)*(2*n+1) /((2*n+3)*x*x); {vichislaem ocherednoi element ryada} {if (n mod 2) <> 0 then ch:=-ch;} inc(n); {podschitivaem kol-vo vicheslennih elementov ryada} if (n>maxIter) then begin write('ryad rashoditsa!'); break; end; end; getY:=y; end; begin clrscr; writeln('vvedite x1,x2,dX,E:'); readln(x1,x2,dX,E); if (x1>=(-pi/2)) and (x1<=(pi/2)) and (x2>=(-pi/2)) and (x2<=(pi/2)) then {sootvetvuet oblasti dop. znachenii ? stroim tablicu} begin writeln('arcctg(x)------------------------------'); writeln('|X |Y |N'); {shapka tablici} while (x1<=x2) do begin writeln('|',x1,'|',getY(x1,e),'|',n ); {postroenie tablici znachenii ot x1 do x2 s shagom dX} x1:=x1+dX; end; writeln('---------------------------------------'); end else writeln('nevernie dannie x1<=x2,x=[-pi/2;pi/2]!!'); begin writeln('nazmite enter'); readln; end; end. |
26.10.2008, 21:09 | #2 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Я в математике плохо разбираюсь, но какая-то у Вас странная формула. У Вас при х=0 функция не определена, хотя arctg0 определен и равен 0.
В Википедии другая формула, там нет -pi/2 и х в степени находится в числителе и все нормально работает. У Вас даже если избежать х=0, то при х близких к 0 вылетают такие дикие значения, каких не может быть. |
26.10.2008, 21:25 | #3 |
Пользователь
Регистрация: 26.10.2008
Сообщений: 40
|
да-да, я уже заметил ошибку насчет нуля. Ну я не могу сделать другую формулу, в моей лабе дана именно с -pi/2. Смысл сделанного мной в том, что я поделил следующий член убывающией прогресии на данный и получил постоянное число, которое и умножается. вот немного модернизированный исходник.
program lab4; uses crt; const maxiter = 500; var x1,x2,dX,E:real; {x1 - Xnach, x2- Xkon, dX- shag, E -tochnost} n:integer; {schetchik vicheslennih elementov ryada} function getY(x,E:real):real; var y,ch:real; {y-znachenie funcii arcctg(x), ch - element ryada} begin ch:=1/3*x*x*x; {pervii element ryada} y:=-pi/2; n:=1; y:=y+1/x; while (abs(ch)>E) do begin ch:=ch*(-1)*(2*n+1)/((2*n+3)*x*x);{vichislaem ocherednoi element ryada} {if (n mod 2) <> 0 then ch:=-ch;} y:=y+ch; inc(n); {podschitivaem kol-vo vicheslennih elementov ryada} if (n>maxIter) then begin write('ryad rashoditsa!'); break; end; end; getY:=y; end; begin clrscr; writeln('vvedite x1,x2,dX,E:'); readln(x1,x2,dX,E); if (x1>=(-pi/2)) and (x1<=(pi/2)) and (x2>=(-pi/2)) and (x2<=(pi/2)) and (x1<>0) and (x2<>0) then {sootvetvuet oblasti dop. znachenii ? stroim tablicu} begin writeln('arcctg(x)------------------------------'); writeln('|X |Y |N'); {shapka tablici} while (x1<=x2) do begin writeln('|',x1,'|',getY(x1,e),'|',n ); {postroenie tablici znachenii ot x1 do x2 s shagom dX} x1:=x1+dX; end; writeln('---------------------------------------'); end else writeln('nevernie dannie x1<=x2,x=[-pi/2;pi/2]!!'); begin writeln('nazmyte enter'); readln; end; end. |
26.10.2008, 21:25 | #4 |
Пользователь
Регистрация: 26.10.2008
Сообщений: 40
|
условие было приложено в первом сообщении, в рисунке.
|
26.10.2008, 21:50 | #5 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Во вложении нормальная формула и нормальная программа, которая правильно считает arctg x на интервале [-1.1]. Ваша формула считает совсем не то и разбираться я с ней не хочу.
|
26.10.2008, 21:56 | #6 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Еще хочу добавить про ошибочность Вашей формулы. pi/2 это угол, а мы к нему прибавляем или вычитаем тангенс угла. (x - это тангенс угла). Где же логика? Это, извините за грубое сравнение, как складывать количество коров с их надоями.
P.S. Хоть и не очень понимаю в этом, но поведение функции на данном интервале, напоминает функцию ctg x. Последний раз редактировалось puporev; 26.10.2008 в 22:06. |
26.10.2008, 22:19 | #7 |
Пользователь
Регистрация: 26.10.2008
Сообщений: 40
|
мм, действительно, я правда считал, что pi/2 это 1.57.
Огромное вам спасибо! Но моя форумла действительно кривая...полностью с вами согласен.я даже в скалькулятором не могу посчитать арктангенс по ней....ваша правда, тоже не компилится)) Но это именно мои бока, у меня стоит х64 ось, а на ней работает только паскаль абц. Надеюсь на защите прокатит. Не могли бы вы сказать каким компилятором пользовались? |
26.10.2008, 22:27 | #8 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Turbo Pascal 7.0. Но на АВС у меня все точно также, АВС лего компилирует программы, сделанные на Турбо.
|
26.10.2008, 22:33 | #9 |
Пользователь
Регистрация: 26.10.2008
Сообщений: 40
|
А у меня вот какая ошибка
Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.IO.DirectoryNotFoundExceptio n: Не удалось найти часть пути "C:\Users\������\Desktop\ARCTG" . в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в System.IO.Directory.SetCurrentDirec tory(String path) в PascalABCCompiler.Compiler.Compile( )' на сколько я понял у меня плюханные дллки компилятора стоят. |
26.10.2008, 22:40 | #10 |
Пользователь
Регистрация: 26.10.2008
Сообщений: 40
|
Все я нашел и уничтожил ошибку, огромное вам спасибо! надо было скачать и докинуть дллки поддержки типа увеличенного вещественного числа. И еще несколько неизвестных длл), еще раз огромное спасибо!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Циклы на Паскале. | vlad1991 | Помощь студентам | 34 | 22.06.2012 13:13 |
Циклы! | vlad1991 | Паскаль, Turbo Pascal, PascalABC.NET | 15 | 28.10.2008 22:07 |
Циклы (Pascal) | Дима82 | Помощь студентам | 4 | 07.06.2008 17:07 |
Итерационные циклы | Андрюха из ПХТТ | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 14.02.2008 15:49 |