Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2011, 15:08   #1
user100
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 11
По умолчанию Ошибка в программе

Дано действительное число х. Вычислить на паскале:
x-((x^3)/3!)+((x^5)/5!)-((x^7)/7!)+((x^9)/9!)-((x^11)/11!)+((x^13)/13!).

Код:
uses crt;
var a,n:integer;
     x,s:real;
begin
  clrscr;
  write('x=');
  readln(x);
  n:=1;
  a:=1;
  s:=0;
  while n<=13 do
   begin
   s:=s+x/a;
   x:=x*sqr(x)*(-1);
   n:=n+2;
   a:=a*n*(n-1);
   end;
  writeln('s=',s:3:0);
end.
программа выдает ошибку:"floating point overflow" и указывает на эту строку
Код:
x:=x*sqr(x)*(-1);
.
Как можно исправить?

Последний раз редактировалось user100; 17.04.2011 в 15:16.
user100 вне форума Ответить с цитированием
Старый 17.04.2011, 18:06   #2
VKorablev
Форумчанин
 
Аватар для VKorablev
 
Регистрация: 14.04.2011
Сообщений: 126
По умолчанию

попробуйте заменить эту строку на следующую :
Код:
x:=x*x*x*(-1);
Нам больше не нужно смотреть на мир сквозь замочную скважину 64Кб сегмента (с) ВалИк
VKorablev вне форума Ответить с цитированием
Старый 17.04.2011, 21:08   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

1) 7 раз в цикле возводится число в куб, итого возводится в 3^7 = 2187 степень - происходит переполнение из-за неверного подхода
2) факториал 13 > 6 млрд, что не влезает не только в integer, но и в longint.
3) цикл while выполняет лишнии итерации по вычислению даже факториала 15.
4) форматированный вывод плохой - не показывает числа после запятой

Внёс минимальные изменения для работоспособности:
Код:
uses crt;
var a,n:real;
     z,x,s:real;
begin
  clrscr;
  write('x=');
  readln(x);z:=x;
  n:=1;
  a:=1;
  s:=0;
  while n<=13 do
   begin
   s:=s+z/a;
   z:=z*sqr(x)*(-1);
   n:=n+2;
   a:=a*n*(n-1);
   end;
  writeln('s=',s:3:10);
end.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе T@tali Паскаль, Turbo Pascal, PascalABC.NET 4 28.02.2011 10:32
Ошибка в программе. ZeroCount Помощь студентам 2 18.12.2010 20:33
Ошибка в программе. v1le Общие вопросы C/C++ 4 04.12.2010 21:17
Ошибка в программе. v1le Помощь студентам 3 26.10.2010 17:00
Ошибка в программе Vladislav514 Софт 0 13.07.2010 15:16