Сумма четных из первых N чисел Фибоначчи - Prolog

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с задачей: Дано число. Проверить, является ли оно суммой четных чисел из n первых чисел Фибоначчи. Найти число n
Листинг программы
  1. fib2(N, FIB):-fib2(N, FIB, 1, 1, 0).
  2. fib2(N, FIB, I, PR1, PR2):-
  3. I<N,
  4. I1 is I+1,
  5. FIB1 is PR1+PR2,
  6. fib2(N, FIB, I1, FIB1, PR1).
  7. fib2(N, FIB, N, FIB, _).
  8. chet(X):-F is X mod 2, F == 0.
  9. sum_chet(N, A):-sum_chet(N, A, 0, 0).
  10. sum_chet(N, A, I, SUM):-
  11. I<N,
  12. I1 is I + 1,
  13. fib1(I1, FIBNUM),
  14. ( chet(FIBNUM) -> SUM1 is SUM + FIBNUM ; SUM1 is SUM ),
  15. sum_chet(N, A, I1, SUM1).
  16. sum_chet(N, A, N, A).
  17. check_num1(NUM, N):-check_num1(NUM, N, 0, 0).
  18. check_num1(NUM, N, ANS, I):-
  19. ANS =< NUM,
  20. I1 is I+1,
  21. sum_chet(I1, ANS1),
  22. ( ANS1 == NUM -> ANS2 is NUM+1,
  23. write('Yep, this is a sum of EVEN Fibonacci numbers!'); ANS2 is ANS1 ),
  24. check_num1(NUM, N, ANS2, I1).
  25. check_num1(_, N, _, N).
Нужно что бы выводило номер на котором будет как раз будет сумма числа. Например для 44 это будет 10. Но и еще что бы выводило позиции до следующего четного числа. Т.е. вводим S=44, а в ответе выдало 10,11,12

Решение задачи: «Сумма четных из первых N чисел Фибоначчи»

textual
Листинг программы
  1. sum_chet(N, A, I, SUM):-
  2.     I<N,
  3.     I1 is I + 1,
  4.         fib1(I1, FIBNUM),                                                             /* вот тута<-----------------------
  5.     ( chet(FIBNUM) -> SUM1 is SUM + FIBNUM ; SUM1 is SUM ),
  6.     sum_chet(N, A, I1, SUM1).

Объяснение кода листинга программы

  1. sum_chet(N, A, I, SUM):- - определение функции с четырьмя аргументами: N (количество чисел Фибоначчи для которых нужно найти сумму четных), A (неизвестное значение), I (индекс текущего числа Фибоначчи), SUM (сумма четных чисел Фибоначчи).
  2. I<N - проверка, что индекс текущего числа Фибоначчи меньше заданного количества чисел.
  3. I1 is I + 1 - присваивание нового значения индексу, увеличивая его на единицу.
  4. fib1(I1, FIBNUM) - вызов функции fib1, которая вычисляет число Фибоначчи с заданным индексом. Значение числа Фибоначчи сохраняется в переменной FIBNUM.
  5. ( chet(FIBNUM) -> SUM1 is SUM + FIBNUM ; SUM1 is SUM) - условная конструкция, которая проверяет, является ли число FIBNUM четным. Если это так, то к сумме SUM добавляется значение FIBNUM, иначе значение SUM1 остается неизменным.
  6. sum_chet(N, A, I1, SUM1). - рекурсивный вызов функции sum_chet с новыми значениями аргументов: N, A, I1, SUM1. Список вызовов функции sum_chet:
  7. sum_chet(N, A, I, SUM).
  8. sum_chet(N, A, I1, SUM1).
  9. sum_chet(N, A, I2, SUM2).
  10. sum_chet(N, A, I3, SUM3).
  11. sum_chet(N, A, I4, SUM4).
  12. sum_chet(N, A, I5, SUM5).
  13. sum_chet(N, A, I6, SUM6).
  14. sum_chet(N, A, I7, SUM7).
  15. sum_chet(N, A, I8, SUM8).
  16. sum_chet(N, A, I9, SUM9).
  17. sum_chet(N, A, I10, SUM10).
  18. sum_chet(N, A, I11, SUM11).
  19. sum_chet(N, A, I12, SUM12).
  20. sum_chet(N, A, I13, SUM13).
  21. sum_chet(N, A, I14, SUM14).
  22. sum_chet(N, A, I15, SUM15).
  23. sum_chet(N, A, I16, SUM16).
  24. sum_chet(N, A, I17, SUM17).
  25. sum_chet(N, A, I18, SUM18).
  26. sum_chet(N, A, I19, SUM19).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы