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

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

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

Добрвй день! ! Нужно найти НОД списка . Всё работает только для списков как [6,9,12] ,[5,20,25], а для списка [9,18,25] выводит zero_divisor. Помогите исправить пожалуйста . ВОт листинг
Спасибо!!

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

textual
Листинг программы
div(X, 0, X) :- !.
div(X, Y, D) :- 
    R is X mod Y,
    div(Y, R, D).
 
divizor([H|T], Rez) :-
    divizor(T, H, Rez).
    
divizor([], Rez, Rez).
divizor([H|T], R, Rez) :-
    div(H,R,Rn),
    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
Похожие ответы