Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.08.2016
Сообщений: 6
1

Найти сумму ряда, начиная отсчет с нулевого члена (while)

19.11.2014, 23:54. Показов 1941. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Найти сумму ряда, начиная отсчет с нулевого члена (*нужно сделать через while*)
Найти сумму ряда, начиная отсчет с нулевого члена (while)


Вроде получалось, но потом ... гулухо

Был бы очень рад, если кто-то подправит код

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Program ex5; 
uses crt;
var
x, eps, s, b, y, z: real;
i : integer;
begin
clrscr;
  x:=0.75;
  eps:=1e-3;
  s:=1;
  i:=1;
  y:=1*2;
  z:=x*x; /?????
  b:=(2*i-1)*z/y;
while abs (b) > eps do
 begin
 s:=s+b;
 i:=i+1;
 y:=-y*(2*i-1)*(2*i);
 z:=........;  /???? эта часть ввела в ступор, как сделать так, чтоб x^(2*i)
 b:=(2*i-1)*z/y;
 end;
writeln ('s=', s);
readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2014, 23:54
Ответы с готовыми решениями:

Найти номер члена ряда, начиная с которого сумма ряда будет больше заданного А
Всем привет! Мы еще даже не изучали эту тему с "Суммой ряда", а просят найти Переработать...

Найти сумму ряда до члена ряда с заданным номером, и найти сумму ряда с заданной точностью
№1. Дано натуральное число n. Вычислить \sum_{i=1}^n\frac{1+i}{i!} №2. Вычислить формулу...

Найти сумму ряда S с точностью до члена ряда, по абсолютной величине меньшего eps
найти сумму ряда S с точностью до члена ряда, по абсолютной величине меньшего eps = 0.0001. в чем...

Найти произведение всех элементов массива, начиная с нулевого. Если нулевого элемента нет - вывести (-1)
В одномерном массиве, состоящем из n элементов найти: произведение всех элементов, начиная с...

9
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
20.11.2014, 01:55 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const
    eps = 0.001;
    x = 0.75;
    line = '+-----+-------------+-------------+';
 
var
    i : Byte = 1;
    fact : LongWord = 1;
    pow : Double = -1;
    s : Double = 1;
    si : Double = 1;
 
begin
    WriteLn(line);
    WriteLn('|  i  |     si      |      s      |');
    WriteLn(line);
    while (Abs(si) > eps) do
    begin
        WriteLn('| ', i:3, ' | ', si:11:8, ' | ', s:11:7, ' |');
        fact := fact * (2 * i-1) * (2 * i);
        pow := -pow * sqr(x);
        si := pow * (2 * i - 1) / fact;
        s := s + si;
        Inc(i);
    end;
    WriteLn(line);
end.
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
20.11.2014, 01:58 3
)))
Миниатюры
Найти сумму ряда, начиная отсчет с нулевого члена (while)  
0
Модератор
9870 / 5238 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
20.11.2014, 19:04 4
JokeR.BY, а ничего, что задание некорректное? Вот я не понял...

https://www.cyberforum.ru/cgi-bin/latex.cgi?S=1+\frac{x^2}{2!}+\frac{3x^4}{4!}+...+(-1)^{n+1}\,\frac{2n-1}{(2n)}x^{2n}

Во-первых, в общем члене ряда пропущен знак факториала. Во-вторых, либо (-1)n+1 лишнее, либо должно быть так:

https://www.cyberforum.ru/cgi-bin/latex.cgi?S=1+\frac{x^2}{2!}-\frac{3x^4}{4!}+...+(-1)^{n+1}\,\frac{2n-1}{(2n)!}x^{2n}

И ещё. 4FUN, внимание! В любом случае, решение от JokeR.BY не вполне верное, да чего уж там, вовсе неверное: правильно может быть вычислена сумма только десяти первых членов ряда, если необходимая точность достигнута не будет, то программа выдаст ошибочный результат. Это будет происходить при x>5.1 (если точнее, при x>5.0742113311891405600597211084186). JokeR.BY, подобные задачи следует решать с применением рекуррентного соотношения для всего члена ряда целиком, а не отдельно для числителя и знаменателя.

4FUN, уточните задание.

Не по теме:

После уточнения задания тема будет отредактирована для приведения в соответствие с требованиями правил форума. Ну и, может, решу задачку.

4FUN, рекомендую Вам ознакомиться с правилами форума, Вы их нарушили. Фотографии текста запрещены. Для написания формул существует встроенный в форум редактор формул.

