
- •Федеральное агентство по образованию
- •Гоу впо «Глазовский государственый педагогический институт им. В.Г. Короленко»
- •Сборник задач по логическому программированию
- •Для студентов специальности «030100 – информатика»
- •Оглавление
- •Часть 1. Освоение интерфейса 6
- •Часть 2. Лабораторные работы 19
- •Введение
- •Часть 1. Освоение интерфейса Главное меню системы Турбо-Пролог
- •Основные команды редактирования
- •Использование предикатов для работы с окнами
- •Использование окон для ввода и вывода
- •Использование звука и музыки
- •Часть 2. Лабораторные работы Лабораторная работа №1. Общие сведения об языке логического программирования
- •Задания для самостоятельной работы
- •Лабораторная работа №2. Арифметика. Управление логическим выводом в программах
- •Задания для самостоятельной работы
- •Лабораторная работа №3. Повторение и рекурсия
- •Задания для самостоятельной работы
- •Рекомендуемая литература
- •Лабораторная работа №4. Применение рекурсии для обработки списков
- •Задания для самостоятельной работы
- •Рекомендуемая литература
- •Лабораторная работа №5. Решение логических задач.
- •Задания для самостоятельной работы
- •Рекомендуемая литература
- •Лабораторная работа №6. Головоломки. Игровые программы.
- •Задания для самостоятельной работы
- •Рекомендуемая литература
- •Лабораторная работа №7. Обработка файлов. Предикаты для работы с файлами
- •Задание для самостоятельной работы
- •Лабораторная работа №8. Создание динамической базы данных. Предикаты для работы с базой данных
- •Задание для самостоятельной работы
- •Лабораторная работа №9. Применение языка для решения задач ии. Создание экспертных систем
- •Задания для самостоятельной работы
- •Рекомендуемая литература
- •Литература
- •Сборник задач по логическому программированию
Использование окон для ввода и вывода
С любым текущим окном работают стандартные предикаты ввода и вывода – readln,readint,readchar - также.
По умолчанию, курсор расположен в верхнем левом углу окна. Используя предикат cursor и помещать курсор в любую позицию текущего окна. Этот предикат имеет вид: cursor (Row_number, Col_number ).
Аргументы Row_number и Col_number являются целыми числами, задающими номера строки и столбца, по отношению к верхней строке и крайнему левому столбцу экрана. Строки и столбцы нумеруются, начиная с нуля: предикат cursor(0,0) обеспечивает вывод текста, начиная с верхнего левого угла экрана.
Например, следующие предикаты могут быть использованы для вывода сообщения в центре экрана.
makewindow( 1,7,7,"", 1,1, 8,28),
cursor(4,12),
write("Доброе утро!").
Пример 1.
Программа 1. Работа с окнами
Predicates
start
run(integer)
do_sums
set_up_windows
clear_windows
Clauses
start:- set_up_windows, do_sums.
set_up_windows :-
makewindow(l, 7, 7, “”, 0, 0, 25, 80),
makewindow( 1, 7, 7, "Left operand", 2, 5, 5, 25),
makewindow(2, 7, 7,"", 2, 35, 5, 10),
nl, write(" PLUS"),
makewindow(2, 7, 7, "Right operand", 2, 50, 5, 25),
makewindow(3, 7, 7, "Gives", 10, 27, 5, 25),
makewindow(4, 7, 7,"", 17, 22, 5, 35).
do_sums :- run(_), clear_windows, do_sums.
run(Z) :-
shiftwindow(l),
cursor(2, 1), readint(X),
shiftwindow(2),
cursor(2, 10), readint(Y),
shiftwindow(3), Z=X+Y, cursor(2, 10), write(Z),
shiftwindow(4),
write(" Please press the space bar"),
readchar(_).
Clear_windows :-
shiftwindow(l), clearwindow,
shiftwindow(2), clearwindow,
shiftwindow(3), clearwindow,
shiftwindow(4), clearwindow.
Использование звука и музыки
Пролог поддерживает два предиката генерации звука: sound и beep. Предикат beep генерирует звук высокой частоты. Он не имеет параметров. Правило, генерирующее три звуковых сигнала, имеет вид:
beep:- beep, beep, beep.
Предикат sound имеет вид: sound(Duration, Frequency). Первый параметр задает продолжительность звукового сигнала в сотых долях секунды, второй-частоту генерируемого звука.
Таблица 4.
Работа со звуком
Нота |
До |
До диез |
Ре |
Ре диез |
Ми |
Фа |
Фа диез |
Соль |
Соль диез |
Ля |
Ля диез |
Си |
До |
Частота |
262 |
278 |
294 |
302 |
330 |
350 |
370 |
392 |
416 |
440 |
466 |
494 |
524 |
Рассмотрим программу обучения сложению, демонстрирующую возможности пролог управления окнами и звуком.
Программа 2. Тренажер для обучения сложению
Predicates
gen_rand_num(integer)
say_good_work
say_more_work
test_and_reward(integer, integer)
make_exercise_set(integer)
do_cal
Goal
do_cal.
Clauses
do_cal:-
makewindow(1,7,7, “Тренажер для обучения сложению”, 2,20,20,34),
nl,
write(“Вашему вниманию предлагаем упражнения для выполнения”),
make_exercise_set(3),
nl, write(“Желаем удачи! Пока!”),
nl, write(“Нажмите на любую клавишу”),
readchar(_),
removewindow.
make_exercise_set(0):-!.
make_exercise_set(Count):-
gen_rand_num(A),
nl, write(“1-е число ”,A), nl,
gen_rand_num(B),
nl, write(“2-е число ”,B), nl,
C=A+B,
write(“Чему равна сумма?”), nl,
readint(U),
test_and_reward(C,U),
Newcount=Count-1,
make_ exercise_set(NewCount).
gen_rand_num(X):-random(Y), X=Y*5+1.
test_and_reward(C,C):-say_good_work,!.
test_and_reward(_,_):-say_more_work.
say_good_work:-
makewindow(2,7,7, “Хорошая работа!”, 12, 40, 8, 30), nl,
write(“Вы правы”), nl, nl,
write(“Музыка для победителя!”),nl,nl,
sound(4, 262), sound(4, 350),
sound(4, 440), sound(8, 516),
sound(4, 440), sound(112, 516),
nl, nl, write(“Нажмите на любую клавишу”),
readchar(_),
removewindow.
say_more_work:-
makewindow(3,7,7, “Продолжим!”, 14, 6, 7, 28), nl,
write(“Вам нужно поработать ещё”), nl, nl,
beep, beep, beep,
write(“Нажмите на любую клавишу”),
readchar(_),
removewindow.
Правило make_exercise_set задает три контрольных вопроса. Для каждого вопроса правилом gen_rand_num генерируется два случайных целых числа в диапазоне от 1 до 5, эти числа выводятся на экран, затем предлагается ввести ответ, предикат test_and_reward оценивает ответ пользователя.
Задание. Усовершенствуйте программу. Предложите пользователю выбрать 1 из 4 тренажеров и проверить его знания арифметических операций, оценив его способности по 5-бальной шкале.