You are on page 1of 11

SISTEMAS EXPERTOS

Guía de Laboratorio con Visual Prolog

Profesor Ing. Ms. Julio Luis Tenorio Cabrera

UNIVERSIDAD NACIONAL DE TRUJILLO - EAP INGENIERÍA DE SISTEMAS


SISTEMAS EXPERTOS

LABORATORIO 01

1. Crear la carpeta: Lab 1 VIP y elegirla como carpeta para grabar los proyectos del
presente laboratorio, esto se hace a través del botón Browse.
2. En Project Name, escribir: Sistema Experto 01.
3. En Project Kind, elegir: MDI.
4. Mediante botón Next, elegir la opción Version Information y escribir los datos
respectivos, y luego click en el botón Ok. Se genera automáticamente el proyecto.
5. Mediante la opción Build del menú principal, y luego la opción Execute, ejecutar el
proyecto.
6. Al abrir la carpeta TaskWindow, se observa un archivo TaskWindow.win, en el que se
hará click con el botón derecho para luego elegir la opción Attributes, para realizar los
siguientes cambios:
a. Desactivar MaximizeBox y MinimizeBox.
b. Activar Maximized.
7. Luego hacer click en el botón Ok y ejecutar nuevamente el proyecto.
8. Ahora, se observa el archivo TaskMenu.mnu, en el que se debe hacer doble click para
modificar el menú que viene por defecto, de la siguiente manera:
a. Eliminar las opciones: File, Edit.
b. Dentro de la opción Help, eliminar todas las opciones menos la opción About la
que se debe renombrar con: Sistema Experto, y la opción Help se debe
renombrar con: Acerca de.
c. Agregar las opciones: Información, Consultar, Salir.
9. Luego, salir y grabar los cambios.
10. Luego ejecutar nuevamente el proyecto.
11. Al aparecer un Warning, hacer doble click y eliminar el código correspondiente. Así
también modificar el siguiente código:
mdiProperty : boolean = true.
Por

mdiProperty : boolean = false.

onShow(_, _CreationData) :-
_MessageForm = messageForm::display(This).
Por

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 1


SISTEMAS EXPERTOS

onShow(_, _CreationData).
%_MessageForm = messageForm::display(This).

12. Luego, salir y grabar los cambios.


13. Siempre dentro de la carpeta TaskWindow, ubicar el archivo AboutDialog.dlg, sobre el
cuál se debe hacer doble click para modificar, si se desea:
a. El título del formulario.
b. Descripción del Proyecto.
c. Versión del Proyecto.
d. Derechos de autor.
e. Nombre de la Organización.
14. Luego salir, grabar los cambios y ejecutar nuevamente el proyecto.
15. Ahora para programar la opción Salir, hacer doble click en el archivo TaskWindow.win,
luego abrir la carpeta Menu y abrir la opción TaskMenu en la que aparecerán las
opciones del menú modificado anteriormente, y se debe hacer doble click en la opción:
id_salir, en la que se modificará el siguiente código:
predicates
onSalir : window::menuItemListener.
clauses
onSalir(_Source, _MenuTag).
Por

predicates
onSalir : window::menuItemListener.
clauses
onSalir(_Source, _MenuTag):-
close().

16. Salir y grabar los cambios.


17. Finalmente, se debe eliminar el botón Cerrar de la ventana principal, ya que se ha
programado la opción Salir de menú principal. (Esto debe hacerlo el estudiante).
18. Grabar los cambios, salir y ejecutar nuevamente el proyecto.
19. Ahora, se agregarán dos formularios, donde en el primero se visualizará una explicación
sobre la naturaleza del proyecto y en el segundo se harán las consultas respectivas. Los
formularios son:
a. frm_informacion.
b. frm_consultas.
Para agregar el primer formulario, se debe hacer click con el botón derecho sobre la
carpeta general del proyecto: Sistema Experto 01, y elegir la opción: New in New
Package. Luego eligir el ítem Form para el cual se debe proceder a poner el nombre

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 2


SISTEMAS EXPERTOS

frm_informacion. Luego se debe hacer click sobre el botón Create. (En el caso de
visualizarse algún error, por el momento se ignora). Luego se debe eliminar los botones
Cancel y Help que por defecto se visualizan en el formulario creado. Por el momento se
recomienda cambiar el título del formulario mediante la propiedad Title, por el
siguiente: Información sobre el Sistema Experto.
20. Salir, grabar y ejecutar el proyecto. (Para la creación del segundo formulario, es decir,
frm_consultas, se deja como tarea al estudiante).
21. Ahora, para visualizar cada formulario creado al seleccionar la opción respectiva, se
procede de la siguiente manera:
Dentro de la carpeta TaskWindow, ubicar el archivo TaskWindow.win sobre el cuál se
debe hacer doble click y a continuación hacer doble click sobre la opción
id_informacion, la que se encuentra ubicada dentro de la opción TaskMenu la que se
encuentra dentro de la carpeta Menu.
Ahora modificar el siguiente código, como se muestra a continuación:
predicates
onInformación : window::menuItemListener.
clauses
onInformación(_Source, _MenuTag).
Por

