|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
![]() Просмотрев предыдущую программу. многое не поняла. Если у кого-то есть возможность написать не просто прогу, а добавить комментарии. Заранее спасибо. |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите данные темки и узнайте больше Тоже ведь проблема... Помогите с задачей. Ряд Тейлора. |
![]() |
#2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Лена, а вот давайте начнем именно с этого. Чего Вы не поняли? Задавайте вопросы, попробуем разобраться.
В Вашем случае программа выглядит вот так: Код:
CONST Eps=0.0001; VAR Xbeg,Xfin,DX,SUM,X:REAL; N:WORD; Nx,i:INTEGER; FUNCTION ArcCos(Xa:Extended):Extended; begin if ROUND(Xa*10000000)=10000000 then ArcCos:=0 else if ROUND(Xa*10000000)=-10000000 then ArcCos:=Pi else ArcCos:=(Pi/2)-ArcTan(Xa/SQRT(1-Xa*Xa)); end; PROCEDURE SUMS(Xs:REAL; Var S:REAL; Var Ns:WORD); VAR a:REAL; Begin a:=Xs; S:=Xs; Ns:=0; Repeat Inc(Ns); a:=a*SQR(Xs)*(2*Ns-1)*(2*Ns-1)/(2*Ns)/(2*Ns+1); S:=S+a; Until Abs(a)<Eps; S:=Pi/2-S; End; BEGIN Write('Xbeg= '); ReadLn(Xbeg); Write('Xfin= '); ReadLn(Xfin); Write('DX= '); ReadLn(DX); WriteLn; WriteLn(' Results of calculation:'); WriteLn(' X SUM N ArcCos(X)'); WriteLn; Nx:=ROUND((Xfin-Xbeg)/DX); X:=Xbeg; For i:=0 to Nx do begin X:=Xbeg+DX*i; SUMS(X,SUM,N); WriteLn(X:8:5,' ',SUM:7:5,' ',N:3,' ',ArcCos(X):7:5); end; ReadLn; END. |
![]() |
![]() |
![]() |
#4 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
![]()
Вот мой код. Мне кажется, что несмотря на длину, он более удачен.
PHP код:
|
![]() |
![]() |
![]() |
#5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Нет, Лена - так дело не пойдет!
Весь диапазон допустимых значений аргумента функции (х) - от -1 до +1 , а Вы задаёте ему тип Integer! Это прежде всего. Из мелочей - нет нужды вводить численное значение константы "пи" - в Паскале есть стандартная функция Pi, отдающая это значение с высокой точностью. В других аспектах программы не разбирался. А что касается "удачен"-"неудачен" - так это дело вкуса. Мне мой больше нравится. Хотя там украшательства минимизированы (псевдографика и пр.). Но, повторяю, у каждого программиста свой стиль. |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
![]()
Есть нужда вводить Пи в константу, дабы далее укоротить программу, если заметите, что в константе добавлены /2.
И, к сожалению, для преподавателя важна графика, т.к. учимся мы подготавливать разнообразные программы для лёгкого обращения любым пользователем... |
![]() |
![]() |
![]() |
#7 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]() Цитата:
itog := pi2-sumdrob; заменить строкой itog := pi/2-sumdrob; и при этом никакую константу не вводить. Но это так, к слову - хотите со своей константой - Ваше дело). Куда важнее другое. 1. Еще раз обращаю внимание - Вы считаете значения функции arccos(x). Эта функция определена в интервале значений х -1 ≤ х ≤ +1 а потому использование целочисленных (integer) форматов переменных x, x1, xk, dx АБСОЛЮТНО НЕДОПУСТИМО. 2. Вы совершенно неправильно трактуете смысл величины эпсилон (ε). Эта величина никакого отношения к форматам вывода чисел не имеет, а определяет, в конечном итоге, количество членов ряда, которое необходимо взять, чтобы результат был вычислен с заданной точностью (поэтому в моей программе и предусмотрен, для сравнения, вывод в последней колонке ТОЧНОГО значения функции arccos). По сути ε - это ни что иное, как значение остаточного члена ряда Тейлора. Почитайте в учебнике по матанализу, что есть остаточный член в форме Коши или в форме Пеано. В первом приближении (как сделано в моей программе) ряд можно прервать, когда следующий член разложения становится по абсолютной величине меньшим, чем наперед заданное ε, например ε=0.0001. И вообще, посмотрев внимательнее Вашу программу, пришел я к выводу, что Вы не очень четко разобрались в том, что такое ряд Тейлора, в частности Вы явно путаете переменную x с индексом суммирования n. |
|
![]() |
![]() |
![]() |
#8 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
![]()
Я не путаю. программа проверена. множество значений подставлено и просчитано. программа выдаёт верные ответы, что и требовалось.
И... согласна - у каждого свой стиль. |
![]() |
![]() |
![]() |
#10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Дык... из головы, вестимо. А что в ней странного или непонятного? Если интервал от a до b разбит на N равных промежутков, то величина каждого промежутка D есть (b-a)/N; в свою очередь, если мы знаем D и хотим определить N, то имеем N=(b-a)/D. Округление (Round) там применено потому, что N должно быть целым.
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|