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

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

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

 
 Ответить  Открыть новую тему 
> Exp(x), Решить с помощью цикла
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

P.S. А по-хорошему надо бы и X описывать как вещественное.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

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

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





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

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


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

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

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

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

а типо логарифм от неположительного числа не существует да?
а как тогда в степень возводить то еще число?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 20.04.2024 21:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name