predicates
onInformación : window::menuItemListener.
clauses
onInformación(_Source, _MenuTag):-
_=frm_informacion::display(This).

22. Salir y ejecutar el Proyecto, con lo que se debe visualizar el formulario referenciado al
seleccionar la opción Información del menú principal. (El proceso para la visualización
del formulario frm_consultar, se deja como tarea al estudiante).
23. Ahora, se debe agregar información en el formulario frm_informacion, referente al
proyecto. El tema ejemplo, es sobre enfermedades y síntomas. Para esto en el
formulario frm_informacion se debe agregar un control del tipo Static Text,
modificando su tamaño respectivo tan solo con el mouse. Pero antes de ello, se
recomienda eliminar los botones de maximizar, minimizar y cerrar, del formulario. Para
esto las propiedades:
a. CloseBox
b. MaximizeBox
c. MinimizeBox,

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 3


SISTEMAS EXPERTOS

se deben poner en False.


24. Ahora, en la propiedad Text del control agregado, proceder a escribir la siguiente
información, como ejemplo:
“El Sistema Experto, permite mostrar cuál es el síntoma principal de la enfermedad
sobre la cual se realiza la consulta. Por favor haga click sobre el botón OK, para
continuar.”
25. Salir, grabar y ejecutar el proyecto.
26. A continuación, se debe implementar los controles y código para el formulario
frm_consultas. Para esto, se debe agregar los siguientes controles al formulario:
a. Un Static Text, el cual mediante la propiedad Text, se debe modificar la
apariencia con el siguiente texto: Escriba nombre de la enfermedad.
b. Un Edit Control, el cual mediante la propiedad Name se debe modificar el
nombre por el de: edenfermedad_ctl. Ahora la propiedad Text debe quedar
vacía.
c. Un Static Text, el cual mediante la propiedad Text, se debe modificar la
apariencia con el siguiente texto: El síntoma principal de la enfermedad es.
d. Un Edit Control, el cual mediante la propiedad Name se debe modificar el
nombre por el de: edsintoma_ctl. Ahora la propiedad Text debe quedar vacía.
e. El botón Ok se debe renombrar con la propiedad Text, con Salir.
f. Agregar dos botones de comando, Push Button: Name=btnconsultar_ctl,
Text=Consultar y Name=btnlimpiar_ctl y Text=Limpiar datos.
27. Salir, grabar y ejecutar el proyecto.
28. Ahora, programar los botones del presente formulario, y se debe empezar con el botón
Limpiar, y dejar para el final el botón Consultar. Para esto hacer doble click sobre el
botón Limpiar con lo que debe aparecer el siguiente código:
predicates
onBtnlimpiarClick : button::clickResponder.
clauses
onBtnlimpiarClick(_Source) = button::defaultAction.

el que se debe modificar de la siguiente manera:

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 4


SISTEMAS EXPERTOS

predicates
onBtnlimpiarClick : button::clickResponder.
clauses
onBtnlimpiarClick(_Source) = button::defaultAction:-
edenfermedad_ctl:setText(""),
edsintoma_ctl:setText(""),
edenfermedad_ctl:setFocus().

29. Salir, grabar y ejecutar el proyecto.


30. Ahora, programar el botón Consultar, y se debe hacer doble click sobre él, con lo que
debe aparecer el siguiente código:
predicates
onBtnconsultarClick : button::clickResponder.
clauses
onBtnconsultarClick(_Source) = button::defaultAction.

el que se debe modificar de la siguiente manera:


