Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Функциональное и логическое программирование. Учебно-методическое пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
выберите со-
бытия (Event)
для меню
(Menu)
выберите
id_test
Рис. 1.16. Эксперт окон и диалоговых окон создает код меню
Выберите пункт Menu в списке Event Type и выделите строку id_test (имя
нового пункта меню). Нажмите кнопку Add Clause, чтобы сгенерировать Про­лог-предложение для события. Название кнопки изменится на Edit Clause, ко­гда код для события будет создан. Нажмите кнопку Edit Clause. Откроется ок­но редактора для файла MyProj.pro, в который добавлено предложение:
%BEGIN Task Window, id_test
task_win_eh(_Win,e_Menu(id_test,_ShiftCtlAlt),0):-!,
!.
%END Task Window, id_test
71
Рис. 1.17. Окно редактора кода
Установите
курсор в эту
точку
выберите из
списка
dlg_GetStr
Поместите курсор в указанную точку, а затем щелкните правой кнопкой
мыши и выберите команду Insert | Predicate Call | Window, Dialog or Toolbar.
В появившемся диалоговом окне выберите из списка dlg_GetStr
и нажмите ОК.
жения должен выглядеть следующим образом:
%BEGIN Task Window, id_test
task_win_eh(_Win,e_Menu(id_test,_ShiftCtlAlt),0):-!,
Msg=«Message»,
InitStr=«»,
Рис. 1.18. Определение предиката для вставки
Вызов диалогового окна dlg_GetStr будет вставлен в текст, и код предло-
72
Title=«Title»,
_NewSTRING=dlg_GetStr(Title,Msg,InitStr),
!.
%END Task Window, id_test
Для окончательной доработки внесите следующие изменения (выделены
жирным шрифтом):
%BEGIN Task Window, id_test
task_win_eh(_Win,e_Menu(id_test,_ShiftCtlAlt),0):-!, Msg=«Введите Ваше имя», % строка-подсказка
InitStr=«», % исходное значение вводимой пользователем строки
Title=«Ввод имени пользователя», % заголовок окна _NewSTRING=dlg_GetStr(Title,Msg,InitStr),% введенная
строка
_NewSTRING<>«», % если введенная строка не пустая, write(«Привет, »,_NewSTRING), % то выводится приветствие
!.
%END Task Window, id_test
4. Запустите проект на исполнение и протестируйте его. Доработайте проект, создав пункт меню Avtor, при выборе которого появ-
ляется диалоговое окно (dlg_Note) со сведениями об авторе проекта (Ф.И.О,
группа).
Задание 2
Создать проект, позволяющий вычислить факториал введенного числа.
При создании этого проекта необходимо использовать поля ввода (Edit
Control), которые предназначены для ввода данных. Обычно этот элемент
представляет собой строку, которая содержит текст или число. Поле ввода мо-
жет быть многострочным.
Для установки и получения содержимого поля ввода нужно использовать
предикаты: String = win_GetText (Window), win_SetText (Window, string Text), где Window — это оконный дескриптор элемента управления, который может быть получен вызовом предиката:
CtrlHndl=win_GetCtlHandle(Parent Window,CtrlId).
73
Также в проекте будут использованы командные кнопки (Push Button), ко-
Введите
имя окна
Factorial
выберите
Window
нажмите
New
торые позволяют пользователю выполнять различные действия: открывать и
закрывать окна, выполнять расчеты и т.д.
Выполнение
1. Создайте новый проект (Project | New Project).
2. Добавьте в главное меню новый пункт Factorial аналогично, как в
предыдущем задании).
3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window
на левой панели инструментов, а затем —кнопку New справа (рис. 1.19).
Рис. 1.19. Создание нового окна в проекте
Откроется окно Window Attributes (рис. 1.20). Введите имя создаваемого
окна Factorial и нажмите ОК.
Рис. 1.20. Диалоговое окно для установки атрибутов окна
74
4. Разместите на макете появившегося нового окна следующие компоненты
Static Text
Push Button
Edit Control
(рис. 1.21):
Static Text для вывода текста Edit Control для ввода данных Push Button для выполнения расчета
Рис. 1.21. Редактор окон
После размещения компонентов установите необходимые для каждого из
них атрибуты:
а) для компонента Static Text, служащего для вывода надписи Введите
число (имя-константа будет задано автоматически) (рис. 1.22);
75
имя-константа -
id_ввод
наберите
надпись Вве-
дите число
Рис. 1.22. Атрибуты компонента Static Text
б) для компонента Edit Control (поле ввода), который обеспечит
ввод числа;
Рис. 1.23. Атрибуты компонента Edit Control
в) для компонента Push Button (кнопка), при нажатии на который будет выполнен расчет и выведен результат (имя-константа будет задано автоматиче­ски) (рис. 1.24);
г) для компонента Static Text, необходимого для вывода результата.
Рис. 1.24. Атрибуты компонента Push Button
76
Выберите
модуль Facto-
rial.pro
нажмите
сюда
имя-константа -
idct_вывод
Рис. 1.25. Атрибуты компонента Static Text
5. Сгенерируйте стандартный код Visual Prolog для нового окна. Для этого в
окне проекта нажмите кнопку Code Expert, когда выбрано окно Factorial. От­кроется окно Dialog and Window Expert. Выберите исходный модуль Factorial.pro и нажмите кнопку Default Code (рис. 1.26).
Когда заданный по умолчанию код будет сгенерирован, станут доступны
кнопки Add Clause, Edit Code и некоторые другие.
6. Запрограммируйте выбор пункта меню Factorial для вызова окна Facto-
rial. Для этого в списке окон выберите Task Window, пункт Menu в списке Event Type и выделите строку id_factorial (имя пункта меню) в списке Event or
Рис. 1.26. Добавление кода по умолчанию в эксперте окон
77
Item. Нажмите кнопку Add Clause, чтобы сгенерировать Пролог-предложение для события. Название кнопки изменится на Edit Clause, когда код для собы­тия будет создан. Нажмите кнопку Edit Clause. Откроется окно редактора для файла Factorial.pro, в который добавлено предложение:
%BEGIN Task Window, id_factorial
task_win_eh(_Win,e_Menu(id_factorial,_ShiftCtlAlt),0):-
!,
!.
%END Task Window, id_factorial
Допишите команду для открытия окна Factorial: win_factorial_Create(_Win). В результате должно получиться:
%BEGIN Task Window, id_factorial
task_win_eh(_Win,e_Menu(id_factorial,_ShiftCtlAlt),0):-
!,
win_factorial_Create(Win),
!.
%END Task Window, id_factorial
7. Запрограммируйте нажатие кнопки Результат в окне Factorial для вы-
полнения расчета и вывода результата. Для этого вызовите окно Dialog and Window Expert и в списке окон выберите Factorial. Выберите пункт Control в списке Event Type и выделите строку pb: idc_результат (имя кнопки). Нажми­те кнопку Add Clause, а затем Edit Clause. Откроется окно редактора для файла Factorial.pro, в который добавлено предложение:
%BEGIN Factorial, idc_результат _CtlInfo
win_factorial_eh(_Win,e_Control(idc_результат,_CtrlType,_
CtrlWin, _CtlInfo),0):-!,
!.
%END Factorial, idc_результат _CtlInfo
Допишите команды, необходимые для вычисления факториала и вывода ре-
зультата. В результате должно получиться:
%BEGIN Factorial, idc_результат _CtlInfo
win_factorial_eh(_Win,e_Control(idc_результат,
_CtrlType, _CtrlWin, _CtlInfo), 0):-!,
78
EDIT_WIN1=win_GetCtlHandle(_WIN,idc_ввод),
Text1=win_GetText(EDIT_WIN1), % считываем данные из поля ввода str_int(Text1,N), % преобразует в числовое значение fact(N,FN), % вычисляем факториал str_int(StrFN,FN), % преобразуем в строковое значение
EDWIN=win_GetCtlHandle(_WIN,idct_вывод), win_SetText(EDWIN,StrFN), % выводим результат
!.
%END Factorial, idc_результат _CtlInfo
8. Опишите правило вычисления факториала и предикат fact:
PREDICATES
win_factorial_eh : EHANDLER
fact(integer,integer)
CLAUSES
fact(0,1):-!.
fact(N,F):- N1=N-1,fact(N1,F1), F=N*F1.
win_factorial_Create(_Parent):-
win_Create(win_factorial_WinType,win_factorial_RCT,wi
n_factorial_Title,
win_factorial_Menu,_Parent,win_factorial_Flags,win_fa
ctorial_eh,0).
9. Запустите проект на исполнение и протестируйте его.
Доработайте проект, создав новый пункт меню Summa, при выборе которо­го появляется новое окно для ввода двух чисел и вычисления их суммы.
Задание 3
Создать проект, позволяющий формировать и редактировать списки данных.
Для работы проекта необходимо использовать элементы ListBox (список), Edit Control (поле ввода) для ввода новых данных, Push Button (кнопки) для до­бавления нового элемента в список и удаления выделенного элемента.
79
ListBox (список) — это элемент управления, содержащий набор пунктов,
Push Button
Edit Control
ListBox
которые может выбрать пользователь. В VPI есть несколько предикатов для ра­боты со списками:
lbox_Add (Window, Index, Str) добавляет новую строку Str в список в по-
зицию с индексом Index. Если Index равен -1, то строка добавляется в конец
списка. Нумерация элементов списка начинается с 0, т.е. первый элемент спис-
ка имеет индекс 0, второй -1 и т.д.;
lbox_Clear (Window) удаляет все элементы списка; lbox_Delete (Window, Index) удаляет элемент с указанным индексом; lbox_GetItem (Window, Index) возвращает элемент списка с указанным
индексом;
Integer=lbox_GetSelIndex (Window) возвращает индекс выбранного эле-
мента. Предикат завершится неуспешно, если никакой элемент в списке не вы-
бран;
lbox_IsSel (Window, Index) завершается успешно или неуспешно в зави-
симости от того, является ли текущим заданный элемент в списке.
Выполнение
1. Создайте новый проект.
2. Добавьте в главное меню новый пункт Spisok.
3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window на левой панели инструментов, а затем — кнопку New справа. Откроется окно Window Attributes. Введите имя создаваемого окна Spisok и нажмите ОК.
4. Разместите на макете появившегося нового окна следующие компонен-
ты: Edit Control, Push Button, ListBox (рис. 1.27).
Рис. 1.27. Созданное окно Spisok
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]