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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выводит ошибку, Не используя стандартные функции... 
:(
    Опции темы
KaTeNoK
  Дата 27.12.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задание:
Не используя стандартные функции, за исключением ABS, вычислить с точностью E (E>0) y=x+x^3/3!+x^5/5!+...+x^(2n+1)/(2n+1)!

мое решение вот такое:
Код

PROGRAM Z_4;
 USES
  CRT;
 VAR
  CH,Eps,X,Y:REAL;
  ZN,N:INTEGER;
 BEGIN
  CLRSCR;
  WRITELN ('Vvedite X, Eps');
  READ (X,Eps);
  N:=1;
  Y:=X;
  ZN:=1;
  REPEAT
   CH:=EXP((2*N+1)*LN(ABS(X)));
   IF X<0
    THEN
     CH:=CH*(-1);
   ZN:=ZN*(2*N+1)*(2*N);
   Y:=Y+CH/ZN;
   N:=N+1
  UNTIL ABS(Y)<Eps;
  WRITE ('Y=', Y:0:5);
  READKEY
 END.


Но он мне выдает ошибку 200 (деление на ноль). Что я неправильно сделала???  smile 

Это сообщение отредактировал(а) KaTeNoK - 27.12.2006, 16:14
PM MAIL   Вверх
skyboy
Дата 27.12.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



1. на какой строке ошибка?
2. оформляй код при помощи кнопки "код" справа вверху.
3. отключи CRT - возможно, проблемы из его использования
PM MAIL   Вверх
KaTeNoK
Дата 27.12.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



1. на 20-ой
2. оформила (простите, первый раз  smile )
3. раньше с ним проблем не было, написала кучу программ, рнаьше могла с этим бороться, а в этот раз не получается smile

Добавлено @ 16:21 
отключила, все равно выдает эту ошибку
PM MAIL   Вверх
skyboy
Дата 27.12.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата

  UNTIL ABS(Y)<Eps;

    я не думаю, что "с точностью до Е" - это то же самое, что "пока сумма ряда не станет меньше Е". тем более, что при Х>E сумма никогда не станет меньше Е. а по ошибке деления на ноль вылетает, потому что для ZN ты используешь тип, ограниченный 37767 - рано или поздно, он у тебя переполняется(из-за ошибки в условии выхода из цикла). Переполняется раз, другой, третий... рано или поздно, после преполнения оказывается равным нулю.  думаю, там можно поставить "UNTIL abs(ch/zn)< e".

Добавлено @ 17:05 
Цитата(KaTeNoK @  27.12.2006,  15:16 Найти цитируемый пост)
2. оформила (простите, первый раз

ничего, ничего. если бы ты ещё нажала не на слово "код", а на стрелочку чуть правее - можно было бы выбрать конкретный язык программирования. тогда бы ещё и ключевые слова синтаксиса подсвечивались бы --- так намного удобнее читать текст. особенно чужих программ  smile 
PM MAIL   Вверх
Zero
Дата 27.12.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Стандартный и самый понятный способ определения точности, это когда разница между предыдущим и текущим значением сравниваеться с точностью:
Код

PROGRAM Z_4;
 USES
  CRT;
 VAR
  CH,Eps,X,Y:REAL;
  ZN,N:longint;
 BEGIN
  CLRSCR;
  WRITELN ('Vvedite X, Eps');
  READ (X,Eps);
  N:=1;
  Y:=X;
  ZN:=1;
  Repeat
    n:=n+2;
    zn:=zn*(n)*(n-1);
    ch:=y;
    y:=y+(exp(n*ln(x))/zn)
  Until ABS(y-ch)<Eps;
  WRITE ('Y=', Y:0:5);
  READKEY
 END.

PM MAIL ICQ   Вверх
volvo877
Дата 31.12.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(KaTeNoK @  27.12.2006,  15:10 Найти цитируемый пост)
Не используя стандартные функции, за исключением ABS
Exp + Ln - все-таки, ПОКА являются стандартными...

Код
var
  n, znam: longint;
  Eps, X, Y, curr, power: real;
begin
  write('X = '); readln(X);
  write('Eps = '); readln(Eps);
  n := 1; power := X;
  y := X; znam := 1;
  repeat
    n:=n+2;
    znam:=znam*(n)*(n-1);
    curr := y;
    power := power * X * X; { <-- Нет стандартных функций }
    y := y + power / znam;
  until abs(curr - y) < Eps;

  writeln('y = ', y:0:5);
  readln;
end;


Это сообщение отредактировал(а) volvo877 - 31.12.2006, 09:46
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.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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