facts
sintoma_de : (string,string).
clauses
sintoma_de("estornudo","gripe").
sintoma_de("dolor de cabeza","jaqueca").
sintoma_de("vómito","hepatitis").
predicates
onBtnconsultarClick : button::clickResponder.
clauses
onBtnconsultarClick(_Source) = button::defaultAction:-
Enfermedad=edenfermedad_ctl:getText(),
sintoma_de(Sintoma,Enfermedad),
edsintoma_ctl:setText(Sintoma),
!.
onBtnconsultarClick(_Source) = button::defaultAction:-
vpiCommonDialogs::error("Mensaje del Sistema Experto","No conozco síntoma para enfer
medad ingresada"),
edenfermedad_ctl:setText(""),
edenfermedad_ctl:setFocus().

31. Salir, grabar y ejecutar el proyecto.

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 5


SISTEMAS EXPERTOS

LABORATORIO 02

32. Tomar como referencia, el proyecto del laboratorio 01, y hacer algunos cambios con la
finalidad de mejorarlo. Para esto, un primer cambio debe ser, que el usuario ingrese en
mayúsculas o minúsculas el nombre de la enfermedad y que el sistema experto muestre
el síntoma respectivo, también en mayúsculas. Esto se logra, para ambos Edit Control,
poniendo la propiedad Case en Upper, por lo que ahora el código quedaría así:
facts
sintoma_de : (string,string).
clauses
sintoma_de("ESTORNUDO","GRIPE").
sintoma_de("DOLOR DE CABEZA","JAQUECA").
sintoma_de("VÓMITO","HEPATITIS").
predicates
onBtnconsultarClick : button::clickResponder.
clauses
onBtnconsultarClick(_Source) = button::defaultAction:-
Enfermedad=edenfermedad_ctl:getText(),
sintoma_de(Sintoma,Enfermedad),
edsintoma_ctl:setText(Sintoma),
!.
onBtnconsultarClick(_Source) = button::defaultAction:-
vpiCommonDialogs::error("Mensaje del Sistema Experto","No conozco síntoma para enfer
medad ingresada"),
edenfermedad_ctl:setText(""),
edenfermedad_ctl:setFocus().

33. Salir, grabar y ejecutar el proyecto.


34. Otro cambio que se debe hacer, es el de preguntarle al usuario si desea realmente salir
del proyecto cuando selecciona la opción Salir del menú principal. Para esto, retornando
a la carpeta TaskWindow, ubicamos el archivo TaskWindow.win sobre el cuál se hace
doble click, luego se abre la carpeta Menu y finalmente la opción TaskMenu para hacer
doble click sobre la opción id_salir, sobre la que se hace doble click, con lo que aparecerá
el código siguiente, anteriormente ya escrito:
predicates
onSalir : window::menuItemListener.
clauses
onSalir(_Source, _MenuTag):-
close().

El código anterior, se debe modificar de la siguiente manera:

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 6


SISTEMAS EXPERTOS

predicates
onSalir : window::menuItemListener.
clauses
onSalir(_Source, _MenuTag):-
Rpta=vpiCommonDialogs::messageBox("Mensaje del Sistema","¿Seguro de Salir?",1,2,1,
1),
if Rpta=1 then
close()
end if.

35. Finalmente, para no permitir edición en el campo del síntoma, es decir edsintoma_ctl,
debemos aperturar el formulario frm_consultas, y la propiedad ReadOnly del control
edsintoma_ctl, ponerla en True.
36. Ahora, los cambios que se harán, serán que el usuario ya no escriba el nombre de la
enfermedad, sino que seleccione de una lista de enfermedades, la que desea consultar.
Para esto, en primer lugar, siempre en el formulario frm_consultas, la propiedad
ReadOnly del control edenfermedad_ctl, ponerla en True.
37. Agregar al formulario, un control:
a. Static Text, para el que la propiedad Text, debe cambiar a: Enfermedades
Conocidas.
b. List Box, para el que la propiedad Name, debe cambiar a: lbenfermedades_ctl.
38. Ahora se deben cargar las enfermedades automáticamente al visualizarse el formulario
frm_consultas. Para esto, se debe ubicar el evento ShowListener y seleccionar onShow.
Luego sobre este último se hace doble click con lo que aparecerá el siguiente código:
predicates
onShow : window::showListener.
clauses
onShow(_Source, _Data).

El que se modificará de la siguiente manera:


predicates
onShow : window::showListener.
clauses
onShow(_Source, _Data):-
lbenfermedades_ctl:add("GRIPE"),
lbenfermedades_ctl:add("JAQUECA"),
lbenfermedades_ctl:add("HEPATITIS").

39. Finalmente, se debe programar el evento DoubleClickListener para el control


lbenfermedades_ctl, para que el usuario selecciones la enfermedad sobre la que desea
consultar. Esta luego pasará al edenfermedad_ctl. Para esto, se ubica el evento

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 7


SISTEMAS EXPERTOS

DoubleClickListener y se selecciona onLbenfermedadesDoubleClick, sobre el cuál se


hace doble click con lo que aparecerá el siguiente código:
predicates
onLbenfermedadesDoubleClick : listBox::doubleClickListener.
clauses
onLbenfermedadesDoubleClick(_Source).

El que se debe modificar de la siguiente manera:


predicates
onLbenfermedadesDoubleClick : listBox::doubleClickListener.
clauses
onLbenfermedadesDoubleClick(_Source):-
edenfermedad_ctl:setText(""),
edsintoma_ctl:setText(""),
lbenfermedades_ctl:getAllSelected(Enfermedades,_),
[Enfermedad|_]=Enfermedades,
edenfermedad_ctl:setText(Enfermedad),
!.
onLbenfermedadesDoubleClick(_Source):-
vpiCommonDialogs::error("Mensaje del Sistema Experto","Seleccione enfermedad").

40. Salir, grabar y ejecutar el proyecto.

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 8


SISTEMAS EXPERTOS

LABORATORIO 03

41. Ahora se debe proceder a modificar la barra-menú de herramientas principal del


proyecto. Para esto nos ubicamos en la carpeta Toolbars la que se encuentra dentro de
la carpeta TaskWindow.
42. Una vez ubicados en la carpeta Toolbars, ubicar el archivo ProjectToolbar.pro, sobre el
cuál hacer doble click, con lo que aparecerá el siguiente código:
controlList : vpiToolbar::control_list =
[
tb_ctrl(id_file_new,pushb(),resId(idb_NewFileBitmap),"New;New File",1,1),
tb_ctrl(id_file_open,pushb(),resId(idb_OpenFileBitmap),"Open;Open File",1,1),
tb_ctrl(id_file_save,pushb(),resId(idb_SaveFileBitmap),"Save;Save File",1,1),
vpiToolbar::separator,
tb_ctrl(id_edit_undo,pushb(),resId(idb_UndoBitmap),"Undo;Undo",1,1),
tb_ctrl(id_edit_redo,pushb(),resId(idb_RedoBitmap),"Redo;Redo",1,1),
vpiToolbar::separator,
tb_ctrl(id_edit_cut,pushb(),resId(idb_CutBitmap),"Cut;Cut to Clipboard",1,1),
tb_ctrl(id_edit_copy,pushb(),resId(idb_CopyBitmap),"Copy;Copy to Clipboard",1,1),
tb_ctrl(id_edit_paste,pushb(),resId(idb_PasteBitmap),"Paste;Paste from Clipboard",1,1),
vpiToolbar::separator,
tb_ctrl(id_help_contents,pushb(),resId(idb_HelpBitmap),"Help;Help",1,1)
].

El cuál se modificará de la siguiente manera:


controlList : vpiToolbar::control_list =
[
tb_ctrl(id_file_new,pushb(),resId(idb_NewFileBitmap),"Información;INformación",1,1),
tb_ctrl(id_file_open,pushb(),resId(idb_OpenFileBitmap),"Consultar;Consultar",1,1),
vpiToolbar::separator,
tb_ctrl(id_edit_cut,pushb(),resId(idb_CutBitmap),"Salir;Salir",1,1)
].

43. Salir, grabar y ejecutar el proyecto.


44. Ahora se debe programar los botones de la barra-menú. Para esto, ubicamos el archivo
TaskWindow.win y hacemos doble click sobre él.
45. Abrir ahora la carpeta Menú y luego la opción ProjectToolbar para ubicar en primer
lugar la opción id_file_new sobre la cuál hacemos doble click con lo que aparecerá el
siguiente código:
predicates
onFileNew : window::menuItemListener.
clauses
onFileNew(_Source, _MenuTag).

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 9


SISTEMAS EXPERTOS

El qué se modificará de la siguiente manera:


predicates
onFileNew : window::menuItemListener.
clauses
onFileNew(_Source, _MenuTag):-
_=frm_informacion::display(This).

46. Ahora seguir el mismo procedimiento del punto 45 para abrir la opción id_file_open, la
que debe finalmente quedar así:
predicates
onFileOpen : window::menuItemListener.
clauses
onFileOpen(_Source, _MenuTag):-
_=frm_consultas::display(This).

47. Finalmente hacer lo mismo para la opción id_edit_cut, la que debe quedar así:
predicates
onEditCut : window::menuItemListener.
clauses
onEditCut(_Source, _MenuTag):-
Rpta=vpiCommonDialogs::messageBox("Mensaje del Sistema","¿Seguro de Salir?",1,2,
1,1),
if Rpta=1 then
close()
end if.

48. Salir, grabar y ejecutar el proyecto.

Prof. Ing. Ms. Julio Luis Tenorio Cabrera - 10

You might also like