Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое_пособие_по_Прологу_wiki.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
417.79 Кб
Скачать

Использование окон для ввода и вывода

С любым текущим окном работают стандартные предикаты ввода и вывода – 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-бальной шкале.