Você está na página 1de 6

SISTEMAS EXPERTOS

Diagnstico de Examen mdico para enfermedades respiratorias


A continuacin se realizar la descripcin del programa: La Presentacin del Programa Realizado en Prolog

% Author: Guillermo Grunauer y Jesica Cuenca % Title: SISTEMA EXPERTO DE DIAGNOSTICO Y TRATAMIENTO DE LA NEUMONIA % Date: 28/10/2011

La siguiente Lnea se declara la librera para usar el modo grfico:

:-use_module(library(pce)). Se especifica la ruta donde estarn las imgenes :-pce_image_directory('./img'). Se activan los estilos de la libreriaxpce:

:-use_module(library(pce_style_item)). Al iniciar el Programa este inicia la parte del cdigo descrito a continuacin:

Aqu se inicia un cuadro de dialogo de nombre Sistema Experto el cual solo sirve para una presentacin. iniciar:- new(Dialog,dialog('Sistema Experto')), Con la sentencia send presentamos el cuadro de dialogo con un tamao de (700,300) send(Dialog,size,size(700,300)), Instanciamos algunas etiquetas labels con nombre y en colores. new(L1,label(text,'Ingenieria de Sistemas')), send(L1,colour,black), new(L2,label(text,'***Integrantes***')), send(L2,colour,blue), new(L3,label(text,'GuillermoGrunauer')), send(L3,colour,red), new(L4,label(text,'Jesica Cuenca')), send(L4,colour,red), Luego con la sentencia send y append logramos introducir esas etiquetas dentro del cuadro de dialogo send(Dialog,append(L1)), send(Dialog,append(L2)), send(Dialog,append(L3)), send(Dialog,append(L4)), Instanciamos un boton con el nombre de iniciar el cual al hacer clic me llevar hacia otra parte de cdigo llamado main y luego cerrar el cuadro de dialogo actual. new(Btniniciar,button('Iniciar',and(message(@prolog,main),

and(message(Dialog,destroy),message(Dialog,free))))), send(Btniniciar,colour,green), Tambin instanciamos un botn con el nombre de salir el cual al hacer clic solo cerrar el cuadro de dialogo actual. new(Btnsalir,button('Salir', and(message(Dialog,destroy),message(Dialog,free)))), send(Btnsalir,colour,red), Con las Siguientes sentencias logramos introducer los dos botones al cuadro de dialogo send(Dialog,append(Btniniciar)), send(Dialog,append(Btnsalir)), Y con las siguientes sentencias se logra que el cuadro de dialogo se abra de forma centrada send(Dialog,display,L1,point(60,130)), send(Dialog,open_centered). :-iniciar. Se obtendr lo siguiente

Una vez que se ha hecho clic sobre el botn iniciar, ste me lleva hacia esta parte del cdigo que se llama main. En el main se instancia otro cuadro de dialogo en el cual le hemos puesto de encabezado 'SISTEMA EXPERTO - EXAMEN MEDICO SOBRE PROBLEMAS RESPIRATORIOS', con un tamao de (1000,1000) y se le introduce una etiqueta de nombre 'BIENVENIDO A SU DIAGNSTICO'. main:new(Menu, dialog('SISTEMA EXPERTO - EXAMEN MEDICO SOBRE PROBLEMAS RESPIRATORIOS', size(1000,1000))), new(L, label(nombre,'BIENVENIDO A SU DIAGNSTICO')),

Aqu se crea dos variables de label, una de nombre @texto y la otra @resp1, los cuales me ayudar a presentar el resultado obtenido de las preguntas: new(@texto, label(nombre,'De acuerdo con sus respuestas obtenidas usted padece de:')), new(@resp1, label(nombre,'')), Se creaunbotnsalir

new(Salir,button('SALIR',and(message(Menu,destroy),message(Menu,free)))), Aqu se crea un Nuevo botn de nombre 'Iniciar su diagnostico' new(@boton, button('Iniciar su diagnostico',message(@prolog, botones))), send(Menu, append(L)), new(@btncarrera,button('Diagnostico?' )), send(Menu, display,L,point(125,20)), send(Menu, display,@boton,point(40,50)), send(Menu, display,@texto,point(20,100)), send(Menu, display,Salir,point(20,400)), send(Menu, display,@resp1,point(20,130)), send(Menu,open_centered).

En esta parte de codigo se especifica la hipositesis de las possible enfermedades que me serviran para diagnosticar el possible caso que se presente de acuerdo a las preguntas propuestas.

hipotesis(neumonia):- neumonia,!. hipotesis(gripe):- gripe,!. hipotesis(tos):- tos,!. hipotesis(sinositis):- sinositis,!. hipotesis(alergias):- alergias,!. hipotesis(desconocido). /* no existe*/ Reglas de identificacin Una vez que verifica es llamado en el cuadro de dialogo se va a ir mostrando cada una de las preguntas que se coloca en la sentencia que hemos puesto de nombre verifica, siempre y cuando las reglas de clasificacin hayan tomado un camino a seguir. /*NEUMONIA*/ neumonia :- padece_neumonia,

