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

Ряд Фибоначчи

02.06.2014, 22:23. Показов 2078. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер уважаемые. Буду рад, если сможете помочь.
На вход подается число. Нужно вывести его в виде списка в с.с. Фибоначчи.
пример: вводим число 25. в ряду Фибоначчи (1 2 3 5 8 13 21 34) оно стоит между 21 и 34. Берем число, стоящее рядом с 25, но меньше его , т.е. 21. Т.к. 25>21, то начинаем список с 1. далее вычитаем 25-21 = 4. запоминаем 4 и идем к следующему числу в ряду Фибоначчи (приближаемся к началу ряда) - к числу 13. 4<13, значит в список ставим 0. идем дальше по ряду. 4<8, значит в список ставим 0. идем дальше по ряду. 4<5, в список ставим 0. идем дальше по ряду. 4>3, в список ставится 1. отнимаем 4-3=1. запоминаем 1 и идем дальше по ряду. 1<2, в список ставим 0. идем дальше по ряду. 1=1, в список ставим 1.
в итоге должно получится:
вводим: 25
на выходе: 1000101
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2014, 22:23
Ответы с готовыми решениями:

Ряд Фибоначчи
Добрый день. Помогите пожалуйста решить задачу очень нужно. :( Запрограммируйте с помощью предложения DO: 1) функцию fib(n) ,...

Ряд Фибоначчи
Условия задачи такие. Найти порядковый номер начала наиболее длинной подпоследовательности, соответствующей последовательности Фибоначчи....

ряд фибоначчи
программа должна удалять из массива числа фибоначчи. проблема в том, что она запоминает последнее число из ряда и сравнивает...

19
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.06.2014, 23:09
так подробно описано решение. В чем проблема?
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 7
02.06.2014, 23:16  [ТС]
собственно проблема в реализации. Lisp для меня совсем новый язык, а задача уже стоит. потому и прошу помощи у знающих людей.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
03.06.2014, 00:47
Tiroll, ряд Фибоначчи начинается так: 0, 1, 1, 2, 3, 5, .... Таким образом у Вас недочет и соответственно будет иной результат. Может Вы на другом языке покажете решение? Потом сравним с лиспом.
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
03.06.2014, 02:00
Лучший ответ Сообщение было отмечено Tiroll как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun f (n)
            (loop
               for first = 0 then second
               and second = 1 then (+ second first)
               if (< second n) collect second into res
               else return
                 (loop 
                    for a in (nreverse res)
                    and num = n then (if (> num a) (- num a) num)
                    if (>= num a)
                    collect 1 else collect 0
                    until (= num a))))
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
03.06.2014, 11:59
Лучший ответ Сообщение было отмечено Tiroll как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun task (n &optional (res nil) (fib nil))
  (cond ((null fib)
         (let ((c 1) (p 0) (a 0) (r nil))
           (iter (for i upfrom 1) (collecting c into r) 
                                  (setq a (+ c p) p c c a)
                                  (when (> a n) (return (task n res (reverse r)))))))
        ((zerop n) (reverse res))
        ((< n (car fib)) (task n (cons 0 res) (cdr fib)))
        (t (task (- n (car fib)) (cons 1 res) (cdr fib)))))
     
==> task
 
(task 25)
 
==> (1 0 0 0 1 0 1)
2
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 7
03.06.2014, 14:39  [ТС]
Catstail, спасибо Вам!)
только возник вопрос. я знаю, что Iter - это внешний пакет в Common Lisp, вопрос - где его скачать можно? (порылся в интернете - не нашел), буду благодарен за ссылку.

Добавлено через 1 час 4 минуты
немного неправильно работает. при вводе числа, например, 28 на выходе получается 100101, а должно - 1001010. последний символ теряется.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
03.06.2014, 14:40
Lisp
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
;;racket
(require racket/match)
 
