IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Exp(x), Решить с помощью цикла
strelec025
сообщение 18.09.2010 15:59
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Целью решения задачи, приведенной в табл. 3, является вычисле-
ние заданной функции с некоторой погрешностью EPS путем вычисле-
ний указанного бесконечного ряда. Величину EPS изменять в диапазоне
0,01..0,00001 пpи одном значении аpгумента.
Для проверки правильности вычислений сpавнить
значение полученной суммы pяда со значением библиотечной функции.

Прикрепленное изображение

Я какбы написал программу, которая сравнивает числа с точностью до сотых, но вот при x=1 и x=2 проблем не возникает, а как x=3 у меня выходит ошибка то что на ноль делить нельзя.
Помогите пожалуйста.

var s,x,i:integer; y:real;
begin
writeln('BBeDuTe cTeIIeHb EkcIIoHeHTa');
readln(x);
y:=1+x; {na4alo funkcii}
i:=1; {stavim stepen 4isla x=1}
s:=1; {factorial = 1}
repeat
i:=i+1; {yveli4ivaem stepen 4isla x}
s:=s*i; {vi4islyaem factorial do i! }
y:=y+exp(ln(x)*i)/s; {= y+x^i/i!}
until trunc(y*100)=trunc(exp(x)*100); {sravnivayem 2 cifri posle zapyatoi y 4isel}
writeln('y= ',y); {vivodim priblizhenoe zna4enie s to4nost'u do sotih}
writeln('exp(x)= ',exp(x)); {vivodim funkciu E^x}
readln
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.09.2010 16:32
Сообщение #2


Гость






Цитата
Помогите пожалуйста.
Пожалуйста. Тебе явно не хватает емкости типа Integer, попробуй описать переменную s не как Integer, а как Real, т.е.:
var x, i: integer; s, y: real;
, что получится?

P.S. А по-хорошему надо бы и X описывать как вещественное.
 К началу страницы 
+ Ответить 
strelec025
сообщение 18.09.2010 16:38
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 18.09.2010 17:32) *

Пожалуйста. Тебе явно не хватает емкости типа Integer, попробуй описать переменную s не как Integer, а как Real, т.е.:
var x, i: integer; s, y: real;
, что получится?

P.S. А по-хорошему надо бы и X описывать как вещественное.

О, спасибо. Теперь заработало.
Ну теперь у меня еще 2 вопроса есть:
1. Зачем X как вещественное?
2. Как сделать чтобы считал экспонент, при неположительной степени?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.09.2010 17:06
Сообщение #4


Гость






Цитата
1. Зачем X как вещественное?
Потому что областью определения показательной функции ax (ex - ее частный случай) является множество действительных чисел. Понимаешь, действительных, а не целых...

А вообще мне кажется, что твоя задача решается вот так: Как самому написать функцию Exp(x)?

Цитата
Как сделать чтобы считал экспонент, при неположительной степени?
В программе по ссылке нужно кое-что добавить. Подумай, что именно...
 К началу страницы 
+ Ответить 
strelec025
сообщение 18.09.2010 17:18
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Я незнаю пока про функции ничего и поэтому строку
Код
function _Exp(x: double): double;
не понял.

А вообще нам нужно решить эту задачу, как раз примерно так как я изначально написал. Ну может попроще как-то если еще возможно.

Добавлено через 9 мин.
Цитата(volvo @ 18.09.2010 18:06) *

...В программе по ссылке нужно кое-что добавить. Подумай, что именно...

а типо логарифм от неположительного числа не существует да?
а как тогда в степень возводить то еще число?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 23.09.2010 19:19
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> y:=y+exp(ln(x)*i)/s; {= y+x^i/i!}

Я категорически протестую. Использовать экспоненту для вычисления экспоненты - это не решение, это читерство.
Тогда проще сразу написать exp(x).
x^i считай также, как i!, то есть наращивая в каждой итерации на новый сомножитель.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 5.06.2024 11:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"