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

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

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

Здравствуйте! Учу Пролог. Пишу в SWI-prolog editor. Помогите с таким заданием: Процедура при первом обращении спрашивает имя пользователя, при втором - числовой интервал, в дальнейшем - запрос числа, которое сохраняется, если принадлежит интервалу. По команде создается терм, содержащий имя и список цифр, которые были введены, а потом все начинается снова. Написал часть проги, которая работает в цикле - сначала вводим имя, потом интервал, потом число. Думаю делать все с файлом - в нем будут сохраняться введенные цифры. Дальше не знаю как делать.. Помогите с решением. Спасибо!
Листинг программы
  1. :-dynamic p/1.
  2. checkq(X) :- p(X), write('Число принадлежит интервалу'), !.
  3. run :- readfacts, repeat, write('\nselect option by number'),
  4. write('\n1 - Ввести имя\n'), write('2 - Ввести число\n'),
  5. write('3 - Ввести интервал\n'), write('4 - Виход\n'), get_char(C), do_choice(C), fail.
  6. do_choice('1'):- read(X), checkq(X).
  7. do_choice('2'):- read(X), assert(p(X)).
  8. readfacts:-
  9. open('output.txt',read,In),
  10. repeat,
  11. read_line_to_codes(In,X), todb(X),
  12. X=end_of_file,!,
  13. close(In).

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

textual
Листинг программы
  1. % SWI-Prolog
  2. :- set_prolog_flag(double_quotes, string).
  3. :- dynamic([usr/1, int/1, num/1, out_term/2]).
  4.  
  5. p :-
  6.     \+ usr(_),
  7.     write("Введите имя пользователя: "),
  8.     read(UserName),
  9.     assertz( usr(UserName) ),
  10.     fail.
  11. p :-
  12.     \+ int(_),
  13.     write("Введите интервал: "),
  14.     read(Low-High),
  15.     assertz( int(Low-High) ),
  16.     fail.
  17. p :-
  18.     \+ int(_),
  19.     p.
  20. p :-
  21.     write("Введите число, команду term или quit: "),
  22.     read(X),
  23.     \+ p(X),
  24.     !.
  25. p :-
  26.     p.
  27.  
  28. p(quit) :-
  29.     p(term),
  30.     write("Сессия завершена."),
  31.     !,
  32.     fail.
  33. p(term) :-
  34.     usr(UserName),
  35.     findall(Num, num(Num), Nums),
  36.     assertz( out_term(UserName, Nums) ),
  37.     write("Сформирован терм: "),
  38.     writeln( out_term(UserName, Nums) ),
  39.     retractall( usr(_) ),
  40.     retractall( int(_) ),
  41.     retractall( num(_) ),
  42.     !.
  43. p(X) :-
  44.     integer(X),
  45.     int(Low-High),
  46.     between(Low, High, X),
  47.     assertz( num(X) ),
  48.     !.
  49. 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

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

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

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