Вставить заданный элемент в список на N-ую позицию - Prolog

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

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

Задан список вещественных чисел. 1) Вставить заданный элемент в список на N-ую позицию. 2) Определить максимальный элемент полученного списка.
Листинг программы
  1. domains
  2. список_вещ=real*
  3. число=real
  4. predicates
  5. макс_элемент(список_вещ, число)
  6. n_позиция(список_вещ,список_вещ,число,число)
  7. ввод_списка(список_вещ)
  8. вывод_списка(список_вещ)
  9. clauses
  10. %1 - процедура ввода списка
  11. ввод_списка([H | T]):-
  12. write("Введите элемент списка (вещественное число): "),
  13. readreal (H),
  14. ввод_списка (T).
  15. ввод_списка ([ ]).
  16. %2 - процедура вывода списка
  17. вывод_списка([ ]).
  18. вывод_списка([H | T]):-
  19. write(H, " "),
  20. вывод_списка(T).
  21. %3 - заданный элемент в Н-ую позицию
  22. n_позиция(1,E,L,[E|L]):-!.
  23. n_позиция(N,E,[X|T],[X|T1]):-
  24. N1=N-1,
  25. n_позиция(N1,E,T,T1).
  26. %4 - максимальный элемент полученного списка
  27. макс_элемент([H],H).
  28. макс_элемент([H|T],H):-
  29. макс_элемент(T,M), H>M,!.
  30. макс_элемент([H|T],M):-
  31. макс_элемент(T,M).
  32. goal
  33. write("Некоторые процедуры для работы со списками"), nl, nl,
  34. write(" Введите исходный список"), nl,
  35. ввод_списка(L1), nl,
  36. write("Исходный список"), nl,
  37. вывод_списка(L1), nl, nl,
  38.  
  39. write("Максимальный элемент списка: "),
  40. макс_элемент(L1, M),
  41. write(M), nl, nl.
Вот что у меня получилось. Помогите сделать вывод для Н-ой позиции и правильно ли описал процедуру для нее? и правильно ли определяется максимальный элемент?

Решение задачи: «Вставить заданный элемент в список на N-ую позицию»

textual
Листинг программы
  1. domains
  2. reall=real*
  3.  
  4. predicates
  5. ins_in_pos(real,reall,integer,reall)
  6.  
  7.  
  8. clauses
  9. ins_in_pos(_,[],N,[]) :- N>0, write("Error!"), nl, fail.
  10. ins_in_pos(X,T,0,[X|T]) :- !.
  11. ins_in_pos(X,[H|T],N,[H|Q]) :- N1=N-1, ins_in_pos(X,T,N1,Q).

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

  1. В этом коде используется язык программирования Prolog.
  2. Задача программы - вставить заданный элемент в список на N-ую позицию.
  3. Код содержит два предиката: ins_in_pos и reall.
  4. Предикат reall относится к типу данных real и используется для обозначения вещественных чисел.
  5. Предикат ins_in_pos имеет четыре аргумента: X, T, N, Q.
  6. Аргумент X обозначает элемент, который необходимо вставить в список.
  7. Аргумент T обозначает список, в который необходимо вставить элемент.
  8. Аргумент N обозначает позицию, на которую необходимо вставить элемент.
  9. Аргумент Q обозначает результат работы программы.
  10. В первом утверждении предиката ins_in_pos проверяется, что позиция N больше нуля. Если это условие не выполняется, выводится сообщение об ошибке и программа завершается.
  11. Во втором утверждении предиката ins_in_pos проверяется, что позиция N равна нулю. Если это условие выполняется, элемент X вставляется в начало списка и возвращается результат.
  12. В третьем утверждении предиката ins_in_pos проверяется, что позиция N больше нуля. Если это условие выполняется, переменная N1 присваивается значение N-1 и рекурсивно вызывается функция ins_in_pos.
  13. Результатом работы программы является список, в котором элемент X вставлен на позицию N.
  14. В данном коде не используются скобки, чтобы выделить названия и значения переменных. Вместо этого используется формат написания с отступами.

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


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

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

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

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

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

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