Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лабораторная работа №4. Работа с окнами.

Readchar(_)

Nl,

Readln(P),

Nl,

Repeat,

Vxod.

Goal

Repeat.

Readchar(_).

Nl,

Readln(P),

Nl,

Repeat,

write("VVedi parol:"),

P="morgen",

write("Passed!"),

repeat:-repeat.

Данная программа заставит вводить пароль столь раз, сколько потребуется, чтобы наконец набрать слово «morgen». Пример скриншота дан ниже:

 

 

Все дело в предикате repeat. Он реализован по принципу рекурсии, но бесконечной! (поскольку нет аргументов, а предикат repeat вызывает сам себя при неудаче). Таким образом, прохождение участка

 

write("VVedi parol:"),

P="morgen",

write("Passed!"),

будет выполняться до тех пор, пока не будет введен правильный пароль.

 

ЗАДАНИЕ.

 

1.Изменить программу так, чтобы число вводов пароля было не более 3.

Замечание. Эта задача может показаться безнадежно трудной, но это не так. Нужно просто в предикате repeat ввести аргумент-счетчик, но как это сделать просим подумать.

 

2. С помощью repeat построить простое меню с двумя пунктами. По одному из них производится завершение программы. По другому - выводится сообщение «Выбран пункт 1».

 

.

 

ЦЕЛЬ. ИЗУЧИТЬ РАБОТУ С ОКНАМИ.

 

ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ.

 

 

Чтобы создать окно используем предикат (пример)

 

makewindow(1,26,45,"work panel",0,0,10,30)

 

Здесь:

1 – номер окна; 26- цвет окна, 45 – цвет шрифта, "work panel" - заголовок, 0,0,10,30 – левый верхний угол окна, его ширина и высота.

 

Ширина DOS- окна не может быть больше 80 (столбцов), а высота – 25 (строк). Смещение окна задается координатами его верхнего левого угла.

 

Удалить окно следует командой

 

removewindow.

 

Перейти в нужное окно можно командой

 

shiftwindow(1)

 

Здесь в скобках записан номер окна. Системное окно имеет номер 0.

 

Для очистки содержимого окна используем команду

 

Clearwindow.

 

 

С учетом сказанного простейшее приложение для окна имеет такой вид

include "lab6.inc"

 

predicates

 

nondeterm lab6()

nondeterm proc(integer)

nondeterm proc2(integer)

nondeterm repeat

 

clauses

 

lab6():-

makewindow(1,26,45,"work panel",0,0,10,50),

repeat,

clearwindow,

write("1. Consult"),

nl,

write("2. Exit"),

nl,nl,

write("Your choice: "),

readint(X),

proc(X),

!.

 

repeat.

repeat:-repeat.

 

proc(2):-

shiftwindow(1),

removewindow.

 

 

proc(1):-

repeat,

clearwindow,

write("Что бы Вы приобрели на свободные деньги?"),

nl,

nl,

write("1. Книги"),

nl,

write("2. Конфеты"),

nl,

write("3. Продукты питания"),

nl,

write("4. Ничего из этого списка"),

nl,nl,

write("Your choice: "),

readint(X),

proc2(X),

!.

 

proc2(X):-

X>=1,

X<=4,

clearwindow,

write("У Вас хороший вкус"),

readchar(_),!.

 

 

goal

 

lab6().

 

Здесь сначала создаем окно, затем выводим в нем строки:

 

write("1. Consult"),

nl,

write("2. Exit"),

nl,nl,

write("Your choice: "),

readint(X)

 

и ждем ввода:

proc(X).

 

 

На этой фазе работы экран выглядит следующим образом:

 

 

 

Обработка ввода реализуется следующим образом:

 

proc(2):-

shiftwindow(1),

removewindow.

 

 

proc(1):-

repeat,

clearwindow,

write("Что бы Вы приобрели на свободные деньги?"),

nl,

nl,

write("1. Книги"),

nl,

write("2. Конфеты"),

nl,

write("3. Продукты питания"),

nl,

write("4. Ничего из этого списка"),

nl,nl,

write("Your choice: "),

readint(X),

proc2(X),

!.

 

 

При выборе 2 программа завершится:

 

proc(2):-

shiftwindow(1),

removewindow.

 

 

При выборе 1 появится новый список:

write("Что бы Вы приобрели на свободные деньги?"),

nl,

nl,

write("1. Книги"),

nl,

write("2. Конфеты"),

nl,

write("3. Продукты питания"),

