ИИСС. Практикум решения задач по курсу Основы искусственного интеллекта
![]()
|
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫДоработайте проект, создав пункт меню Avtor, при выборе которого появляется диалоговое окно (dlg_Note) со сведениями об авторе проекта (Ф.И.О, группа) 2.2 Создание новых окон в проекте с использованием кнопок и полей ввода Поля ввода (Edit Control) позволяют пользователю вводить данные. Обычно этот элемент представляет собой строку, которая содержит текст или число. Поле ввода может быть многострочным. Для установки и получения содержимого поля ввода нужно использовать предикаты: String = win_GetText (Window), win_SetText (Window , string Text) где Window – это оконный дескриптор элемента управления, который может быть получен вызовом предиката: CtrlHndl=win_GetCtlHandle(Parent Window,CtrlId) Командные кнопки (Push Button) позволяют пользователю выполнять различные действия: открывать и закрывать окна, выполнять расчеты и т.д. Пример. Проект, позволяющий вычислить факториал введенного числа Задание: создать проект, в котором при выборе пункта меню Factorial открывается окно, позволяющее ввести натуральное число и вычислить его факториал. Решение 1. Создайте новый проект(Project | New Project). 2. Добавьте в главное меню новый пункт Factorial аналогично как в предыдущем примере). 3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window на левой панели инструментов, а затем – кнопку New справа (рис.18). ![]() ![]() ![]() рис.18. Создание нового окна в проекте Откроется окно Window Attributes (рис.19). Введите имя создаваемого окна Factorial и нажмите ОК. ![]() ![]() рис.19. Диалоговое окно для установки атрибутов окна 4. Разместите на макете появившегося нового окна следующие компоненты (рис.20): Static Text для вывода текста Edit Control для ввода данных Push Button для выполнения расчета ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() рис.20. Редактор окон После размещения компонентов установите необходимые для каждого из них атрибуты: а) для компонента Static Text, служащего для вывода надписи Введите число (имя-константа будет задано автоматически)(рис.21) ![]() ![]() рис.21. Атрибуты компонента Static Text б) для компонента Edit Control (поле ввода), который обеспечит ввод числа ![]() ![]() рис.22. Атрибуты компонента Edit Control в) для компонента Push Button (кнопка), при нажатии на который будет выполнен расчет и выведен результат (имя-константа будет задано автоматически)(рис.23) ![]() рис.23. Атрибуты компонента Push Button г) для компонента Static Text, необходимого для вывода результата ![]() ![]() рис.24. Атрибуты компонента Static Text 5. Сгенерируйте стандартный код Visual Prolog для нового окна. Для этого в окне проекта нажмите кнопку Code Expert, когда выбрано окно Factorial. Откроется окно Dialog_and_Window_Expert.'>Dialog and Window Expert. Выберите исходный модуль Factorial.pro и нажмите кнопку Default Code(рис.25). ![]() ![]() ![]() рис.25 Добавление кода по умолчанию в эксперте окон Когда заданный по умолчанию код будет сгенерирован, станут доступны кнопки Add Clause, Edit Code и некоторые другие. 6. Запрограммируйте выбор пункта меню Factorial для вызова окна Factorial. Для этого в списке окон выберите Task Window , пункт Menu в списке Event Type и выделите строку id_factorial(имя пункта меню) в списке Event or 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):-!, 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,win_factorial_Title, win_factorial_Menu,_Parent,win_factorial_Flags,win_factorial_eh,0). 9. Запустите проект на исполнение и протестируйте его. |