До некоторого n вычисляемое значение факториала просто неправильное, а далее, когда в факториале наберётся достаточное количество делителей двоек, Ваша функция factorial() вообще будет возвращать ноль,
Так и есть. Тип integer (в дельфях) -- четырёхбайтовый, и как раз
нуля ещё не даёт (хотя даёт, конечно, чёрт-те что вместо истинного факториала, последнее правильное значение получается для
), а
, тем более
-- уже возвращает ноль.
Но главная проблема, конечно, в нелепости алгоритма. Во-первых, как уже было сказано
y_nikolaenko, степенные ряды надо суммировать так:
Код:
y:=x;
S:=y;
for i:=1 to n do begin
y:=y * <соответственно> * sqr(x);
S:=S + y;
end;
(и, кстати, исходный вид разложения арксинуса гораздо приятнее для программирования, чем выражение с факториалами).
А во-вторых, нормальные люди не смешивают вычислительные и интерфейсные фрагменты в одну кучу. Какой ещё Button-то?... При чём тут вообще Button?... Выделите вычислительную часть в отдельную процедуру -- и ссылайтесь на неё по мере необходимости.
Ну и, конечно, выводить текст программы без отступов -- неприлично. Пользуйтесь тегом [ code].