Проверка числа на вхождение в интервал - Prolog

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

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

Здравствуйте! Учу Пролог. Пишу в SWI-prolog editor. Помогите с таким заданием: Процедура при первом обращении спрашивает имя пользователя, при втором - числовой интервал, в дальнейшем - запрос числа, которое сохраняется, если принадлежит интервалу. По команде создается терм, содержащий имя и список цифр, которые были введены, а потом все начинается снова. Написал часть проги, которая работает в цикле - сначала вводим имя, потом интервал, потом число. Думаю делать все с файлом - в нем будут сохраняться введенные цифры. Дальше не знаю как делать.. Помогите с решением. Спасибо!

Решение задачи: «Проверка числа на вхождение в интервал»

textual
Листинг программы
% SWI-Prolog
:- set_prolog_flag(double_quotes, string).
:- dynamic([usr/1, int/1, num/1, out_term/2]).
 
p :-
    \+ usr(_),
    write("Введите имя пользователя: "),
    read(UserName),
    assertz( usr(UserName) ),
    fail.
p :-
    \+ int(_),
    write("Введите интервал: "),
    read(Low-High),
    assertz( int(Low-High) ),
    fail.
p :-
    \+ int(_),
    p.
p :-
    write("Введите число, команду term или quit: "),
    read(X),
    \+ p(X),
    !.
p :-
    p.
 
p(quit) :-
    p(term),
    write("Сессия завершена."),
    !,
    fail.
p(term) :-
    usr(UserName),
    findall(Num, num(Num), Nums),
    assertz( out_term(UserName, Nums) ),
    write("Сформирован терм: "),
    writeln( out_term(UserName, Nums) ),
    retractall( usr(_) ),
    retractall( int(_) ),
    retractall( num(_) ),
    !.
p(X) :-
    integer(X),
    int(Low-High),
    between(Low, High, X),
    assertz( num(X) ),
    !.
p(_).

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

В этом коде используется язык программирования Prolog. Вот список действий, которые выполняются в этом коде:

  1. Установка флага double_quotes для обработки строк с использованием двойных кавычек.
  2. Создание динамической области памяти для переменных usr, int, num, out_term.
  3. Основной цикл программы, который продолжается до тех пор, пока пользователь не введет «quit».
  4. Если пользователь вводит «usr», запрашивается имя пользователя и сохраняется в переменной UserName.
  5. Если пользователь вводит «int», запрашивается интервал и сохраняется в переменной Low-High.
  6. Если пользователь вводит «num», запрашивается число и сохраняется в переменной X.
  7. Если пользователь вводит «term», выводится сформированный терм, состоящий из имени пользователя и чисел, и завершается сессия.
  8. Если пользователь вводит «quit», выводится сообщение «Сессия завершена».
  9. Если пользователь вводит что-то, что не является «usr», «int», «num», «term» или «quit», программа продолжается.
  10. Если пользователь вводит «term», выводится сообщение «Неверный ввод».
  11. Если пользователь вводит число X, проверяется, находится ли оно в заданном интервале, и если да, то число X сохраняется в переменной Num, и формируется терм, состоящий из имени пользователя и чисел, и выводится на экран.
  12. Если пользователь вводит «quit», «term» или что-то еще, что не является числом, программа продолжается.
  13. Если пользователь вводит число X, которое не находится в заданном интервале, программа продолжается.
  14. Если пользователь вводит «quit», «term» или что-то еще, программа завершается.

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


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

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

8   голосов , оценка 4.125 из 5
Похожие ответы