Пролог поддерживает два предиката генерации звука: sound и beep. Предикат beep генерирует звук высокой частоты. Он не имеет параметров. Правило, генерирующее три звуковых сигнала, имеет вид:
beep:- beep, beep, beep.
Предикат sound имеет вид: sound(Duration, Frequency). Первый параметр задает продолжительность звукового сигнала в сотых долях секунды, второй-частоту генерируемого звука.
Таблица 4.
Работа со звуком
Нота | До | До диез | Ре | Ре диез | Ми | Фа | Фа диез | Соль | Соль диез | Ля | Ля диез | Си | До |
Частота |
Рассмотрим программу обучения сложению, демонстрирующую возможности пролог управления окнами и звуком.
Программа 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-бальной шкале.