Если Вы будете и далее выкладывать фотографии текста, я Ваши фотографии буду удалять, а если и эта мера будет Вам как об стенку горох, я с Вами нехорошо поступлю и за нарушение правил форума, и за невыполнение требований администрации форума. Тем более, если Вам лень Ваш вопрос напечатать врукопашную, почему мне, допустим, или ещё кому-то, должно быть не лень на него отвечать? Я, к примеру, не хочу помогать лентяям, это понятно?

0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
20.11.2014, 19:18 5
Cyborg Drone, я в курсе, что она посыпется при большом x. но в чём проблема, если x - константа, значение которой позволяет провести расчёт?
P.S.
JokeR.BY, а ничего, что задание некорректное? Вот я не понял...
я видел, что задание ошибочно и (о боже) посмел решить задачу, приняв некоторые исправления с учётом этого самого общего члена ряда. Но вам видимо очень нужно в столь напыщенной форме указывать на любые недочёты (будь то задание или решение), не так ли?
0
Cyborg Drone
20.11.2014, 22:42
  #6

Не по теме:

Цитата Сообщение от JokeR.BY Посмотреть сообщение
но в чём проблема, если x - константа
Да ладно. Если в задании уже есть ошибки, вполне вероятно, что константные значения даны всего лишь для контрольного прогона программы. Как правило, в подобных заданиях так оно и есть.
Цитата Сообщение от JokeR.BY Посмотреть сообщение
я видел, что задание ошибочно и (о боже) посмел решить задачу
По моему мнению, этого делать не следовало. Очень часто что-либо совершенно очевидное может таковым не являться.
Цитата Сообщение от JokeR.BY Посмотреть сообщение
Но вам видимо очень нужно в столь напыщенной форме указывать на любые недочёты (будь то задание или решение), не так ли?
Именно так. Только что же у меня там такого напыщенного? Да, я готов воевать за каждую букву в угоду корректности, ну и что? А указывать на любые недочёты в сообщениях во вверенных мне разделах форума я просто обязан. Но, всё равно, Ваш полувопрос в мой адрес меня расстроил, считаю, что я его не заслужил, поэтому давайте разберёмся. В Вашей программе Вы применили алгоритм, который при суммировании более 10 членов ряда выдаёт ошибочный результат. Устраним невязку, заменим longword на double. Понимаю, экстенсивное решение, ну да ладно. Но вот опять же, при 256-ой итерации Ваша программа завершится аварийно из-за ошибки деления на 0. Ладно, заменим byte на longword и... Можно и не заменять. Примерно на 2000 итерации возникнет ошибочный результат из-за переполнения либо антипереполнения числа с плавающей точкой в переменной pow. Алгоритм прямо-таки неисправимый какой-то... А типовой алгоритм для решения подобных задач, мало того, что проще Вашего, ещё и (если i: longword) вполне правильно может посчитать сумму до 4294967295 членов ряда безо всяких переполнений и деления на ноль. Да, может быть, где-то после миллионного члена накопится некоторая неточность из-за усечения чисел с плавающей точкой, однако, результат будет не ошибочным, а неточным. Получается, Ваш алгоритм не выдерживает никакой критики в сравнении не с каким-то там эпохальным, а просто с типовым алгоритмом. По-моему, если уж выкладывать свой ответ на всеобщее обозрение, нужно стремиться к тому, чтобы ответ этот был эталонным, а не в стиле "и так сойдёт". Я, чтобы не выставлять Вас в невыгодном свете, всего лишь намекнул, что Ваше решение не очень, а Вы тут же намекнули мне, что я страдаю напыщенностью, вместо того, чтобы подумать, а какого это ляда я на Ваш код так взъелся.

0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
21.11.2014, 00:04 7

Не по теме:

Cyborg Drone, кажется мне, был у нас уже опыт общения на подобную тему. И, повторюсь, я считаю (хотя и сам порой грешу, чего уж тут), что критика должна быть критикой в чистом виде. Без лёгких издёвок и подначивания оппонента в споре. Более чем уверен, что вы прекрасно поняли, что код писался под "правильную", но не представленную здесь, формулу ряда. И тем не менее, вы не преминули выставить меня дураком, неспособным понять примитивную математическую функцию. Скорее всего именно это и послужило "слегка" резкой реакции с моей стороны. Хотя словоформы в стиле

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
решение не вполне верное, да чего уж там, вовсе неверное
тоже не особо посодействовали успокоению.
Хотя пытаться "учить" кого-то, не замечая бревно в своём же глазу - не есть тру. Так что приношу извинения за, может обоснованный, но тем не менее, наезд.



а по сабжу:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const
    line = '+-----+-------------+-------------+';
 
var
    i : LongWord = 1;
    s : Double = 1;
    si : Double = 1;
    x, eps : Single;
 
