5 / 3 / 2
Регистрация: 11.11.2013
Сообщений: 349

Вычисление чисел Фибоначчи и номера числа Фибоначчи с накопителями

18.10.2015, 14:57. Показов 5682. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется три накопителя - текущий номер, само число Фибонначи и предыдущее число последовательности.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2015, 14:57
Ответы с готовыми решениями:

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

Определить номер N числа Фибоначчи, при котором сумма N первых чисел Фибоначчи превышает заданное число М
Определить номер N числа Фибоначчи, при котором сумма N первых чисел Фибоначчи превышает заданное число М. Числа Фибоначчи определяются ...

Последовательность чисел. Вычислить сумму тех, порядковые номера которых- числа Фибоначчи.
Дана непустая последовательность натуральных чисел за которой следует 0 Вычислить сумму тех из них, порядковые номера которых- числа...

10
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
18.10.2015, 16:00
Ну давайте писать вместе.

1) Работа с накопителями - служебная операция, конечному пользователю не нужная. Значит, должен быть итоговый предикат с пользовательским интерфейсом и основной предикат, с накопителями

2) Что требуется? Получить число по его номеру. Значит, у итогового предиката 2 аргумента: входной и выходной:
Prolog
1
fib(N, F).
3) Как этот предикат реализуется? Как вызов основного предиката с некоторыми начальными значениями накопителей:
Prolog
1
2
fib(N, F) :-
    fib_acc(N, StartN, StartF, StartFOld, F).
4) Погуглив номера чисел Фибоначчи, конкретизируем эти значения:
Prolog
1
2
fib(N, F) :-
    fib_acc(N, 1, 1, 0, F).
5) Теперь можно писать основной предикат. Прежде всего напишем правило выхода из рекурсии:
Prolog
1
fib_acc(N, N, F, _, F) :- !.
Смысл его в том, что когда накопленный номер совпадет с заданным, накопленное число и станет результатом. Предыдущее
значение в этом правиле нас не интересует. И обязательно отсечение.

6) Осталось только написать шаг рекурсии. Тут, мне кажется, всё очевидно:
Prolog
1
2
3
4
5
fib_acc(N, CurN, CurF, CurFOld, F) :-
    NewN is CurN + 1,
    NewF is CurF + CurFOld,
    NewFOld is CurF,
    fib_acc(N, NewN, NewF, NewFOld, F).
1
5 / 3 / 2
Регистрация: 11.11.2013
Сообщений: 349
18.10.2015, 16:15  [ТС]
У меня версия какая-то другая. Prologus называется... Не подходит что ли...
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
18.10.2015, 16:33
Что за Prologus, кто делает, откуда берут?
И что именно не так? Покажите.
0
5 / 3 / 2
Регистрация: 11.11.2013
Сообщений: 349
19.10.2015, 19:36  [ТС]
Написано Версия 1.0 системы Prologus.
Боголюбов Д.П. (МИЭМ)

Добавлено через 9 минут
Написал:
Prolog
1
2
3
4
5
fib1(_n,_x,_n,_y,_x):-!.
fib1(_n,_x,_m,_y,_x):- _s1=ВЫЧ(_m+_y), _m1=_y, _y1=_s1, fib1(_n,_x,_m1,_y1,_s1).
 
fib(_n,_x):-fib1(_n,_x,1,1,_s).
?-fib(5,_F).
Я получаю _F = 8.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
20.10.2015, 03:20
Неужели этот Prologus глотает только односимвольные имена, чтобы так всех запутать?

Я ведь вроде всё понятно объяснил. А Вы при переписывании налепили какой-то отсебятины..

Итак, сначала. У меня порядок параметров служебного предиката был не такой:
Prolog
1
2
fib(N, F) :-
    fib_acc(N, StartN, StartF, StartFOld, F).
Я буду его придерживаться, мне кажется, логично: вход, накопители, выход.
С учётом конкретных числовых значений
Prolog
1
2
fib(N, F) :-
    fib_acc(N, 1, 1, 0, F).
Значит, при переходе на Prologus будет что-то вроде
Prolog
1
fib(_n,_x) :- fib1(_n,1,1,0,_x).
У Вас же почему-то осталось только 2 числа, один накопитель не инициализирован

Первое правило основного предиката - пойдет Ваше, только порядок поменять под мой
Prolog
1
fib1(_n,_n,_x,_y,_x) :- !.
А вот во втором Вы конкретно напутали, даже с Вашим порядком параметров.
Должно быть примерно так:
Prolog
1
fib1(_n,_m,_x,_y,_f) :- _m1=ВЫЧ(_m+1), _x1=ВЫЧ(_x+_y), _y1=_x, fib1(_n,_m1,_x1,_y1,_f).
1
5 / 3 / 2
Регистрация: 11.11.2013
Сообщений: 349
20.10.2015, 16:24  [ТС]
Black Fregat, да... Хорошо, а предыдущее число последовательности вывести?
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
18.11.2015, 14:33
Я так понимаю,это выглядит так
Prolog
1
2
3
4
fib(_n,_x) :- fib1(_n,1,1,0,_x).
fib1(_n,_n,_x,_y,_x) :- !.
fib1(_n,_m,_x,_y,_f) :- _m1=ВЫЧ(_m+1), _x1=ВЫЧ(_x+_y), _y1=_x, fib1(_n,_m1,_x1,_y1,_f).
?-fib(5,_x).
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
25.11.2015, 14:04
Black Fregat, сделала,как вы написали,не выводит.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
25.11.2015, 14:20
Я не знаю, что именно у Вас не так сделано - Вы не привели ни файл, ни результаты работы..

У меня работает:
Миниатюры
Вычисление чисел Фибоначчи и номера числа Фибоначчи с накопителями   Вычисление чисел Фибоначчи и номера числа Фибоначчи с накопителями  
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
25.11.2015, 14:47
Да,у меня тоже сейчас работает,извините) одну черточку пропустишь и летит все к чертям
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2015, 14:47
Помогаю со студенческими работами здесь

Дана последовательность натуральных чисел, за которой 0, вычислить сумму тех, номера которых - числа фибоначчи
Помогите исправить проблему: после 3 числа условие n=t не работает и элементы последовательности не суммируются, какое условие для записи в...

Рекурсивная функция: вычисление суммы чисел Фибоначчи, пока они меньше введенного числа
Вроде примитивная задача, но реализовать не смог, да и нигде такого не обсуждалось, так что вот: Требуется реализовать рекурсивную функцию,...

Дана непустая последовательность натуральных чисел, за которой следует 0. Вычислить сумму тех из них, порядковые номера которых - числа Фибоначчи.
Уважаемые форумчане, не могли бы вы помочь. Нужно срочно решить задачу в visual basic, но совершенно ничего не получается. Условие: Дана...

По заданному числу Фибоначчи найти предыдущее и следующее числа Фибоначчи
Дано целое число N(>1), которое является числом Фибоначчи: N=Fk. Найти целые числа Fk-1 и Fk+1 - предыдущие и последующее числа Фибоначчи. ...

По заданному числу Фибоначчи найти предыдущее и следующее числа Фибоначчи
Дано целое число N(>1), которое является числом Фибоначчи: N=Fk. Найти целые числа Fk-1 и Fk+1 - предыдущие и последующее числа...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru