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

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

05.06.2013, 16:40. Показов 3361. Ответов 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru