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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2011, 20:02   #1
narco3
Пользователь
 
Аватар для narco3
 
Регистрация: 02.10.2011
Сообщений: 32
Печаль ряды в паскале

как найти сумму ряда 1/N! (1;+бескон.) с точностью 0,001 ?
narco3 вне форума Ответить с цитированием
Старый 04.10.2011, 20:08   #2
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Код:
program Project2;
var s,dx : double;
     n,i : integer;
begin
 n:=1;
 repeat
   dx:=1;
   for i:=1 to n do
   dx:=dx*i;
   dx:=1/dx;
   s:=s+dx;
   inc(n);
 until dx<0.001;
 writeln(s);
end.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 05.10.2011, 00:03   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

JUDAS, позволите пару маленьких замечаний?...

Код БЕЗУСЛОВНО рабочий и правильный.

Но я бы
1) всё же перед циклом repeat задал начальное значение суммы s := 0;
я знаю, что в данном случае начальное значение s будет обнулено автоматически (компилятор + загрузчик ОС).
Но тем не менее иницилизировать все переменные перед тем как из них что-то читается в коде - правила хорошего тона (а в некоторых языках несоблюдение этого правила даже считается ошибкой. например, C#).
Ведь мы же хотим привить хороший стиль программирования новичкам, не правда ли?..

2) в подобных задачах эффективнее не считать факториал каждый раз с 1 до N, а завести дополнительную переменную, в которой "накапливать факториал". тогда в цикле будет достаточно умножить эту переменную на N, чтобы получить значение N!. Это и эффективнее, да и код получается проще...
Код:
var s,dx, factorial : double;
    n,i : integer;
begin
 n:=1;
 factorial := 1.0;
 s:=0.0;
 repeat
   factorial := factorial * n;
   dx:=1/factorial;
   s:=s+dx;
   inc(n);
 until dx<0.001;
 writeln(s:0:16);
 readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ряды в С++ L_A_R Общие вопросы C/C++ 3 30.12.2010 11:44
ряды alexy Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2010 17:22
Си,ряды acko Помощь студентам 0 21.11.2010 05:46
Проблема с задачей в паскале - на тему ряды! sting Помощь студентам 2 05.01.2010 13:33
Задача на ряды Till Паскаль, Turbo Pascal, PascalABC.NET 6 24.06.2008 09:21