nl,

write("4. Ничего из этого списка"),

nl,nl,

write("Your choice: "),

readint(X)

 

На этот раз обработка выполняется с помощью предиката:

 

proc2(X).

 

proc2(X):-

X>=1,

X<=4,

clearwindow,

write("У Вас хороший вкус"),

readchar(_),!.

 

 

Эта обща техника может быть использована в создании простой экспертной системы. Такая система выводит на экран последовательно несколько окон и предлагает произвести выбор. Потом выбор оценивается и делается заключение. Вот пример таких окон:

 

 

 

 

 

 

 

 

Реализация такого диалога осуществляется с помощью программы, полный текст которой приведен ниже. Вам надо опираться на этот текст, чтобы построить собственную систему консультации.

 

include "windows.inc"

 

 

predicates

nondeterm windows()

nondeterm repeat

nondeterm proc(integer)

nondeterm proc2(integer)

nondeterm proc3(integer,integer)

nondeterm expert(integer,integer,string)

clauses

 

windows():-

clearwindow,

makewindow(1,26,45,"work panel",0,0,10,30),

repeat,

clearwindow,

write("1. Consult"),

nl,

write("2. Exit"),

nl,nl,

write("Your choice: "),

readint(X),

proc(X),

!.

 

repeat.

repeat:-repeat.

 

proc(2):-

removewindow.

 

 

proc(1):-

makewindow(2,26,45,"work panel 2",10,10,10,50),

repeat,

clearwindow,

write("Что бы Вы приобрели на свободные деньги?"),

nl,

nl,

write("1. Книги"),

nl,

write("2. Конфеты"),

nl,

write("3. Продукты питания"),

nl,

write("4. Ничего из этого списка"),

nl,nl,

write("Your choice: "),

readint(X),!,

proc2(X),

fail.

 

proc2(Z):-

Z>=1,

Z<=4,

shiftwindow(2),

removewindow,

 

makewindow(3,26,45,"work panel 3",10,0,10,50),

repeat,

clearwindow,

write("Чем бы Вы занялись в свободное время?"),

nl,

nl,

write("1. Спортом"),

nl,

write("2. Развлечением"),

nl,

write("3. Общением с друзьями"),

nl,

write("4. Ничего из этого списка"),

nl,nl,

write("Your choice: "),

readint(X),!,

proc3(Z,X),

fail.

 

 

proc3(Z,X):-

X>=1,

X<=4,

shiftwindow(3),

nl,

expert(Z,X,S),

write(S),

readchar(_),

removewindow,

shiftwindow(1),

!.

 

expert(Z,X,S):-

Z=1,

X=3,

S="Вы общительный интеллектуал",!.

 

 

expert(Z,X,S):-

Z=1,

X=4,

S="Вы интеллектуал-домосед",!.

 

expert(Z,X,S):-

Z=1,

X=2,

S="Вы хотите получить от жизни все",!.

 

expert(Z,X,S):-

Z=1,

X=1,

S="Вы грамотны и настойчивы",!.

 

 

expert(Z,X,S):-

Z=2,

X=1,

S="Вы чувствительны но имеете волю к сопротивлению",!.

 

 

expert(Z,X,S):-

Z=2,

X=2,

S="Вы чрезмерно изнеженны",!.

 

expert(Z,X,S):-

Z=2,

X=3,

S="Вы внешне зависимы",!.

 

expert(Z,X,S):-

Z=2,

X=4,

S="Вы идеалист",!.

 

 

expert(_,_,S):-

 

 

S="Приносим извинения за неисправность",!.

 

 

goal

 

windows().

 

 

ЗАДАНИЕ.

 

1. Создать собственную систему консультации с тремя окнами для выбора вариантов, т.е. расширить приведенный в описании пример еще одним окном.

Темы консультации:

- покупка автомобиля

- прием на работу

- создание частного предприятия (аптеки, парикмахерской и т.д.)

- кредитование клиента в банке.

 

 

Система должна предлагать пользователю варианты, а затем произвести оценку варианта как в нашем примере:

expert(Z,X,S):-

Z=1,

X=3,

S="Вы общительный интеллектуал",!.

 

 

2. Добавить в программу возможность прекратить консультацию и завершить программу в любом окне.

3. Реализовать возможность возврата в предыдущее окно консультации.

<== предыдущая лекция | следующая лекция ==>
Clauses. Nondeterm min(integer,integer,integer,integer) | Лабораторная работа №5
Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 289; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.058 сек.