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

Определить функцию add_to, которая суммирует первые n натуральных чисел

07.10.2015, 20:37. Показов 1088. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить

Определить функцию add_to, которая суммирует первые n нату-
ральных чисел:
(add_to n)=1+2+…+n.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2015, 20:37
Ответы с готовыми решениями:

Определить функцию add_all_numbers, которая суммирует все числовые элементы списка
Определить функцию add_all_numbers, которая суммирует все числовые элементы списка. Например: >(add_all_numbers ‘(a 1 b (b 4) 2 3)) ...

Массив чисел типа double передать в функцию, которая суммирует и возвращает сумму и массив
Написать функцию, которой передается массив чисел типа double, Функция суммирует элементы этого массива и возвращает полученную сумму и...

Задано натуральное число N. Напишите программу, которая находит первые N натуральных нечетных чисел
Задано натуральное число N. Напишите программу, которая выводит первые N натуральных нечётных чисел. Формат входных данных Во входном...

11
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
07.10.2015, 21:12
Пожалуйста
Lisp
1
(defun add-to (n) (loop for x from 0 to n summing x))
Добавлено через 18 минут
Viktoria55, Если информация была полезной не забывайте, что на форуме принято благодарить
4
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 25
07.10.2015, 22:10  [ТС]
Спасибо
а как ввести чтобы эта функция считала если подставить число вместо n?
я ввожу но почему то у меня сумма не выводится
0
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
07.10.2015, 22:32
Viktoria55,
Lisp
1
(add-to 10)
, что именно вам не понятно?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
08.10.2015, 00:45
Lisp
1
2
3
; racket-lang.org
(define (foo n)
  (/ (* n (add1 n)) 2))
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
08.10.2015, 09:15
Lisp
1
2
3
4
5
6
7
8
(defun add-to (n)
  (if (zerop n) 0 (+ n (add-to (- n 1)))))
 
==> add-to
 
(add-to 100)
 
==> 5050
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
08.10.2015, 12:00
Экскурс в историю.

Когда Гаусс поступил в школу, на первом же уроке математики преподаватель чтобы занять чем-то учеников дал им задачу сложить все натуральные числа от 1 до 100 включительно. Через минуту Карл Фридрих сообщил о том что задание решено, чем повергнул в иступление всю аудиторию. После этого он был рекомендован учителем "на повышение". И правда, сумма ряда представима в виде
(100 + 0) + (99 + 1) + (98 + 2) + ... (51 + 49) + 50, что с учетом четности в итоге выливается в https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{0}^{n} = \frac{n (n + 1)}{ 2 }. Учитывая что один из множителей числителя в любом случае кратен двум, подсчет в уме становится тривиальной задачей.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
08.10.2015, 13:17
Да, дорогой, castorsky, формулу суммы арифметической прогрессии никто не отменял... Но, при всем моем громадном уважении к К.Ф.Гауссу, применение этой формулы делает задачу весьма частной. Давайте чуть-чуть обобщим задачу: дана функция одного аргумента f; подсчитать f(1)+f(2)+...+f(n). Приведенное мной решение допускает очень естественное обобщение:

Lisp
1
2
3
4
5
6
(defun add-to (f n)
  (if (zerop n) (funcall f 0) (+ (funcall f n) (add-to f (- n 1)))))
 
(add-to (lambda (x) (/ (* x x) (+ x x 1))) 10)
 
==> 368033669/14549535
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.10.2015, 14:26
Catstail, продолжим развитие темы. Мне кажется, что "естественное обобщение" - это
Lisp
1
(sum (list-from-to 1 n)) ==> (sum (map f (list-from-to 1 n)))
, что при дальнейшем обобщении приводит к катаморфизмам, трансдьюсерам (насколько я ничего в них не понимаю, мне кажется, что ваша функция "вручную" эмулирует именно эту концепцию), редьюсерам, фьюзам и прочим интересным вещам.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
08.10.2015, 14:44
"Андрэй, там было много новых слов..." (Осенний марафон)

Если не нравится так, можно использовать накопительный параметр:

Lisp
1
2
(defun add-to (f n &optional (s 0))
  (if (zerop n) s (add-to f (- n 1)  (+ (funcall f n) s))))
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.10.2015, 15:00
Catstail, я даже не про приведение рекурсии к хвостовой форме через аккумулятор. А насчет "много новых слов" - при естественных обобщениях всегда приходится вводить новые слова - для краткого обозначения новых концепций и уровней абстракции, которые как раз и являются этим "естественным обобщением". Катаморфизм как апофеоз концепции свертки применительно к частному случаю - линейной коллекции (списку) по моноиду сложения, трансдьюсер/редьюсер - если не ошибаюсь, концепция протаскивания перед этой сверткой предварительного применения к коллекции некоторой композиции функций, без создания новой коллекции - сразу, на лету. Фьюзы если не ошибаюсь из почти той же серии, но более общие оптимизации на структурах данных (в данном случае списках). По ключевым словам можно поискать и найти немало интересного
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
08.10.2015, 16:23

Не по теме:

Catstail, я просто поделился однажды прочитанным. Безотносительно к решениям, флейма ради.


А так, безусловно свертка. Мы же не знаем сходящийся ряд, расходящийся, гармонический, сферический в вакууме и т.д.

Добавлено через 9 минут
Равно как и область определения функции, передаваемой как аргумент. А если функция f(x) = 1 / x ? Бам! и ошибка времени выполнения.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2015, 16:23
Помогаю со студенческими работами здесь

Напишите программу которая находит первые n натуральных чисел у которых остаток от деления на 3 равен 1
Задано число n.Напишите программу которая находит первые n натуральных чисел у которых остаток от деления на 3 равен 1 на с++ вот написал...

Напишите программу, которая вводит натуральное число N и выводит первые N чётных натуральных чисел
Напишите программу, которая вводит натуральное число N и находит сумму всех натуральных чисел от 1 до N. Используйте сначала цикл с...

Напишите программу, которая вводит натуральное число n и выводит первые n четных натуральных чисел
напишите программу которая вводит натуральное число n и выводит первые n четных натуральных чисел (pascal)

Напишите программу, которая вводит натуральное число N и выводит первые N чётных натуральных чисел
Напишите программу, которая вводит натуральное число N и выводит первые N чётных натуральных чисел.

Составить функцию, которая для двух натуральных чисел
Составить функцию, которая для двух натуральных чисел a и b находит наибольший общий делитель, используя алгоритм Эвклида. Суть алгоритма в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru