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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2015, 18:33   #1
havapeymaK
Новичок
Джуниор
 
Регистрация: 17.08.2015
Сообщений: 4
Печаль Для заданного ряда найти сумму N элементов ряда

Паскаль.

У меня получился следующий код:
Код:
PROGRAM lab7_Ahadi;
uses crt;
CONST 
 n=6; { количество элементов суммы }
 x=0.1; { для этого x вычислить сумму }
VAR
 s:real; { искомая сумма }
 q:real; { коэффициент реккурентности }
 a1,a2:real; {предыдущий и следующий элементы суммы}
 i:integer; { счетчик элементов суммы }
BEGIN
 clrscr;
 S:=0; { значение суммы до начала цикла }
 a1:=0; { слагаемое непосредственно перед началом цикла }
 FOR i:=1 TO n DO
  begin
   q:=-a2/((2*n+2)*(2*n+3)); { i-й коэффицииент реккурентности }
   a2:=a1*q; { следующий элемент суммы }
   s:=s+a2; { суммирование }
   a1:=a2 { переброс, подготовка к следующему такту }
  end;
 writeln ('x=',x:5:1,'s=',s:9:6);
 readln;
END.
Паскаль ошибки не дает, но при выполнении сумма получается нулю. Почему так?
Изображения
Тип файла: jpg 112.jpg (48.9 Кб, 68 просмотров)

Последний раз редактировалось Stilet; 17.08.2015 в 19:00.
havapeymaK вне форума Ответить с цитированием
Старый 17.08.2015, 19:02   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А почему бы не сделать функцию рекурсии, в которой функция будет вызывать саму себя до тех пор, пока N не достигнет 6?

т.е. написать рекурсивную функцию вычисления факториала

потом написать вторую функцию, которая уже вычисляет S.

а в головном модуле программы просто написать writeln...?
from dark to light)

Последний раз редактировалось Алексей_2012; 17.08.2015 в 19:05.
Алексей_2012 вне форума Ответить с цитированием
Старый 17.08.2015, 19:06   #3
havapeymaK
Новичок
Джуниор
 
Регистрация: 17.08.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
А почему бы не сделать функцию рекурсии, в которой функция будет вызывать саму себя до тех пор, пока N не достигнет 6?

а в головном модуле программы просто написать writeln...?
Может можно и так, но я именно в таком варианте, по примеру с лаборатнорной хочу разобраться
havapeymaK вне форума Ответить с цитированием
Старый 17.08.2015, 19:23   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Цитата:
Сообщение от havapeymaK Посмотреть сообщение
Паскаль ошибки не дает, но при выполнении сумма получается нулю. Почему так?
Потому что
Код:
 a1:=0; 
 FOR i:=1 TO n DO
  begin
   q:=-a2/((2*n+2)*(2*n+3)); // а чему равно a2 в самом первом цикле ?
   a2:=a1*q; // =0*? = 0 
   s:=s+a2; 
   a1:=a2; // = 0

Последний раз редактировалось type_Oleg; 17.08.2015 в 19:26.
type_Oleg вне форума Ответить с цитированием
Старый 17.08.2015, 19:27   #5
havapeymaK
Новичок
Джуниор
 
Регистрация: 17.08.2015
Сообщений: 4
По умолчанию

Спасибо, не заметил. Но чему тогда равны s и a1 ?
havapeymaK вне форума Ответить с цитированием
Старый 17.08.2015, 19:35   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Цитата:
Сообщение от havapeymaK Посмотреть сообщение
Спасибо, не заметил. Но чему тогда равны s и a1 ?
В каком смысле ? Чему будут равны у вас - оба 0.
Или чему должны быть равны? Я не знаю зачем вообще у вас аж 3 вспомогательных переменных - a1,a2,q , но при этом x никак не участвует вычислениях .

Кстати, в данном случае лучше не вычислять факториал, а вычислять последующий член через предыдущий, как у вас.

PS Когда получится это вычислить через for с заданным числом циклом ( 6) , переделайте, чтоб было через repeat или while. Так логичнее и вообще правильнее. Тем более у вас задана погрешность - эпсилон

Последний раз редактировалось type_Oleg; 17.08.2015 в 19:38.
type_Oleg вне форума Ответить с цитированием
Старый 17.08.2015, 19:38   #7
havapeymaK
Новичок
Джуниор
 
Регистрация: 17.08.2015
Сообщений: 4
По умолчанию

Спрашиваю, чему они равны в моем примере (как я понял, нули я неправильно их написал)
havapeymaK вне форума Ответить с цитированием
Старый 18.08.2015, 09:18   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Реккурентная формула. Ни степень х, ни факториал вычислять нинада!
Код:
function S(x: Single): Single;
const
  n = 6;
var
  i, j: Integer;
  f: UInt64;
begin
  Result:= x;
  f:= 1;
  
  for i:= 2 to n do
    begin
      x:= x * sqr(x);
      Result:= Result + x / f;
      f:= f * (2*i - 2) * (2*i - 1);
    end;
end;
ВНИМАНИЕ!
УВАГА!!
АХТУНГ!!!
АТТЕНШН!!!!

Shit-code detected!
Код не отлаживал. Писал на заборе!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти сумму членов ряда с точностью ε для заданного х и их количество (Паскаль) gylayko Помощь студентам 0 12.10.2011 16:50
Для заданного x вычислить сумму ряда с точностью E (Delphi) Almir Помощь студентам 1 27.03.2011 12:06
Вычислить сумму элементов ряда, заданного формулой timmy92 Помощь студентам 5 17.12.2010 21:50
Найти сумму ряда с точностью e, если дан общий член этого ряда JiLiYa Общие вопросы C/C++ 2 18.02.2009 11:11