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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2010, 15:16   #1
Mie4ka
 
Регистрация: 16.12.2010
Сообщений: 6
По умолчанию Найти массив сумм с точностью до e

Не могу справиться с задачей, так как не понимаю условия. В методичке был пример решения данной задачи, я попыталась по примеру составить программу, но мало того что выдает ошибку, так еще и понятие "с точностью до е" меня сбивает с толку (я его просто не понимаю).

Найти массив сумм S элементов ряда для каждого значения заданной последовательности Х (с использованием оператора for). Каждую сумму искать с точностью до e.
S=x^3/3-x^5/15+...+((-1)^(n+1))*(x^(2n+1))/(4n^2-1)
x=0.1...1.3, hx=0.3, e=10e-3

Вот текст, который я попыталась составить:
Код:
PROGRAM Lab_7_2;
USES
     Crt;
CONST
     m   = 5;          {Количество Х}
     xn  = 0.1;        {Начальное знеачение Х}
     xk  = 1.3;        {Конечное значение Х}
     hx  = 0.3;        {Шаг по Х}
     eps = 1e-3;       {Коэффициент точности}
VAR
     s : array [1..m] of real; {Массив сумм}
     q : real;                 {Коэффициент рекурентности}
     i : integer;              {Счетчик элементов ряда}
     x : real;                 {Текущий Х}
     k : integer;              {Счетчик Х}
BEGIN
     ClrScr;
     x:=xn;            {Начальный Х}
     k:=1;
     WHILE x<=xk+eps DO
           Begin
                i:=0;
                REPEAT {Цикл поиска k-ой суммы}
                       q:=exp((2*i+1)*ln(x))/((4*sqr(i))-1);
                       if odd(i)=false then q:=-q;
                       s[k]:=s[k]+q;
                       i:=i+1;
                UNTIL abs(q)<eps;  {Условие точности}
                Writeln('k = ',k,'  x = ',x:3:1,'  S = ',s[k]:6:4);
                k:=k+1;
                x:=x+hx;          {Переход на следующий Х}
                Readln;
           End;
END.
Помогите составить правильную программу...
Mie4ka вне форума Ответить с цитированием
Старый 16.12.2010, 17:41   #2
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

Цитата:
Сообщение от Mie4ka Посмотреть сообщение
Не могу справиться с задачей, так как не понимаю условия. В методичке был пример решения данной задачи, я попыталась по примеру составить программу, но мало того что выдает ошибку, так еще и понятие "с точностью до е" меня сбивает с толку (я его просто не понимаю).

Найти массив сумм S элементов ряда для каждого значения заданной последовательности Х (с использованием оператора for). Каждую сумму искать с точностью до e.
S=x^3/3-x^5/15+...+((-1)^(n+1))*(x^(2n+1))/(4n^2-1)
x=0.1...1.3, hx=0.3, e=10e-3

Вот текст, который я попыталась составить:
Код:
PROGRAM Lab_7_2;
USES
     Crt;
CONST
     m   = 5;          {Количество Х}
     xn  = 0.1;        {Начальное знеачение Х}
     xk  = 1.3;        {Конечное значение Х}
     hx  = 0.3;        {Шаг по Х}
     eps = 1e-3;       {Коэффициент точности}
VAR
     s : array [1..m] of real; {Массив сумм}
     q : real;                 {Коэффициент рекурентности}
     i : integer;              {Счетчик элементов ряда}
     x : real;                 {Текущий Х}
     k : integer;              {Счетчик Х}
BEGIN
     ClrScr;
     x:=xn;            {Начальный Х}
     k:=1;
     WHILE x<=xk+eps DO
           Begin
                i:=0;
                REPEAT {Цикл поиска k-ой суммы}
                       q:=exp((2*i+1)*ln(x))/((4*sqr(i))-1);
                       if odd(i)=false then q:=-q;
                       s[k]:=s[k]+q;
                       i:=i+1;
                UNTIL abs(q)<eps;  {Условие точности}
                Writeln('k = ',k,'  x = ',x:3:1,'  S = ',s[k]:6:4);
                k:=k+1;
                x:=x+hx;          {Переход на следующий Х}
                Readln;
           End;
END.
Помогите составить правильную программу...
Цикл for тут подойдет только для перебора x
Код:
for i:=0 to 4 do begin
  x:=x0+i*0.3;
  i:=1; {исправить, так при i:=0 считается не первый элемент суммы}
  {тут все остальное: расчет и вывод}
end;
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 16.12.2010, 18:39   #3
Mie4ka
 
Регистрация: 16.12.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от rubius2008 Посмотреть сообщение
Цикл for тут подойдет только для перебора x
Код:
for i:=0 to 4 do begin
  x:=x0+i*0.3;
  i:=1; {исправить, так при i:=0 считается не первый элемент суммы}
  {тут все остальное: расчет и вывод}
end;
Вы меня просвятите.... Я не совсем пойму как это увязать с моей программой. И не пойму как с этой точностью справиться. Вы бы не могли вставить этот кусочек и написать полный тест программы...
Mie4ka вне форума Ответить с цитированием
Старый 16.12.2010, 19:56   #4
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

Код:
PROGRAM Lab_7_2;
USES
     Crt;
CONST
     m   = 5;          {Количество Х}
     xn  = 0.1;        {Начальное знеачение Х}
     xk  = 1.3;        {Конечное значение Х}
     hx  = 0.3;        {Шаг по Х}
     eps = 1e-3;       {Коэффициент точности}
VAR
     s : array [1..m] of real; {Массив сумм}
     q : real;                 {Коэффициент рекурентности}
     i : integer;              {Счетчик элементов ряда}
     x : real;                 {Текущий Х}
     k : integer;              {Счетчик Х}
