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

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

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

 
 Ответить  Открыть новую тему 
> Вычислить 20 значений функций.
Crazy R
сообщение 6.12.2009 17:39
Сообщение #1





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

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


Вобщем задача такая:
Для аргумента , изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций.
Вычислить значения функций f1(x) и f2(x) для значений аргументов, указанных в вариантах заданий № 1 – 30 по первой работе. Функцию f2(x) вычислить для ряда точностей . Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. Результаты расчетов свести в следующую таблицу.
Прикрепленное изображение

И вот что я тут нарешал:


uses
crt;

Const
eps1 = 0.01; { Точность 10-2}
eps2 = 0.01; { Точность 10-3 }
eps3 = 0.001; { Точность 10-4 }
a = -0.6; { Начальное значение Х}
b = 0.05; { Шаг}
N = 20; { Количество значений функции }
Var
k1, k2, k3, i: Integer; {Вспомогательные переменные}
f1, f2_1, f2_2, f2_3, step, slag, x: Real;

begin
ClrScr;
{Рисуется шапка таблицы}
writeln('___________________________________________________________');
writeln('| | | e=0.01 | e=0.001 | e=0.0001 |');
writeln('| x | f1(x) |----------|-----------|------------|');
writeln('| | | f2(x)| N | f2(x) | N | f2(x) | N |');
writeln('|_______|_____________|______|___|_______|___|________|___|');
x := a; {Начальное значение Х}
for i:=1 to N do
f1:=((exp(3*ln(x)))/12)+(((exp(4*ln(x)))-1)/16)*abs(ln((1+x)/(1-x))-2*arctan(x));
step:=x; {Начальное значение степени Х}
f2_1:=0; {Начальное значение функции f2_1}
k1:=0;
repeat {Итерационный цикл для точности 10-2}
inc(k1);
step:=Exp(ln(x)*(4+K1+7)); {Наращивается степень}
slag:=step/((4*k1+3)*(4*k1+7)); {Считается очередное слагаемое}
f2_1:=f2_1+slag; {Считается значение f2_1}
until abs(slag)<=eps1; {Выход из цикла, когда слагаемое становится меньше точности 10-2}
f2_2:=f2_1;
k2:=k1;
repeat {Итерационный цикл для точности 10-3}
inc(k2);
step:=Exp(ln(x)*(4+K2+7)); {Наращивается степень}
slag:=step/((4*k2+3)*(4*k2+7)); {Считается очередное слагаемое}
f2_2:=f2_2+slag;
until abs(slag)<=eps2; {Выход из цикла, когда слагаемое становится меньше точности 10-3}
f2_3:=f2_2;
k3:=k2;
repeat {итерационный цикл для точности 10-4}
inc(k3);
step:=Exp(ln(x)*(4+K3+7)); {Наращивается степень}
slag:=step/((4*k3+3)*(4*k3+7)); {Считается очередное слагаемое}
f2_3:=f2_3+slag;
until abs(slag)<=eps3; {Выход из цикла, когда слагаемое становится меньше точности 10-4}
{ Вывод результатов}
writeln('| ', x:5:2,' | ',f1:12:9,'| ',f2_1:5:2,'| ',
k1:2,'| ',f2_2:6:3,'| ',k2:2,'| ',f2_3:7:4,'| ', k3:2,'|');
x:=x+b;

{ завершение таблицы }
write('-------------------------------------------------------------------');

readkey;
end.


Выдаёт ошибку.help me.

Сообщение отредактировано: Crazy R - 6.12.2009 17:42
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.12.2009 17:46
Сообщение #2


Гость






26 строка:
Цитата
f1:=((exp(3*ln(x)))/12)+(((exp(4*ln(x)))-1)/16)*abs(ln((1+x)/(1-x))-2*arctan(x));
- проблемная. Ln(X) при X = -0.6 даст тебе ошибку. Теперь ты знаешь, ГДЕ и ПОЧЕМУ возникает ошибка. Переделывай.
 К началу страницы 
+ Ответить 
Crazy R
сообщение 6.12.2009 17:52
Сообщение #3





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

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


Цитата(volvo @ 6.12.2009 16:46) *

26 строка: - проблемная. Ln(X) при X = -0.6 даст тебе ошибку. Теперь ты знаешь, ГДЕ и ПОЧЕМУ возникает ошибка. Переделывай.

можно заменить эту строку такой но
 ((x*x*x)/12+0.0625*((x*x*x*x)-1))*((Ln((1+x)/(1-x)))-(arctan(x)));

из-за (1+x)/(1-x) всеравно получиться ошибка.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.12.2009 18:33
Сообщение #4


Гость






Цитата
из-за (1+x)/(1-x) всеравно получиться ошибка.
Неправда, не будет там ошибки, отрицательного значения под логарифмом нет. Ошибка будет ниже по тексту, там, где ты опять возводишь X в степень 4*k1+3. Возводи по-другому, не через эту формулу.
 К началу страницы 
+ Ответить 
Crazy R
сообщение 6.12.2009 19:32
Сообщение #5





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

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


Цитата(volvo @ 6.12.2009 17:33) *

Неправда, не будет там ошибки, отрицательного значения под логарифмом нет. Ошибка будет ниже по тексту, там, где ты опять возводишь X в степень 4*k1+3. Возводи по-другому, не через эту формулу.


smile.gif ну да)
Спасибо буду пробовать завтра (сегодня уезжаю:() отпишу как что получиться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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