;;test list
(define TEST-LST '(0 1 25 1000 asdf (1 2 3 4) "asdf"))
 
;;main wraper
(define (main n) (foo n (reverse (get-fibs n)) null))
 
;;main func
(define/match (foo n lst acc . rst)
  [(_ null _ null) acc]
  [(_ _ _ null) (if (> (car lst) n)
                    (foo n (cdr lst) (append acc (list 0)))
                    (foo (- n (car lst)) (cdr lst) (append acc (list 1))))])
 
;list fibs
(define (get-fibs n)
  (if (or (not (number? n)) (< n 0)) null
      (do ([i 0 j] [j 1 (+ j i)] [acc '(0)]) ((> j n) acc)
        (set! acc (append acc (list j))))))
 
;test function
(define (test lst)
  (unless (null? lst)
    (displayln ";running tests:")
    (for ([i lst]) (printf ";returned ~a, source ~s~n" (main i) i)))
  (displayln ";have fun!"))
 
(test TEST-LST)
;running tests:
;returned (1), source 0
;returned (1 0 1), source 1
;returned (1 0 0 0 1 0 1 0 1), source 25
;returned (1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1), source 1000
;returned (), source asdf
;returned (), source (1 2 3 4)
;returned (), source "asdf"
;have fun!
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
03.06.2014, 14:40
Вот одна из версий:
Вложения
Тип файла: zip Iterate.zip (37.0 Кб, 5 просмотров)
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
03.06.2014, 14:43
Цитата Сообщение от Tiroll Посмотреть сообщение
на выходе получается 100101, а должно
1 0 0 1 0 1 0 0 1
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
03.06.2014, 14:48
Цитата Сообщение от Tiroll Посмотреть сообщение
я знаю, что Iter - это внешний пакет в Common Lisp, вопрос - где его скачать можно?
Нужно поставить quicklisp, он сам всё качает вместе с зависимостями и устанавливает как надо.
http://www.quicklisp.org/beta/index.html
Информацию о библиотеках можно искать на http://quickdocs.org/

Если будут вопросы, пишите.

Добавлено через 1 минуту
И надо иметь в виду, что Catstail большей частью пишет на собственноручно созданном диалекте, а не на CL.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
03.06.2014, 14:50
Tiroll, прокромментируйте пожалуйста.
Цитата Сообщение от castorsky Посмотреть сообщение
ряд Фибоначчи начинается так: 0, 1, 1, 2, 3, 5, ....
Цитата Сообщение от Tiroll Посмотреть сообщение
в ряду Фибоначчи (1 2 3 5 8 13 21 34)
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
03.06.2014, 14:53
Да ладно, каждый имеет право на собственные определения. У Виноградова написано, что последовательность Фибоначчи начинается с двух единиц:
http://dic.academic.ru/dic.nsf... /ФИБОНАЧЧИ
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
03.06.2014, 15:02
Вот я и прошу уточнить, чтобы откорректировать программу. Я просил об этом ранее, но не получил ответа.
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 7
03.06.2014, 15:13  [ТС]
имеется ввиду ряд именно: 1 2 3 5...
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
03.06.2014, 15:16
тогда рабочая лошадка будет такой. Остается непонятной реакция программы на 0 <= n < 2. Я оформил как "не предусмотрено"
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
;list fibs
(define (get-fibs n)
  (if (or (not (number? n)) (< n 2)) null
      (do ([i 1 j] [j 2 (+ j i)] [acc '(1)]) ((> j n) acc)
        (set! acc (append acc (list j))))))
;running tests:
;returned (), source 0
;returned (), source 1
;returned (1 0 0 0 1 0 1), source 25
;returned (1 0 0 0 0 0 0 0 0 1 0 0 0 0 0), source 1000
;returned (), source asdf
;returned (), source (1 2 3 4)
;returned (), source "asdf"
;have fun!
1
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 7
04.06.2014, 09:22  [ТС]
в задаче, к сожалению, требуется именно такое решение(все тот же пример с 28). если брать ряд 1,2,3,5,8,13,21,34 и идти до 1, по принципу, который я описал в самом начале, должно получаться 1001010.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
04.06.2014, 12:27
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
;racket
(require racket/match)
 
;;main wraper
(define (main n) (foo n (reverse (get-fibs n)) null))
 
;;main func
(define/match (foo n lst acc . rst)
  [(_ null _ null) acc]
  [(_ _ _ null) (if (> (car lst) n)
                    (foo n (cdr lst) (append acc (list 0)))
                    (foo (- n (car lst)) (cdr lst) (append acc (list 1))))])
 
;list fibs
(define (get-fibs n)
  (if (or (not (number? n)) (< n 2)) null
      (do ([i 1 j] [j 2 (+ j i)] [acc '(1)]) ((> j n) acc)
        (set! acc (append acc (list j))))))
 
(main 28)
;'(1 0 0 1 0 1 0)
2
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 7
05.06.2014, 15:15  [ТС]
castorsky , прошу прощения, какую версию Lisp Вы используете? (если не затруднит, с ссылкой на скачивание)
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
05.06.2014, 18:27
http://racket-lang.org/

Добавлено через 3 минуты
Запустите DrRacket, в качестве языка выберите racket.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2014, 18:27
Помогаю со студенческими работами здесь

Ряд Фибоначчи
Добрый день. Буду очень рад, если сможете помочь. На вход подается число. Нужно вывести его в виде списка в с.с. Фибоначчи. Пример:...

Ряд Фибоначчи?
Здравствуйте.. Пожалуйста, помогите написать программу, которая выдаст k-ое число из ряда Фибоначии ----- Кто не знает, то рад...

Ряд фибоначчи
написать программу вывода ряда фибоначчи с помощью while или repeat.

Ряд Фибоначчи
Подскажите новичку как сделать в данной вставке чтоб элементы которые я могу получить начинались с первого(в данном случае с третьего) и...

Ряд Фибоначчи
Вычислить сумму первых N членов ряда Фибоначчи.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru