Сумма четных из первых N чисел Фибоначчи - Prolog
Формулировка задачи:
Помогите пожалуйста с задачей: Дано число. Проверить, является ли оно суммой четных чисел из n первых чисел Фибоначчи. Найти число n
Нужно что бы выводило номер на котором будет как раз будет сумма числа. Например для 44 это будет 10. Но и еще что бы выводило позиции до следующего четного числа. Т.е. вводим S=44, а в ответе выдало 10,11,12
Листинг программы
- fib2(N, FIB):-fib2(N, FIB, 1, 1, 0).
- fib2(N, FIB, I, PR1, PR2):-
- I<N,
- I1 is I+1,
- FIB1 is PR1+PR2,
- fib2(N, FIB, I1, FIB1, PR1).
- fib2(N, FIB, N, FIB, _).
- chet(X):-F is X mod 2, F == 0.
- sum_chet(N, A):-sum_chet(N, A, 0, 0).
- sum_chet(N, A, I, SUM):-
- I<N,
- I1 is I + 1,
- fib1(I1, FIBNUM),
- ( chet(FIBNUM) -> SUM1 is SUM + FIBNUM ; SUM1 is SUM ),
- sum_chet(N, A, I1, SUM1).
- sum_chet(N, A, N, A).
- check_num1(NUM, N):-check_num1(NUM, N, 0, 0).
- check_num1(NUM, N, ANS, I):-
- ANS =< NUM,
- I1 is I+1,
- sum_chet(I1, ANS1),
- ( ANS1 == NUM -> ANS2 is NUM+1,
- write('Yep, this is a sum of EVEN Fibonacci numbers!'); ANS2 is ANS1 ),
- check_num1(NUM, N, ANS2, I1).
- check_num1(_, N, _, N).
Решение задачи: «Сумма четных из первых N чисел Фибоначчи»
textual
Листинг программы
- sum_chet(N, A, I, SUM):-
- I<N,
- I1 is I + 1,
- fib1(I1, FIBNUM), /* вот тута<-----------------------
- ( chet(FIBNUM) -> SUM1 is SUM + FIBNUM ; SUM1 is SUM ),
- sum_chet(N, A, I1, SUM1).
Объяснение кода листинга программы
sum_chet(N, A, I, SUM):-
- определение функции с четырьмя аргументами: N (количество чисел Фибоначчи для которых нужно найти сумму четных), A (неизвестное значение), I (индекс текущего числа Фибоначчи), SUM (сумма четных чисел Фибоначчи).I<N
- проверка, что индекс текущего числа Фибоначчи меньше заданного количества чисел.I1 is I + 1
- присваивание нового значения индексу, увеличивая его на единицу.fib1(I1, FIBNUM)
- вызов функции fib1, которая вычисляет число Фибоначчи с заданным индексом. Значение числа Фибоначчи сохраняется в переменной FIBNUM.( chet(FIBNUM) -> SUM1 is SUM + FIBNUM ; SUM1 is SUM)
- условная конструкция, которая проверяет, является ли число FIBNUM четным. Если это так, то к сумме SUM добавляется значение FIBNUM, иначе значение SUM1 остается неизменным.sum_chet(N, A, I1, SUM1).
- рекурсивный вызов функции sum_chet с новыми значениями аргументов: N, A, I1, SUM1. Список вызовов функции sum_chet:sum_chet(N, A, I, SUM).
sum_chet(N, A, I1, SUM1).
sum_chet(N, A, I2, SUM2).
sum_chet(N, A, I3, SUM3).
sum_chet(N, A, I4, SUM4).
sum_chet(N, A, I5, SUM5).
sum_chet(N, A, I6, SUM6).
sum_chet(N, A, I7, SUM7).
sum_chet(N, A, I8, SUM8).
sum_chet(N, A, I9, SUM9).
sum_chet(N, A, I10, SUM10).
sum_chet(N, A, I11, SUM11).
sum_chet(N, A, I12, SUM12).
sum_chet(N, A, I13, SUM13).
sum_chet(N, A, I14, SUM14).
sum_chet(N, A, I15, SUM15).
sum_chet(N, A, I16, SUM16).
sum_chet(N, A, I17, SUM17).
sum_chet(N, A, I18, SUM18).
sum_chet(N, A, I19, SUM19).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д