Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9

Вычислить сумму ряда

05.06.2013, 16:40. Показов 3376. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такой ряд : y=(2/1)+(4/3)+(6/5)+..+(s/s-1)

Lisp
1
2
3
4
5
6
(defun func(s)  
(do ((sum 0))((s<= 2) sum)  
(setq sum (+ sum (/ s (- s 1))))  
(setq s (+ s 2) 
)) 
(func 10)
Куда лыжи не едут?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2013, 16:40
Ответы с готовыми решениями:

Вычислить сумму ряда
помогите решить задачи! ...

Вычислить сумму ряда: S = 1 - 1/2 + 3 - 1/4+....+(2n - 1) -1/2n
1. Заданы три числа a, b, c. Определить сумму положительных чисел. 2. Вычислить сумму ряда: S = 1 - 1/2 + 3 - 1/4+....+(2n - 1) -1/2n

Вычислить сумму ряда используя лямбда-выражение
Здравствуйте! Помогите, пожалуйста, вычисилить вот такую сумму ряда: y = \sum_{i=1}^{m}\sum_{j=1}^{n} ({i}^{j}-i) Нужно каким-то...

19
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.06.2013, 18:25
Сначала функция: (<= s 2). Однако s тогда нужно уменьшать.
Lisp
1
2
3
4
(defun func (s)  
  (do ((s s (- s 2))
       (sum 0 (+ sum (/ s (- s 1)))))
    ((<= s 2) sum)))
Присваивания здесь совершенно не нужны: достаточно апдейтить переменые цикла в самом цикле. Не используйте присваивания без особой нужды. А цикл без тела - это фактически хвостовая рекурсия, то есть красиво и функционально.
0
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
05.06.2013, 18:44  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
Сначала функция: (<= s 2). Однако s тогда нужно уменьшать.
Lisp
1
2
3
4
(defun func (s)  
  (do ((s s (- s 2))
       (sum 0 (+ sum (/ s (- s 1)))))
    ((<= s 2) sum)))
Присваивания здесь совершенно не нужны: достаточно апдейтить переменые цикла в самом цикле. Не используйте присваивания без особой нужды. А цикл без тела - это фактически хвостовая рекурсия, то есть красиво и функционально.
Lisp
1
2
3
4
5
6
(defun func(s)  
(do ((sum 0))((<= s 2) sum)  
(setq sum (+ sum (/ s (- s 1))))  
(setq s (- s 2) ;// <==
)) 
(func 10)
То есть вот так, насколько я понял, или я вообще неправильно писал? Просто после паскаля остаются вредные привычки, да и позабывал уже всё.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.06.2013, 18:50
Синтаксис: не хватает одной скобки в конце. Алгоритм: у вас вылетает на одну итерацию раньше: переменной s присвоилась двойка и сразу после этого цикл закончился, к сумме 2/1 не добавилось. Стиль: ненужные присваивания огорчают.
0
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
05.06.2013, 18:57  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
Синтаксис: не хватает одной скобки в конце. Алгоритм: у вас вылетает на одну итерацию раньше: переменной s присвоилась двойка и сразу после этого цикл закончился, к сумме 2/1 не добавилось. Стиль: ненужные присваивания огорчают.
Нашел наконец как проверять скобки, notepad++ справляется наотлично. Спасибо большое за подсказки , буду продвигаться дальше.
0
05.06.2013, 19:02

Не по теме:

Цитата Сообщение от Odaxelangia Посмотреть сообщение
notepad++ справляется наотлично
Вот есть сомнения насчёт. Главное в лиспокоде - отступы, и по идее ими должен заниматься редактор. Правда, я не знаю, какие есть подходящие "человеческие" (то есть не Emacs и не vim) редакторы для этого. Но, наверное, существуют.

Самозакрывающиеся скобки тоже удобны.

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
05.06.2013, 19:28
Итерация:

Lisp
1
2
3
4
5
6
7
8
(defun sum-i (n)
  (iter (for s from 2 to n) (summing (/ s (- s 1)))))
 
==> sum-i
 
(sum-i 10)
 
==> 11.8289682539682
Рекурсия:

Lisp
1
2
3
4
5
6
7
8
9
(defun sum-r (n)
  (cond ((= n 2) 2)
        (t (+ (/ n (1- n)) (sum-r (1- n))))))
 
==> sum-r
 
(sum-r 10)
 
==> 11.8289682539682
Добавлено через 4 минуты
Функционал:

Lisp
1
2
3
4
5
6
7
8
(defun sum-f (n &optional r)
  (if (= n 1) (apply '+ r) (sum-f (1- n) (cons (/ n (1- n)) r))))
 
==> sum-f
 
(sum-f 10)
 
==> 11.8289682539683
Расхождение в последнем разряде - на совести HomeLisp
1
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
06.06.2013, 20:52  [ТС]
И ещё небольшой вопрос
Для произведения код
Lisp
1
2
3
4
5
6
7
8
(defun func2 (sp)               ; название функции func2, sp - параметр
 (setq rez 1)                   ; rez := 1
 (setq i 1)                         ; i := 1
 (dolist (el sp rez)                ; цикл по списку, el - элемент, i - номер
(setq rez (* rez (+ 1 (/ (exp (* i el)) i)))) ; rez := rez * (e[i]*el) / i
(setq i(+ i 1))                     ; i := i + 1
))
(func3  '(1 5 2 3))
А для суммы?
Lisp
1
2
3
4
5
6
7
8
(defun func3 (sp)               ; название функции func3, sp - параметр
 (setq rez 0)                   ; rez := 0
 (setq i 1)                         ; i := 1
 (dolist (el sp rez)                ; цикл по списку, el - элемент, i - номер
(setq rez (+ rez (+ i (/ exp (* i el) i))))    ; rez := rez + (1 / e^x[i]/i)
(setq i(+ i 1))                     ; i := i + 1
))
(func3  '(1 5 2 3))
Правильно ли?
Изображения
  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
06.06.2013, 21:06
С виду - правильно. Но это не по-лисповски, а по-паскалишному. А вот вызов - просто неправильный. В обоих случаях. Параметр sp по смыслу - это число членов суммы / произведения. Зачем же ты суешь туда список?
0
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
06.06.2013, 21:36  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
С виду - правильно. Но это не по-лисповски, а по-паскалишному. А вот вызов - просто неправильный. В обоих случаях. Параметр sp по смыслу - это число членов суммы / произведения. Зачем же ты суешь туда список?
Список вписал , потому что задан список чисел X и нужно вычислить выражение , где i - порядковый номер элемента.То есть вроде функция должна вызываться с параметром списка.Не пойму тогда что вызывать? Просто с вызовом числа? А список где формируется тогда?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
06.06.2013, 21:55
Да, виноват, sp - это список. Должно работать.
0
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
07.06.2013, 07:40  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Да, виноват, sp - это список. Должно работать.
Не компилит.Вываливается
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun func3 (sp)              
 (setq rez 0)          
 (setq i 1)                     
 (dolist (el sp rez) 
(setq rez (+ rez (+ i (/ 1 (exp(/ (*i el) i) ) ) ) ) )
(setq i(+ i 1))
))
 
(func3  '(1 5 2 3))
==> (func 3 '(1 5 2 3))
 
EVFUN: Не найдуна функция *I
==>ERRSTATE
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
07.06.2013, 10:01
между * и i вставь пробел.
0
Заблокирован
07.06.2013, 13:11
Цитата Сообщение от Odaxelangia Посмотреть сообщение
Правильно ли?
На ноль как собрались делить?
0
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
07.06.2013, 14:23  [ТС]
Перепроверил, запилил заново, вроде скомпилялось.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun func3 (sp)              
 (setq rez 0)          
 (setq i 1)                     
 (dolist (el sp rez) 
(setq rez (+ rez (+ i (/ 1 (exp (/ el i))))))
(setq i(+ i 1))
))
(func3  '(1 5 2 3))
 
==> func3
(func3  '(1 5 2 3))
 
 
==> 11.4357481115689
 
Создана глобальная переменная rez
Создана глобальная переменная i
(func3  '(2 3))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
07.06.2013, 14:26
Цитата Сообщение от Odaxelangia Посмотреть сообщение
Создана глобальная переменная rez Создана глобальная переменная i
- я же говорю, стиль кода не слишком хорош...
0
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
07.06.2013, 14:37  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- я же говорю, стиль кода не слишком хорош...
По-лисповому я так понял нужно все присваивания убрать внутрь dolist?
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
07.06.2013, 14:43
По-лисповому присваивания вообще не нужны.
1
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 9
07.06.2013, 14:45  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
По-лисповому присваивания вообще не нужны.
Пичяльбида, ушел курить манул по рекурсиям.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
07.06.2013, 14:53
Да не в рекурсиях дело. Присваивание - это изменение байндинга. А вы не изменяйте. Обозначили - пускай так и живёт.

Конечно, при большом желании можно и переприсвоить. Только сначала нужно осознать это желание и понять, что по-другому будет хуже.

А глобальные переменные здесь не нужны. Создавайте локальные: например, с помощью let или do. Глобальным переменным в лиспе отводится особая роль: в основном люди стараются использовать их динамические свойства. Кстати, глобальные тоже явно создаются с помощью defvar или defparameter.

Обратите внимание на замечательное свойство цикла do: он позволяет одновременно манипулировать и переменными-счётчиками и переменными-аккумуляторами. Часто его тело пусто, и достаточно только изменять значения переменных между итерациями. Такое решение можно с полным правом считать функциональным.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2013, 14:53
Помогаю со студенческими работами здесь

Найти частичную сумму ряда
помогите решить задачу. \sum \limits_{i=1}^n \frac{\sin x}{x^i}

Помогите найти сумму ряда, пожалуйста!
Вычислить сумму ряда: S=1-1/2+3-1/4+...+(2n -1)-1/2n

Нужно подсчитать сумму ряда на Lispe
Y=sqrt(3+sqrt(6+sqrt(9+...sqrt(3*n))))

Посчитать с заданной точностью сумму бесконечного ряда
Задача:посчитать с заданной точностью сумму бесконечного ряда,каждый член которого задается формулой: x^k/k!( что есть exp(x)) Не могу...

Определить функционал, вычисляющий частичную сумму степенного ряда
Помогите,пожалуйста,Определить функционал ( Sum1 a k x), вычисляющий частичную сумму степенного ряда


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 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