Списки, найти максимальный элемент среди отрицательных из первых n-1 элементов - Prolog

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

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

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

Решение задачи: «Списки, найти максимальный элемент среди отрицательных из первых n-1 элементов»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. get_head(intl,int,intl)
  7. get_neg(intl,intl)
  8. max_el(intl,int)
  9. task(intl,int,int)
  10.  
  11. clauses
  12. get_head([],_,[]).
  13. get_head(_,0,[]):- !.
  14. get_head([H|T],N,[H|R]) :- N1=N-1, get_head(T,N1,R).
  15.  
  16. get_neg([],[]).
  17. get_neg([H|T],[H|R]) :- H < 0, get_neg(T,R).
  18. get_neg([H|T],R) :- H >= 0, get_neg(T,R).
  19.  
  20. max_el([X],X).
  21. max_el([H|T],X) :- max_el(T,X), X>H.
  22. max_el([H|T],H) :- max_el(T,X), X<=H.
  23.  
  24. task(A,N,R) :- get_head(A,N,T), get_neg(T,Z), max_el(Z,R).

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

  1. В коде используется язык программирования Prolog.
  2. Код решает задачу поиска максимального отрицательного элемента из первых n-1 элементов списка.
  3. Для этого в коде определены следующие основные переменные:
    • A - список, в котором ищется максимальный элемент.
    • N - количество элементов, из которых необходимо выбрать максимальный.
    • R - результат, который будет содержать найденный максимальный элемент.
  4. В коде определены следующие вспомогательные переменные:
    • T - список, полученный после удаления из A первых n элементов.
    • Z - список, содержащий только отрицательные элементы из T.
  5. Для решения задачи используются следующие вспомогательные predicates:
    • get_head - получает голову списка A при заданном индексе N.
    • get_neg - получает список Z, содержащий только отрицательные элементы из списка T.
    • max_el - находит максимальный элемент из списка Z и присваивает его переменной R.
  6. Основное решение задачи представлено в правиле task, которое использует predicates get_head и get_neg для получения списка Z, а затем predicate max_el для нахождения максимального элемента.
  7. Правило get_head определяет рекурсивный алгоритм получения головы списка A при заданном индексе N.
  8. Правило get_neg определяет алгоритм получения списка Z из списка T, содержащего только отрицательные элементы.
  9. Правило max_el определяет алгоритм нахождения максимального элемента из списка Z.
  10. Для поиска максимального элемента из первых n-1 элементов списка A необходимо вызвать правило task с аргументами A, N и пустым списком R.

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


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

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

7   голосов , оценка 3.714 из 5

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

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

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