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

Вычислить значение суммы

24.06.2020, 12:16. Показов 2317. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.Нужно вычислить значение суммы (значение n вводится с клавиатуры):

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
x+\frac{x^3}{3}+\frac{x^5}{5}+\frac{x^7}{7}+...+\frac{x^{2n-1}}{2n-1}\ \ \ \ \<br />
(x задано)

Я написал код, но преподаватель говорит, что "В программе не должен фигурировать ни логарифм, ни экспонента"
Код ниже :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
program Vych_8;
var n,x:integer;
function sum(k:integer):extended;
begin
if k=1 then sum:=x
else
begin
sum:=sum(k-1);
sum:=sum+exp((2*k-1)*ln(x))/(2*k-1);
end;
end;
begin
repeat
writeln('x= '); readln(x);
writeln('n= '); readln(n);
until (x>=-100) and (x<=10000) and (n>0) and (n<=100);
writeln('x = ',x,' n = ',n);
writeln('s=',sum(n):0:3);
readln;
end.
И если можно, то нужно сделать как рекурсивная функция и как рекурсивная процедура. Спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2020, 12:16
Ответы с готовыми решениями:

Вычислить значение суммы
Вычислить значение суммы : 1-1/2+1/3+...+((-1)^(n-1))/n . Выполнить еще как процедурой. uses crt; Var n:integer; z:real; ...

Вычислить значение суммы
ЗДРАСТВУЙТЕ ДОРОГИЕ ФОРУМЧАНЕ :)))))))) помогите пожалуйста решить задачку. вычислить Y=1+x/2+x2/4...x9/18 заранее спасибо)))))))))

Вычислить значение суммы
Элементов сбора А базовый типі Х, они дались типом интервал.Число элементов Этого сбора писать функцию, которая выявляет, нужно

9
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
24.06.2020, 14:01
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
function p(x : Real; n : Integer) : Real;
begin
  if n = 0 then
    p := 1
  else if odd(n) then
    p := x * p(x, n - 1)
  else
    p := sqr(p(x, n shr 1))
end;
 
function s(x : Real; n : Integer) : Real;
begin
  if n = 1 then
    s := x
  else
    s := ( s(x, n-1) * (2*n-1) + p(x, 2*n-1) ) / (2*n-1)
end;
 
var
  x : Real;
  n : Integer;
begin
  Read(x, n);
  WriteLn(s(x, n):0:7);
end.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.06.2020, 14:01
Цитата Сообщение от Zolotoy12 Посмотреть сообщение
В программе не должен фигурировать ни логарифм, ни экспонента"
Это разложение в ряд Тейлора функции arth(x) при |x|<1.
С использованием рекурретного отношения.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var n,i:integer;
    x,t,s:real;
begin
repeat
write('Введите |x|<1 x= ');
readln(x);
until abs(x)<1;
repeat
write('Введите n>0 n= ');
readln(n);
until n>0;
t:=x;
s:=t;
for i:=2 to n do
 begin
  t:=t*x*x;
  s:=s+t/(2*i-1);
 end;
writeln('S=',s:0:4);
write('arth(x)=',0.5*ln((1+x)/(1-x)):0:4)
end.
1
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 35
24.06.2020, 15:22  [ТС]
Прошу прощения, не знаю, как ответить определенному человеку.
Puporev, когда пытаюсь ввести "x" , то делается это бесконечно. Только когда введу х=0, разрешает ввести "n".
JuriiMW, у вас это идет как функция? (не процедура)
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.06.2020, 15:36
Zolotoy12, Вводите любое вещественное х -1<x<1.