begin
    Write('Input x='); ReadLn(x);
    if (x = 0) then
    begin
        WriteLn('ERROR!!! 0^0 !!!');
        exit;
    end;
    Write('Input e='); ReadLn(eps);
    WriteLn(line);
    WriteLn('|  i  |     si      |      s      |');
    WriteLn(line);
    while (Abs(si) > eps) do //для проверки можно поменять на >=
    begin
        WriteLn('| ', i:3, ' | ', si:11:8, ' | ', s:11:7, ' |');
        si := -si * sqr(x) / (2 * i * (2 * i - 3));
        s := s + si;
        Inc(i);
    end;
    WriteLn(line);
end.

Не по теме:

однако ж на счёт простоты решения с помощью РС я бы поспорил. ибо чем больше формула - тем больше вероятность ошибиться.

0
Модератор
9870 / 5238 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
21.11.2014, 00:51 8

Не по теме:

Я был воспитан в стиле дружеской подначки. Вообще-то, я очень добрый. Да, признаю, со стороны моя эскапада выглядит, так скажем, не очень. Я извиняюсь. В назидание себе самому, ничего в этой теме править не стану.


Кажется, рекуррентное соотношение и вправду получилось ошибочное...

https://www.cyberforum.ru/cgi-bin/latex.cgi?s_n=(-1)^{n+1}\,\frac{2n-1}{(2n)!}x^{2n}

https://www.cyberforum.ru/cgi-bin/latex.cgi?s_{n+1}=(-1)^{n+2}\,\frac{2(n+1)-1}{(2(n+1))!}x^{2(n+1)}=(-1)^{n+2}\,\frac{2n+1}{(2n+2)!}x^{2n+2}=(-1)^{n+2}\,\frac{2n+1}{(2n+1)(2n+2)(2n)!}x^{2n}x^2

Сокращаем, домножаем, получаем:

https://www.cyberforum.ru/cgi-bin/latex.cgi?s_{n+1}=(-1)(-1)^{n+1}\,\frac{2n-1}{(2n-1)(2n+2)(2n)!}x^{2n}x^2=\frac{-x^2}{(2n-1)(2n+2)}s_n

Тогда
Pascal
24
        si := -si * sqr(x) / (2 * i - 1) / (2 * i + 2));
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
21.11.2014, 02:12 9
Cyborg Drone, отнюдь)
просто РС рассчитывалось не как a[n+1]/a[n], а как a[n]/a[n-1]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const
    line = '+-----+-------------+-------------+';
 
var
    i : LongWord = 0;
    s : Double = 1;
    si : Double = 1;
    x, eps : Single;
 
begin
    Write('Input x='); ReadLn(x);
    if (x = 0) then
    begin
        WriteLn('ERROR!!! 0^0 !!!');
        exit;
    end;
    Write('Input e='); ReadLn(eps);
    WriteLn(line);
    WriteLn('|  i  |     si      |      s      |');
    WriteLn(line);
    while (Abs(si) > eps) do //для проверки можно поменять на >=
    begin
        WriteLn('| ', i:3, ' | ', si:11:8, ' | ', s:11:7, ' |');
        Inc(i);
        si := -si * sqr(x) / (2 * i * (2 * i - 3));
        s := s + si;
    end;
    WriteLn(line);
end.
Добавлено через 3 минуты
просто напутана была очерёдность инкремента, вывода и расчёта.
0
Модератор
9870 / 5238 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
21.11.2014, 02:31 10
Понятно. Лучше всё же
Pascal
25
        si := -si * sqr(x) / 2 / i / (2 * i - 3);
потому что некоторые диалекты паскаля, TP, в частности, грешат тем, что, по возможности, операции с целыми числами в целых числах и делают, для оптимизации программы по быстродействию. Это может вызвать скрытые ошибки из-за целочисленного переполнения. В плане максимального целого, для Вашего варианта может быть попытка вычисления целого числа 2 * i * (2 * i - 3), для моего - только 2 * i - 3.
0
21.11.2014, 02:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2014, 02:31
Помогаю со студенческими работами здесь

Найти сумму ряда с точностью до члена ряда
Найти сумму ряда с точностью до члена ряда, меньшего 0.0001 для заданного значения и сравнить...

Найти сумму ряда с точностью до члена ряда
Помогите пожалуйста с задачей , вот условие Найти сумму ряда с точностью до члена ряда, меньшего...

Найти сумму ряда с точностью до члена ряда, меньшего  (задается с клавиатуры) для заданного значения x и срав

По формуле члена ряда найти сумму первых 13 членов
Снова я , помогите с программой ( говоря простым языком , кто не занят ,или кого не затруднит ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru