Наибольший Общий делитель - Prolog

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

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

Добрвй день! ! Нужно найти НОД списка . Всё работает только для списков как [6,9,12] ,[5,20,25], а для списка [9,18,25] выводит zero_divisor. Помогите исправить пожалуйста . ВОт листинг
Листинг программы
  1. div(X,Y,R):-Y=0,R=X,!.
  2. div(X,Y,R):-Y>X, div(Y,X,R),!.
  3. div(X,Y,R):-X>Y ,R1 is X mod Y,div(Y,R1,R).
  4. divizor(X,Y):-divizor(X,_,Y),!.
  5. divizor([X,Y], Rez, Rez):-div(X,Y,Rez).
  6. divizor([X,Y|R],Rez,R1):-div(X,Y,Rez),divizor([Y|R],Rez,R1).
Спасибо!!

Решение задачи: «Наибольший Общий делитель»

textual
Листинг программы
  1. div(X, 0, X) :- !.
  2. div(X, Y, D) :-
  3.     R is X mod Y,
  4.     div(Y, R, D).
  5.  
  6. divizor([H|T], Rez) :-
  7.     divizor(T, H, Rez).
  8.    
  9. divizor([], Rez, Rez).
  10. divizor([H|T], R, Rez) :-
  11.     div(H,R,Rn),
  12.     divizor(T, Rn, Rez).

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

  1. В начале кода стоит строка, которая говорит, что если делитель равен нулю, то результат деления равен самому делителю: div(X, 0, X) :- !.
  2. В следующей строке кода стоит правило, которое позволяет найти наибольший общий делитель (НОД) двух чисел: div(X, Y, D) :- R is X mod Y, div(Y, R, D).
  3. Далее идет определение функции divizor, которая принимает три аргумента: список чисел, результат деления и текущий элемент списка.
  4. Внутри функции divizor идет вызов функции div с аргументами: T (оставшаяся часть списка чисел), H (текущий элемент списка) и R (результат деления).
  5. Если список пуст, то результат деления равен самому делителю.
  6. Если список не пуст, то из него извлекается первый элемент, вызывается функция div для нахождения результата деления и вызывается функция divizor для обработки оставшейся части списка.

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


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

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

14   голосов , оценка 4.143 из 5

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

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

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