verifica('Tiene catarro?'), verifica('Tiene altos niveles de fibre prolongada ( +3 das)?'), verifica('Tiene frecuencia respiratoria aumentada ( +20 das)?'), verifica('Se le produce un hundimiento o retraccin de las costillas con la respiracin?'), verifica('Tiene quejidos en el pecho como asmtico al respirar?'), verifica('Tiene tos que produce una expectoracin de tipo amarillenta?'). /*GRIPE*/ gripe :- padece_gripe, verifica('Tiene estornudadera?'), verifica('Tiene altos niveles de fibre con escalofros?'), verifica('Las fosas nasales se abren y se cierran como un aleteo rpido con la respiracin?'), verifica('Tiene decaimiento y malestar al cuerpo?'), verifica('Tiene mucosidad transparantecontiua?'), verifica('Tiene inflamacion de la fosas nasales con sensacin de sequedad en la garganta?'), verifica('Tiene cefalea fija (Dolor de Cabeza), no pulstil, que es consecuencia de la fiebre?'). /*TOS*/ tos :- padece_tos_con_flema, verifica('Toce con frecuencia?'), verifica('Tiene tos que produce una expectoracin de tipo amarillenta o verdosa?'), verifica('Tiene decaimiento y malestar al cuerpo?'), verifica('Tiene inflamacion de las admigdalas?'), verifica('Tiene inflamacion de la fosas nasales?'), verifica('Siente que esta deshidratado/a?'). /*SINOSITIS*/ sinositis :- padece_sinositis, verifica('Tiene picazon en el interior de las fosas nasales?'), verifica('Tiene estornudadera?'), verifica('Las fosas nasales se abren y se cierran como un aleteo rpido con la respiracin?'), verifica('Tiene secrecin retronasal?'), verifica('Tiene inflamacion de la fosas nasales?'), verifica('Tiene cefalea grave (Dolor de Cabeza)?'), verifica('Tiene decaimiento y malestar al cuerpo?'). /*ALERGIA*/ alergias :- padece_alergias, verifica('Tiene congestin o goteo de la nariz con estornudos(particularmente en la maana)?'), verifica('Tiene picazn y lagrimeo de los ojos?'), verifica('Tiene Tos seca?'), verifica('Tiene silbido al respirar?'), verifica('Tiene mucosidad transparantecontiua?'), verifica('Tiene enrojecimiento de la piel?'). /*DESCONOCIDO*/ desconocido :- se_desconoce_enfermedad.

De aqu se obtiene las Reglas de Clasificacin, que me ayudar a determinar qu camino tomar.

Por ejemplo si uno coloca no en el cuadro de dialogo que aparece en la primera pregunta Tiene catarro? Pues si la respuesta es No hasta ah no ms llega, luego salta a la siguiente pregunta, si coloca si en la siguiente pregunta hecha, entonces se va automticamente a las reglas de identificacin. padece_neumonia:- verifica('Tiene catarro?'),!. padece_gripe :- verifica('Tiene estornudadera?'),!. padece_tos_con_flema :- verifica('Toce con frecuencia?'),!. padece_sinositis :- verifica('Tiene picazon en el interior de las fosas nasales?'),!. padece_alergias :- verifica('Tiene congestin o goteo de la nariz con estornudos(particularmente en la maana)?'),!.

Se crea la ventana con la Imagen correspondiente al test de evaluacin En esta parte del dynamic solo se va ir llenando con los si o no obtenidos de cada cuadro de dialogo por cada pregunta realizada: :-dynamic si/1,no/1. Aqu se abre un cuadro de dialogo con el nombre de 'EXAMEN MEDICO' y un label con nombre 'Responde las siguientes preguntas' preguntar(Problema):- new(Di,dialog('EXAMEN MEDICO')), new(L2,label(texto,'Responde las siguientes preguntas')), new(La,label(prob,Problema)), Aqu se crea dos botones de verificacin de Si y No el cual retorna un valor de si o no new(B1,button(si,and(message(Di,return,si)))), new(B2,button(no,and(message(Di,return,no)))), /*send(Di, gap, size(25, 25)),*/ En esta parte se colocan los labes y los botones al cuadro de dialogo send(Di,append(L2)), send(Di,append(La)), send(Di,append(B1)), send(Di,append(B2)), Esta parte solo me indica el que boton accionado por defecto ser s. send(Di,default_button,si), send(Di,open_centered),get(Di,confirm,Answer), write(Answer),send(Di,destroy), Aqu llama a la sentencia Problema para determina por medio de las repuestas cual va a ser su diagnostico ((Answer==si)->assert(si(Problema)); assert(no(Problema)),fail). verifica(S):-(si(S)->true; (no(S)->fail; preguntar(S))). deshacer:-retract(si(_)),fail. deshacer:-retract(no(_)),fail. deshacer.

Creacin de @botones botones :- borrado, send(@boton, free), send(@btncarrera,free), De acuerdo a las respuestas dadas por el usuario la enfermedad que se presentara ser dada por las hiptesis que se declara al inicio del cdigo. hipotesis(Enfermedad), send(@texto, selection('De acuerdo con sus respuestas obtenidas usted padece de:')), La hiptesis toma el nombre para almacenarla en Enfermedad, luego es presentada por la variable @resp1 send(@resp1, selection(Enfermedad)), new(@boton, button('Iniciar su Evaluacin',message(@prolog, botones))), send(Menu, display,@boton,point(40,50)), send(Menu, display,@btncarrera,point(20,50)), deshacer. borrado:send(@resp1, selection('')).

Você também pode gostar