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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2016, 23:51   #1
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
Стрелка Вычисление функции (Pascal)

Задача:

Код программы:
Код:
function f(x: integer): integer;
	var i,s: integer;
	begin
		s:=1;
		for i:=1 to x do s:=s*i;
		f:=s;
	end;
function s(x: real): real;
	var 
		k: integer;
		a,b: real;
	begin
		a:=0; b:=0;
		for k:=1 to 10 do a:=a+((exp(ln(x) * (2*k+1)))/f(2*k+1));
		for k:=1 to 10 do b:=b+((exp(ln(x) * (2*k)))/f(2*k));
		s:=a / b;
	end;
var x: real;
begin
	read(x);
	writeln(s(x));
end.
Вывод:
Код:
Runtime error 200 at $000000000040027D
  $000000000040027D
  $0000000000400367
  $0000000000400180
В чем ошибка? Как читать такие Runtime Error?
lloudb вне форума Ответить с цитированием
Старый 09.11.2016, 00:05   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Сначала посмотрите, что такое Integer:
-2147483648..2147483647
А 21! = 5.10909E+19

В Integer влезет максимум факториал 12

А вообще - лучше последующее слагаемое вычислять через предыдущее, не вычисляя факториалы и степени.
type_Oleg вне форума Ответить с цитированием
Старый 09.11.2016, 00:18   #3
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
Плохо

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Сначала посмотрите, что такое Integer:
-2147483648..2147483647
А 21! = 5.10909E+19

В Integer влезет максимум факториал 12

А вообще - лучше последующее слагаемое вычислять через предыдущее, не вычисляя факториалы и степени.
Поменял на тип real - ошибки те же.
lloudb вне форума Ответить с цитированием
Старый 09.11.2016, 02:06   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот так наверное:
Код:
program Pr_lloudb;

const NN=10;

function fun1(x:Real):Real;
var t,s:Real;
    i:Integer;
begin
 t:=x*x*x/(2*3);
 s:=t;
 for i:=1 to NN-1 do
  begin
   t:=t*x*x/((2*i+2)*(2*i+3));
   s:=s+t;
  end;
 fun1:=s;
end;
function fun2(x:Real):Real;
var t,s:Real;
    i:Integer;
begin
 t:=x*x/2;
 s:=t;
 for i:=1 to NN-1 do
  begin
   t:=t*x*x/((2*i+1)*(2*i+2));
   s:=s+t;
  end;
 fun2:=s;
end;
function fun3(x:Real):Real;
begin
 fun3:=fun1(x)/fun2(x);
end;

var x:Real;
begin
 ReadLn(x);
 WriteLn(fun3(x));
 ReadLn;
end.
type_Oleg вне форума Ответить с цитированием
Старый 09.11.2016, 13:51   #5
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
Радость

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вот так наверное:
Код:
program Pr_lloudb;

const NN=10;

function fun1(x:Real):Real;
var t,s:Real;
    i:Integer;
begin
 t:=x*x*x/(2*3);
 s:=t;
 for i:=1 to NN-1 do
  begin
   t:=t*x*x/((2*i+2)*(2*i+3));
   s:=s+t;
  end;
 fun1:=s;
end;
function fun2(x:Real):Real;
var t,s:Real;
    i:Integer;
begin
 t:=x*x/2;
 s:=t;
 for i:=1 to NN-1 do
  begin
   t:=t*x*x/((2*i+1)*(2*i+2));
   s:=s+t;
  end;
 fun2:=s;
end;
function fun3(x:Real):Real;
begin
 fun3:=fun1(x)/fun2(x);
end;

var x:Real;
begin
 ReadLn(x);
 WriteLn(fun3(x));
 ReadLn;
end.
В выражение присутствует степень и факториал. Где вы вычисляете их?

Последний раз редактировалось lloudb; 09.11.2016 в 13:55.
lloudb вне форума Ответить с цитированием
Старый 09.11.2016, 14:08   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от lloudb Посмотреть сообщение
В выражение присутствует степень и факториал. Где вы вычисляете их?
Нигде. Я вычисляю последующее слагаемое через предыдущее.
type_Oleg вне форума Ответить с цитированием
Старый 09.11.2016, 15:27   #7
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
Вопрос

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Нигде. Я вычисляю последующее слагаемое через предыдущее.
Не понимаю)
Объясните пожалуйста, как Вы решили
lloudb вне форума Ответить с цитированием
Старый 09.11.2016, 15:34   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

f(k) = x^(2k+1)/(2k+1)!
f(k-1) = x^(2k-1)/(2k-1)!
f(k)/f(k-1) = x^(2k+1)*(2k-1)!/((2k+1)!*x^(2k-1)) = x^2/2k/(2k+1) -->

f(k) = f(k-1)*x^2/2k/(2k+1)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(c++) вычисление функции Uefa Помощь студентам 4 22.05.2014 09:34
Вычисление функции tp7 Помощь студентам 11 09.12.2012 16:24
Вычисление функции Alina111 Общие вопросы C/C++ 1 18.03.2012 18:02
вычисление значения функции и переменных, вычисление площади треугольника, определение расстояния между точками на турбо паскале _4Alex4_ Помощь студентам 2 14.12.2011 01:43
Программа на вычисление функции (Pascal) xRJ10 Помощь студентам 1 23.12.2009 17:57