ПОМОГИТЕ ИСПРАВИТЬ ЗАДАЧИ

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
повстанец
Сообщения: 18
Зарегистрирован: 13 мар 2008, 19:50

1.Вот простейшая, но под знаком логарифма может оказаться отрицательное число :confused:
Как можно исправить?
program third;
const a=0.5;
b=-3;
Dt=0.45;
var z,t: real;
begin
t:=-2;
while (t<=0.5) do
begin
z:=(1/cos(t)+1/exp(3*ln(cos(t*t))+t)/exp(2*t*b));
writeln('t=',t:4:2,' ', 'z=',z:4:1);
t:=t+Dt;
end;
end.

2.Не пойму как вычислить сумму(факториал) по формуле
1+ exp(-1*ln(i))*exp((2*i)*ln(x))/(2*i+1). Пробовал так, но с большими числами выдает ошибку :mad:

program labfivetwo;
var a, b, x,f, s:real;
n,i:integer;
begin
write('введите x=');
read(x);
write('введите n>=1. n=');
read(n);
f:=1;
for i:=1 to n do
begin
if odd(i) then a:=-1
else a:=1;
b:=exp(-1*ln(i))*exp((2*i)*ln(x))/(2*i+1);
s:=f+a*b;
end;
writeln('summa',s:8:5);
end.

Заранее спасибо за помощь!
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

интересно мыслите, а упростить выражение не пробовали, из квадрата отрицательное число оригинально, скорее на 0 поделите.
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

1. так допустимый диапазон еще никто не отменял
1/cos(t)+1/exp(3*ln(cos(t*t))+t)/exp(2*t*b)=1/cos(t)+e(2*b)/exp(3*ln(cos(t*t)))=
=1/cos(t)+exp(2*b-3*ln(cos(t*t))

2. если не секрет откуда такая формула? так exp(2*i*ln(x)) - это очень не маленькое число
exp(-1*ln(i))*exp((2*i)*ln(x))/(2*i+1)=exp((2*i)*ln(x))/(i*(2*i+1))=x^(2*i)/(2*i^2+i) - это что-то новое для факториала, покрайне мере для меня
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):но под знаком логарифма может оказаться отрицательное число
Ты сам ответил на свой вопрос, делай проверку cos(t*t) > 0
&quot писал(а): Пробовал так, но с большими числами выдает ошибку
На большие числа не расчитывай, максимум что ты можешь сделать здесь - заменить тип real на extended. Читай инфу по этим типам - там написано насколько большие числа они могут содержать.
It's a long way to the top if you wanna rock'n'roll
повстанец
Сообщения: 18
Зарегистрирован: 13 мар 2008, 19:50

Спасибо всем! Сегодня вот такие мысли пришли в голову:
Насчет 1 задачи я зря паниковал. Сегодня решил сделать все гениально и просто:
косинус в третей степени есть косинус в квадрате, умноженный на косинус.
Следовательно, вместо ln применяем sqr. Все заработало!!
повстанец
Сообщения: 18
Зарегистрирован: 13 мар 2008, 19:50

Насчет второй задачи: поставил тип extended. Теперь числа считаются гораздо большие. НО! прога не выдержала проверку в Маткаде(

Вместо формулы факториала приведу условия всей задачи:
Необходимо вычислить сумму
1-x^2/3!+x^4/5!-x^6/7!+...

Составил формулу: 1+ exp(-1*ln(i))*exp((2*i)*ln(x))/(2*i+1)!

Может сам код в корне неправильный? Поиогите разобраться..
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

повстанец писал(а):Насчет второй задачи: поставил тип extended. Теперь числа считаются гораздо большие. НО! прога не выдержала проверку в Маткаде(

Вместо формулы факториала приведу условия всей задачи:
Необходимо вычислить сумму
1-x^2/3!+x^4/5!-x^6/7!+...

Составил формулу: 1+ exp(-1*ln(i))*exp((2*i)*ln(x))/(2*i+1)!

Может сам код в корне неправильный? Поиогите разобраться..
а не проще ли оттолкнуться от мысли:
y0=1
y1=-y0*x^2/(2*3)
y2=-y1*x^2/(4*5)
y3=-y2*x^2/(6*7)
....
y(i)=-y(i-1)*x^2/[(2*i)*(2*i+1)]
Ответить