Поменять местами максимальный четный и минимальный элементы массива - Prolog

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

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

Добрый вечер! Помогите пожалуйста с задачей по прологу. Нашла максимальный четный и минимальный элементы, теперь необходимо поменять их местами в массиве.
Листинг программы
  1. Domains
  2. Mass= integer*
  3. Predicates
  4. nondeterm max(integer,integer,integer).
  5. nondeterm max_mass(Mass,integer).
  6. nondeterm min(integer,integer,integer).
  7. nondeterm min_mass(Mass,integer).
  8. Clauses
  9. max(X,Y,M):-X>Y,M=X;X<=Y,M=Y.
  10. max_mass([X],X).
  11. max_mass([H|T],M):-max_mass(T,T1),max(H,T1,M).
  12. min(X,Y,M):-X<Y,M=X;X>=Y,M=Y.
  13. min_mass([X],X).
  14. min_mass([H|T],M):-min_mass(T,T1),min(H,T1,M).
  15. Goal:
  16. L=[15,3,9,7,1,4,5,0],max_mass(L,Max),min_mass(L,Min).

Решение задачи: «Поменять местами максимальный четный и минимальный элементы массива»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. exchange(intl,int,int,intl)
  7.  
  8. clauses
  9. exchange([],_,_,[]).
  10. exchange([X|T],X,Y,[Y|R]) :- exchange(T,X,Y,R).
  11. exchange([Y|T],X,Y,[X|R]) :- exchange(T,X,Y,R).
  12. exchange([Z|T],X,Y,[Z|R]) :- Z<>X, Z<>Y, exchange(T,X,Y,R).

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

  1. domains - определяются типы данных для переменных. В данном случае, для переменной типа int (целое число) и для переменной типа intl (массив целых чисел).
  2. predicates - определяются пользовательские функции (предикаты) с именем exchange, которые принимают в качестве аргументов массив, минимальный элемент, максимальный элемент и новый массив.
  3. clauses - определяются правила, которые описывают поведение функции exchange. В данном случае, определено 3 правила:
    • Первое правило говорит, что если массив пустой, то любой элемент может быть считаться минимальным и максимальным, и его можно поменять местами с любым другим элементом. Результатом будет пустой массив.
    • Второе правило говорит, что если массив не пустой, то минимальный элемент можно поменять местами с первым элементом, а максимальный элемент можно поменять местами с последним элементом. Затем вызывается рекурсивно функция exchange для оставшейся части массива.
    • Третье правило говорит, что если текущий элемент не является минимальным и максимальным элементом, и в оставшейся части массива также не является минимальным и максимальным элементом, то его можно поменять местами с любым другим элементом. Затем вызывается рекурсивно функция exchange для оставшейся части массива.
  4. goals - в данном коде нет явных целей, но предполагается, что пользователь будет вызывать функцию exchange, передавая в нее массив, минимальный элемент, максимальный элемент и новый массив.

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


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

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

6   голосов , оценка 4.333 из 5

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

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

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