Добавлено через 40 секунд
типа -0.85, 0.6
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 35
24.06.2020, 15:40  [ТС]
Работает, спасибо большое) А Вы сделали это как функцию?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.06.2020, 15:43
Если Вы ко мне, то конечно нет, я просто показал как можно обойтись без логарифма и экспоненты.
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 35
24.06.2020, 15:45  [ТС]
Puporev, понял) Спасибо большое за помощь. Может, если не заняты и есть желание, не могли бы Вы посмотреть другие мои темы? Зачёт горит(
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 35
26.06.2020, 14:40  [ТС]
Может, кто-то знает, как сделать так:

*программа должна быть одна:

ввод заданного числа
расчет с помощью рекурсии
вывод ответа после рекурсии
расчет без рекурсии
вывод ответа без рекурсии* ?
0
Модератор
10435 / 5724 / 3405
Регистрация: 17.08.2012
Сообщений: 17,429
29.06.2020, 19:14
Лучший ответ Сообщение было отмечено Zolotoy12 как решение

Решение

JuriiMW... Есть вариант получше, чем на каждой рекурсии заново вычислять степень.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function sum_recursive(x, xk: real; k, n: integer): real;
begin
  if k = 2 * n - 1 then sum_recursive := xk / k
  else sum_recursive := sum_recursive(x, xk * x * x, k + 2, n) + xk / k
end;
 
var
  x: real;
  n: integer;
begin
  x := 0.7;
  n := 10;
  writeln('    S(x) = ', sum_recursive(x, x, 1, n) :0:15);
  writeln('arcth(x) = ', ln((1 + x) / (1 - x)) / 2 :0:15);
  readln
end.
Нехорошо смотрится и запутывает программу куча "лишних" формальных параметров? Можно сделать их глобальными по отношению к рекурсивной функции, например, 'обернуть' рекурсивную функцию дополнительной функцией, формальные параметры и локальные переменные которой будут глобальными по отношению к рекурсивной функции:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function sum_recursive(x: real; n: integer): real;
  function recursive(xk: real; k, kmax: integer): real;
  begin
    if k = kmax then recursive := xk / k
    else recursive := recursive(xk * x * x, k + 2, kmax) + xk / k
  end;
begin
  sum_recursive := recursive(x, 1, 2 * n - 1)
end;
 
var
  x: real;
  n: integer;
begin
  x := 0.7;
  n := 10;
  writeln('    S(x) = ', sum_recursive(x, n) :0:15);
  writeln('arcth(x) = ', ln((1 + x) / (1 - x)) / 2 :0:15);
  readln
end.
Я всегда повторял и буду повторять: размещать глобальные переменные до подпрограмм нужно только тогда, когда это действительно необходимо, потому что это порождает трудно локализуемые ошибки, связанные с перекрытием областей видимости глобальных и локальных переменных. Эта функция - редкий пример того, когда действительно необходимо перекрытие областей видимости переменных из разных уровней иерархической структуры программы. Заметьте, что во вложенной подпрограмме значение глобальных по отношению к ней переменных не изменяется. Если будете использовать приведённый здесь способ создания подпрограмм, возьмите за правило не изменять значения переменных из более высоких уровней иерархии, чтобы не наделать ошибок из-за перекрытия областей видимости. Но, если очень нужно, то, конечно же, можно.

Zolotoy12, Вам для сдачи, чтобы не путаться во вложенных подпрограммах, подойдёт вот такой вариант:
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
30
31
32
33
34
35
36
37
38
39
40
41
function sum_recursive(x, xk: real; k, n: integer): real;
begin
  if k = 2 * n - 1 then sum_recursive := xk / k
  else sum_recursive := sum_recursive(x, xk * x * x, k + 2, n) + xk / k
end;
 
function sum_iterative(x: real; n: integer): real;
var
  s, xk: real;
  k, kmax: integer;
begin
  xk := x;
  s := 0;
  k := 1;
  kmax := 2 * n - 1;
  while k <= kmax do
    begin
      s := s + xk / k;
      xk := xk * x * x;
      inc(k, 2)
    end;
  sum_iterative := s
end;
 
var
  x: real;
  n: integer;
begin
  repeat
    write('|x| < 1; x = ');
    readln(x)
  until abs(x) < 1;
  repeat
    write('n > 0; n= ');
    readln(n)
  until n > 0;
  writeln('     Сумма рекурсивно: ', sum_recursive(x, x, 1, n) :0:15);
  writeln('     Сумма итеративно: ', sum_iterative(x, n) :0:15);
  writeln('arcth(x) аналитически: ', ln((1 + x) / (1 - x)) / 2 :0:15);
  readln
end.
Но, если чувствуете уверенность в Ваших знаниях, используйте мой второй вариант рекурсивной функции. Не забудьте ещё вызов подправить.

Добавлено через 53 минуты
Для полноты картины.

Вариант с промежуточной функцией, простой и понятный, тоже для сдачи подойдёт:
Pascal
1
2
3
4
5
6
7
8
9
10
function recursive(x, xk: real; k, kmax: integer): real;
begin
  if k = kmax then recursive := xk / k
  else recursive := recursive(x, xk * x * x, k + 2, kmax) + xk / k
end;
 
function sum_recursive(x: real; n: integer): real;
begin
  sum_recursive := recursive(x, x, 1, 2 * n - 1)
end;
Более быстрый вариант с вложенной функцией (меньшее число формальных параметров у вложенной рекурсивной функции):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function sum_recursive(x: real; n: integer): real;
var
  kmax: integer;
  function recursive(xk: real; k: integer): real;
  begin
    if k = kmax then recursive := xk / k
    else recursive := recursive(xk * x * x, k + 2) + xk / k
  end;
begin
  kmax := 2 * n - 1;
  sum_recursive := recursive(x, 1)
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2020, 19:14
Помогаю со студенческими работами здесь

Вычислить значение суммы
Вычислить значение суммы (значение n вводится с клавиатуры) при помощи рекурсивной функции и процедуры: ...

Вычислить значение суммы: 1+1/2+1/3+...+1/n
Здраствуйте! Помогите пожалуйста составить программу для 1)Программа вводит натуральное число n и вычисляет значение суммы: ...

Вычислить значение суммы
Помогите решить задачу с помощью процедуры и функций,срочно. 1)Вычислить S=y+t+u, где y=сумма K=1 до m (sqrt(a)+a), t=сумма k=1 до m...

Вычислить значение суммы
\sum_{i=1}^{n} \frac{i{(i-1)}^{2}}{{(i-2)}^{2}} Можете помочь решить.

Вычислить значение суммы
на фотке уравнение S=\sum_{i=1}^{20}\left(i^2-3i+1 \right)


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru