Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Факториалы, Кто хочет вспомнить школу? 
:(
    Опции темы
Zlo
Дата 13.6.2005, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: нет
Всего: 1



Ну народ помогайте плиз!
Дали мне значится такую вот задачку:


Даны действительные числа x, E(Эпселен) (x<>0,E>0).
Вычислить с точностью E(Эпселен):

--Resize_Images_Alt_Text--

Я сделал так: (но училка сказала что это неправильно)
Код

Program lab4;
Uses CRT;
{факториал}
var
   h1,st,k,i:integer;
   zn1,zn2,chisl,x,E,z,zn:Real;
   key:Char;
begin
 z:=0
 h1:=-1;
 st:=1;
 zn1:=1;
 zn2:=1;
 writeln('Введите x,E(x<>0,E>0)');
 Readln(x,E);
 repeat
     h1:=h1*(-1);
     chisl:=h1*(Exp(st*ln(x/2)));
     if k=0 then zn1:=1
     else begin
       for i:=1 to k-1 do begin
       zn1:=zn1*i;
       end;
     end;
     for i:=1 to k do zn2:=zn2*i;
     zn:=zn1*zn2;
     z:=z+(chisl/zn);
     st:=st+2;
 until z<E;
 writeln(z:6:3);
 key:=readkey;
 end.



Помогите пожалуста, срочно надо!

Это сообщение отредактировал(а) Zlo - 13.6.2005, 01:23
PM MAIL   Вверх
Crot
Дата 13.6.2005, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 31.1.2004

Репутация: нет
Всего: 3



Вычислить с точностью E(Эпселен) - означает, что последовательность должна быть бесконечно убывающей и последний член, взятый по модулю, должен быть меньше чем E.
А у тебя в условии until почему-то сумма меньше E.

Ты эту задачу не то что неправильно, ты её ещё и не оптимизированно сделал.
В таких задачах важна математическая часть.

Сначала находишь первый член последовательности (при k=0).
Он равен = x/2.

Берёшь k-ый член последовательности и делишь на (k-1)-ый.
У тебя должно получиться = -(x*x)/(4*k*(k+1)).
То есть a[k] = a[k-1] * (-(x*x)/(4*k*(k+1)))

Вот после этого пишешь программу:
Код

Program lab4;
Uses CRT;
{факториал}
var
   k:integer;
   x,E,z,Ak:Real;
   key:Char;
begin
 z:=0;
 k:=0;
 writeln('Введите x,E(x<>0,E>0)');
 Readln(x,E);
 Ak:=x/2;
 while abs(Ak)>E do begin
     z:=z+Ak;
     k:=k+1;
     Ak:= Ak*(-x*x/(4*k*(k+1)));
 end;
 writeln(z:6:3);
 readkey;
end.


Это сообщение отредактировал(а) Crot - 13.6.2005, 04:06
PM MAIL WWW ICQ   Вверх
Zlo
Дата 13.6.2005, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: нет
Всего: 1



Crot
Я пока что-то неочень все это понял, но если прокатит то отпишусь! А может у кого еще есть какие мысли?
PM MAIL   Вверх
Fedor
Дата 13.6.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Crot прав вроде. smile


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Zlo
Дата 13.6.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: нет
Всего: 1



А можно ли задание упростить так чтобы было в разы проще а физуально особо не отличалось?
Может где степень убрать или факториал?
PM MAIL   Вверх
TP@MB@Y
Дата 13.6.2005, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



Надо проверять такое условие: abs(Zk-1+Zk)<E - в скобках плюс потому что у смежных членов разные знаки
Т.е. последущий член должен очень мало отличаться от предыдущего (не больше чем на эпсилон)
PM   Вверх
Zlo
Дата 14.6.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: нет
Всего: 1



Crot
Срасибо тебе! Работу вроде как приняли!

Всем остальным тоже спасибо за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.