BEGIN
     ClrScr;
     for k:=1 to m do begin
        x:=xn+(k-1)*hx;
        i:=1; s[k]:=0;
                REPEAT {Цикл поиска k-ой суммы}
                       q:=exp((2*i+1)*ln(x))/((4*sqr(i))-1);
                       if odd(i)=false then q:=-q;
                       if abs(q)>eps then s[k]:=s[k]+q;
                       i:=i+1;
                UNTIL abs(q)<eps;  {Условие точности}
                Writeln('k = ',k,'  x = ',x:3:1,'  S = ',s[k]:6:4);
                Readln;
     End;
END.
Про точность: сумму считаете из элементов, и элемент, который изменит значение суммы на величину меньшую заданной точности нет надобности добавлять, так как вновь вычисленное значение суммы будет отличаться на величину меньше заданной точности. У вас это реализовано в цикле repeat.
Есть вопросы, пишите в ЛС.

Последний раз редактировалось rubius2008; 16.12.2010 в 19:59.
rubius2008 вне форума Ответить с цитированием
Старый 17.12.2010, 00:33   #5
Mie4ka
 
Регистрация: 16.12.2010
Сообщений: 6
По умолчанию

Ваша программа выдает почему-то первую сумму, равную нулю.
А также ошибку 205: Floating point overflow.

Так что? Вы поможете мне? Помогите, пожалуйста!

Помогите исправить программу на правильную

Последний раз редактировалось Stilet; 28.12.2010 в 18:02.
Mie4ka вне форума Ответить с цитированием
Старый 28.12.2010, 17:35   #6
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

по формуле получается, что при х=1.3 каждый последующий элемент становится все больше и больше из-за этого и ошибка вылетает, т.е. получается для вашей формулы при х более 1 условие "Каждую сумму искать с точностью до e" не корректно, причем каждый последующий элемент увеличивается на величину гораздо большую чем е.
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 28.12.2010, 17:55   #7
Mie4ka
 
Регистрация: 16.12.2010
Сообщений: 6
По умолчанию

А почему первая сумма равна нулю?
Mie4ka вне форума Ответить с цитированием
Старый 28.12.2010, 18:10   #8
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

Цитата:
Сообщение от Mie4ka Посмотреть сообщение
А почему первая сумма равна нулю?
первый элемент слишком маленький меньше е

Код:
PROGRAM Lab_7_2;
USES
     Crt;
CONST
     m   = 5;          {Êîëè÷åñòâî Õ}
     xn  = 0.1;        {Íà÷àëüíîå çíåà÷åíèå Õ}
     xk  = 1.3;        {Êîíå÷íîå çíà÷åíèå Õ}
     hx  = 0.3;        {Øàã ïî Õ}
     eps = 1e-3;       {Êîýôôèöèåíò òî÷íîñòè}
VAR
     s : array [1..m] of real; {Ìàññèâ ñóìì}
     q,ql : real;                 {Êîýôôèöèåíò ðåêóðåíòíîñòè}
     i : integer;              {Ñ÷åò÷èê ýëåìåíòîâ ðÿäà}
     x : real;                 {Òåêóùèé Õ}
     k : integer;              {Ñ÷åò÷èê Õ}
BEGIN
     ClrScr;
     for k:=1 to m do begin
        x:=xn+(k-1)*hx;
        i:=1; s[k]:=0;
        q:=exp((2*i+1)*ln(x))/((4*sqr(i))-1);
        if odd(i)=false then q:=-q;
        s[k]:=s[k]+q;
        i:=i+1;
                REPEAT {Öèêë ïîèñêà k-îé ñóììû}
                       ql:=q;
                       q:=exp((2*i+1)*ln(x))/((4*sqr(i))-1);
                       if odd(i)=false then q:=-q;
                       if abs(q)>eps then s[k]:=s[k]+q;
                       i:=i+1;
                UNTIL abs(q-ql)<eps;  {Óñëîâèå òî÷íîñòè}
                Writeln('k = ',k,'  x = ',x:3:1,'  S = ',s[k]:6:4);
                Readln;
     End;
END.
вот так будет верней и сумма 1 не будет 0
Есть вопросы, пишите в ЛС.

Последний раз редактировалось Stilet; 28.12.2010 в 18:20.
rubius2008 вне форума Ответить с цитированием
Старый 28.12.2010, 18:20   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Каждую сумму искать с точностью до e.
Ты можешь выяснить что имелось ввиду у преподавателя?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2010, 18:26   #10
Mie4ka
 
Регистрация: 16.12.2010
Сообщений: 6
По умолчанию

rubius2008, Вы меня конечно извините, но я не поняла зачем выполнять одни и те же действия в программе два раза, введь это не корректно, а во вторых не поняла все таки как сделать так, что б программа не выдавала ошибку, и отдав программу преподавателю в готовом виде он все понял и не придирался..????
Mie4ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму ряда с необходимой точностью на паскале Раздва Помощь студентам 3 06.10.2011 01:28
Программа запрашивает имя файла и формирует массив, состоящий из сумм каждых трех вещественных компонент brother-bear Помощь студентам 0 26.04.2010 19:09
Найти сумму ряда с точностью до 0.0001 и перевод формулы n-ого члена ivil19 Помощь студентам 5 05.03.2010 06:50
найти бесконечную сумму ряда с заданной точностью логарифм Паскаль, Turbo Pascal, PascalABC.NET 1 23.07.2009 07:17
Найти сумму ряда с точностью Е=10^-3 Добрый Кот Паскаль, Turbo Pascal, PascalABC.NET 2 12.12.2007 12:04