You are on page 1of 11

DEPARTAMENTO ACADEMICO DE INFORMTICA RECURSION Y APLICACIONES PARA WINDOWS GUIA N 3

CURSO: TEMA:

INTELIGENCIA ARTIFICIAL RECURSION Y APLICACIONES PARA WINDOWS

1.OBJETIVOS Al finalizar la prctica el alumno estar en la capacidad de: Realizar un programa en visual prolog, utilizando relaciones compuestas. Aprender a crear aplicaciones para windows con: barra de menus, barra de herramientas, ventana de dialogo, etc. 2.TRABAJO PREPARATORIO Introduccin al prolog. Sintaxis bsica de prolog. Definicin de relaciones (clauses).

3.-

DESARROLLO DE APLICACIONES EN VISUAL PROLOG

El entorno de desarrollo de Visual Prolog nos proporciona la capacidad de generar aplicaciones lgicas orientadas a eventos para Windows de forma sencilla. Disponemos de capacidades de creacin de programas de forma visual y esto implica que el cdigo que implementa la interfaz de usuario sea generado en su mayor parte por el propio Experto del entorno de desarrollo. De lo que se tiene que encargar el programador, por tanto, es de especificar las tareas que se deben llevar a cabo como respuesta a los sucesos o eventos que se producen en el sistema. Aplicaciones orientadas a eventos en Visual Prolog Cuando el usuario realiza una operacin para interactuar con el sistema (pulsar una tecla, mover el ratn,...), se produce un suceso o evento. Dicho evento es generado desde el interfaz hardware y el sistema operativo lo traduce a un mensaje con formato estndar y enva una notificacin de evento al propietario correcto que generalmente es la ventana activa (la que tiene el foco). La interfaz de un programa en Visual Prolog va a ser simplemente un conjunto de ventanas de aspectos y tipos distintos organizadas mediante una jerarqua. La ventana principal se denomina ventana de tareas o Task Window. Cada ventana tiene un nmero que la identifica dentro del sistema, ese nmero se denomina manejador (handler) de la ventana.

Ing. Luis Palma Ttito

Dado que las ventanas se encuentran organizadas en un sistema jerrquico podemos hablar de que cada ventana tiene un padre. Cada ventana lleva asociado un predicado que maneja todos los eventos para la misma. Dicho predicado pertenece al dominio EHANDLER y tiene dos argumentos importantes:

El manejador de la ventana: handler. Un predicado que describe el evento producido, de ahora en adelante evento.

Adems los predicados del dominio EHANDLER pueden devolver valores a travs de un parmetro de retorno del dominio LONG que se usan en muy pocos casos. Normalmente, se devuelve 0. Controles Visuales en Visual Prolog Windows Existen distintos tipos de ventanas dependiendo del lugar que ocupen en la jerarqua. Task Window: Es una abstraccin de la aplicacin en s misma. Es la ventana principal del programa y la inicializacin y finalizacin de ste estn siempre asociados a dicha ventana. Bajo el modo MDI (Multiple Document Interface) la ventana principal acta como contenedor de las ventanas hijas. Screen Window: Es una abstraccin que representa la pantalla entera. Esta ventana siempre es el padre de la Task Window. Top-Level Window: Se trata de un documento normal de Windows cuyo padre puede ser la Task Window o la Screen Window. Pueden almacenar ventanas hijas y controles y, a menudo, contienen mens y pueden ser maximizadas y minimizadas. Child Windows: Estn restringidas a permanecer dentro de su ventana padre. Cuando la ventana padre es cerrada, destruida, minimizada, etc., tambin lo son las ventanas hijas. Print: Ventana interna usada durante el proceso de impresin Picture: Ventana interna usada durante el proceso de creacin de un grfico, imagen o dibujo. Metafile: Ventana interna usada durante la creacin de un metafile. Dialogs Los dilogos son un tipo especial de ventanas, cuya funcionalidad est reducida con respecto a las ventanas normales. Los dilogos normalmente se rellenan con controles, que puede interactuar con el usuario para visualizar salidas, aceptar entradas, ofrecer mtodos de seleccin de opciones o permitir la edicin de texto. Los dilogos pueden ser de dos tipos: Dilogo modal: Hasta que el dilogo no es cerrado no se puede acceder a las ventanas de la aplicacin que se encuentran debajo de dicho dilogo. Dilogo no modal: Es posible acceder a lo que est debajo del dilogo antes de haberlo cerrado. Controls
Ing. Luis Palma Ttito 2

Los controles proveen al usuario la capacidad de escribir texto, llamar a comandos o elegir opciones. Los eventos que se generan por la manipulacin de los controles causan notificaciones de mensajes que se envan al manejador de eventos de la ventana padre. Existen varios tipos de controles: PushButton: Botn tpico que puede apretarse y soltarse. RadioButton: Botn de aspecto redondo que suele estar agrupado con otros de la misma clase y slo uno de ellos permanece activo simultneamente. CheckBox: Botn de aspecto cuadrado que puede estar o no marcado. HScroll: Barra de scroll horizontal. VScroll: Barra de scroll vertical. Edit: Cuadro o ventana de edicin de texto. Text: Etiqueta de texto esttico. LBox: Lista de opciones o cadenas que pueden ser seleccionadas. LBoxButton: Lista desplegable de opciones. LBoxEdit: Lista desplegable de texto que puede editarse. Icon: Icono. Custom: Control personalizado.

Tipos de predicados Pueden existir 6 tipos de predicados en funcin de cmo y cuantas soluciones pueden aportar y si pueden o no fallar. Cada predicado puede tener varias clusulas o reglas que lo implementa, por tanto, clusulas y predicados deben ser coherentes. Esta coherencia est relacionada con el concepto de determinismo en Visual Prolog. La mayora de los lenguajes son deterministas. Esto quiere decir que cualquier conjunto de datos de entrada conduce a un nico conjunto de instrucciones para producir un conjunto de datos de salida. Sin embargo, en Visual Prolog se admite la inferencia no determinista basada en predicados no deterministas. Visual Prolog ejerce un gran control sobre el determinismo de las reglas y predicados que aparecen en los programas, principalmente con el objeto de ahorrar espacio de almacenamiento en tiempo de ejecucin. Cuando una clusula o regla determinista que
Ing. Luis Palma Ttito 3

compone un predicado termina con xito, el espacio de pila correspondiente puede ser dispensado rpidamente, liberando de este modo el espacio ocupado. El sistema de control del determinismo de Visual Prolog es muy fuerte. De hecho, el compilador fuerza al programador, a travs de este control, a declarar en sus predicados 2 aspectos de comportamiento importantes:

Si la llamada a un predicado puede fallar. Nmero de soluciones que un predicado puede producir.

De acuerdo a estos dos aspectos de determinismo, Visual Prolog soporta los siguientes tipos de predicados:

erroneous: nunca debe fallar y debe producir 0 soluciones. failure: puede fallar y debe producir 0 soluciones. nondeterm: puede fallar y puede producir mltiples soluciones. procedure: nunca debe fallar aunque pueden producirse errores en tiempo de ejecucin y debe producir una nica solucin. determ: puede fallar y debe producir una nica solucin, es decir, no hacen backtracking. multi: nunca debe fallar y puede producir mltiples soluciones mediante la tcnica de backtracking. anyflow: anyflow sirve para especificar que el parmetro es de entrada/salida

El sistema de control de determinismo de Visual Prolog chequea la correspondencia de las definiciones de predicados con los modos de determinismo declarados para los predicados. Por defecto, el compilador verifica las clusulas o reglas de predicados y da un warning si no puede garantizar que un predicado declarado como multi, procedure o erroneous nunca falla. Todos los predicados se definen internamente con alguno de estos modos. Para los predicados definidos como determ, procedure, failure o erroneous el compilador dar un warning para cada clusula o regla del programa que d como resultado un predicado no determinista. Hay dos tipos de clusulas no deterministas:

Aquellas que no contienen un corte y hay una o ms clusulas que pueden casar (o unificarse) con los mismos argumentos de entrada para ese patrn de flujo de entrada. Aquellas que llaman a un predicado no determinista y dicha llamada no est seguida de un corte. Debido a esto, el no determinismo puede extenderse por muchos predicados a menos que se utilicen uno o ms cortes.

Cuando se escriben predicados declarados como multi, procedure o erroneous se deben seguir un par de reglas:

Si alguna clusula de predicado puede fallar se debe definir al final una clusula que no falle seguro. De acuerdo a los dominios declarados, para cualquier posible conjunto de elementos de entrada debe existir una clusula que tenga una cabeza que case con dicho conjunto.
4

Ing. Luis Palma Ttito

Operadores aritmticos bsicos Visual prolog provee los siguientes operadores aritmticos: + - * / mod div Suma Resta Multiplicacin Divisin real Resto de una divisin Cociente entero de una divisin

Formato de cadenas Para dar formato de cadenas de salida usted puede utilizar el mtodo writef de la clase stdio o bien puede utilizar el mtodo format de la clase string, de la siguiente forma:
stdio::writef(Hola %, % es tu amigo, A, B). string::format(Hola %, % es tu amigo, A, B).

Clase math La clase math implementa diversas operaciones matemticas para valores numricos y contiene el generador de nmeros aleatorios, entre algunos de ellos estn: ln: halla el logarimo natural de un nmero. sqr: halla el cuadrado de un nmero sqrt: halla la raz cuadrada de un nmero sin: halla la funcin trigonomtrica seno cos: halla la funcin trigonomtrica coseno tan: halla la funcin trigonomtrica tangente round: redondea un valor real a entero tryToInteger: Funcin de la clase math que permite convertir en nmero entero una cadena. tryToReal: Funcin de la clase math que permite convertir en nmero real una cadena. pi: provee la constante Pi

Ing. Luis Palma Ttito

4.-

PRCTICA DE LABORATORIO 4.1.- Cree una aplicacin de bienvenida a visual prolog, utilizando: formularios, barra de men, eventos de mouse. etc. a) Solicite una aplicacin de Visual Prolog del tipo GUI (Interfaz Grfica de Usuario).

b) Genere el proyecto mediante el men Buil Bulid, y conseguir que el proyecto genere los archivos siguientes:

La aplicacin de Visual Prolog, ya contiene: una barra de men, barra de herramientas, formulario principal y una ventana Acerca de. c) Elimine usted el men accediendo al archivo TaskMenu.mnu. Y nicamente deje el siguiente contenido:

Ing. Luis Palma Ttito

d) Agregue un formulario de dialogo, como el de la figura:

fmSaludo e) En el botn Aceptar agregue el siguiente cdigo que permite capturar el nombre del usuario y darle una bienvenida.
onOkClick(_Source) = button::defaultAction :X = tbNombre:getText(), vpiCommonDialogs::note(string::concat(X, ", Bienvenido a Visual Prolog")).

Donde: tbNombre: Caja de texto del formulario, donde el usuario escribe su nombre. tbNombre:getText(): Mtodo recuperar el texto del control textbox. vpiCommonDialogs::note : Lllamada al cuadro de dialogo de notas (cuadro de mensaje) contenida en la clase vpiCommonDialogs. string::concat : Lallmada al mtodo de concatenacin contenida en la clase string. f) Agregue un evento al men Archivo-Bienvenida de la forma siguiente Seleccione la opcin Code Expert (cdigo experto) en el men contextual del archivo TaskWindow.win

Ing. Luis Palma Ttito

Luego seleccione la opcin: AddEvent (agregar evento), para agregar evento al tem id_archivo_bienvenida, luego elija Go to Event Code (Ir al cdigo experto del evento)

g) Para llamar al formulario desde el men escriba el siguiente cdigo:


onArchivoBienvenida(V, _MenuTag):X = fmSaludo::new(V), X:show().

Donde: fmSaludo::new() : Llamada al constructor de la clase fmSaludo (formulario de saludo), X: es el objeto del tipo formulario X:show(): Llamada al mtodo show (mostrar) del objeto frSaludo. h) En el men Archivo Salir, coloque el siguiente cdigo:
onArchivoSalir(_Source, _MenuTag) :close().

4.2.- Desarrolle una aplicacin que muestre los nmeros naturales hasta N. Algoritmo de programa que imprime los naturales hasta N
predicates escribe_naturales : (integer N) procedure (i). clauses escribe_naturales(1) :- stdio::writef("% \n", 1), !. escribe_naturales(N) :- escribe_naturales(N1), stdio::writef("% \n", N).

Llamada al predicado imprime_naturales, desde un botn de una ventana de dialogo Nota:


clauses onOkClick(_Source) = button::defaultAction :imprime_naturales(math::tryToInteger(tbNumero:getText())), fail.

Ing. Luis Palma Ttito

onOkClick(_Source) = button::defaultAction :- succeed().

Formulario de referencia

4.3. Desarrolle una aplicacin que muestre el factorial de un nmero entero. Algoritmo de programa que muestra el factorial de N
predicates factorial : (integer N, integer F) procedure (i, o). clauses factorial(0, 1) :- !. factorial(N, N*F) :- factorial(N-1, F).

Llamada al predicado factorial, desde un botn de una ventana de dialogo


clauses onOkClick(_Source) = button::defaultAction :N = math::tryToInteger(tbN:getText()), factorial(N, F), vpiCommonDialogs::note(string::format("% ! = %",N, F)), fail. onOkClick(_Source) = button::defaultAction :- succeed().

Formulario de referencia

4.4. Desarrolle una aplicacin que sume los dgitos de un nmero entero Programa recursivo que determina la suma de dgitos de un nmero entero positivo
predicates suma_digitos : (integer N, integer S) procedure (i,o). clauses suma_digitos(N, N) :- N < 10, !. suma_digitos(N, S + (N mod 10)) :- suma_digitos(N div 10, S).

Llamada al predicado suma_digitos, desde un botn de una ventana de dialogo


clauses onOkClick(_Source) = button::defaultAction :N = math::tryToInteger(tbNumero:getText()), suma_digitos(N, S), Ing. Luis Palma Ttito 9

tbSumaDigitos:setText(string::format("%",S)), fail. onOkClick(_Source) = button::defaultAction :- succeed().

Formulario de referencia

4.5. Desarrolle una aplicacin para solucionar el problema de las torres de hannoi para N disco Algoritmo de para mover los discos de una torre de hanoi
predicates hannoi : (integer N, string X, string Y, string Z) nondeterm anyflow. clauses hannoi(1,X,Y,_) :stdio::writef("Mover disco desde % hasta % \n", X, Y), !. hannoi(N,X,Y,Z) :hannoi(N-1, X, Z, Y), hannoi(1, X, Y, Z), hannoi(N-1, Z, Y, X).

Llamada al predicado hannoi, desde un botn de una ventana de dialogo


clauses onOkClick(_Source) = button::defaultAction :N = math::tryToInteger(tbNroDiscos:getText()), hannoi(N, "1", "2", "3"), fail. onOkClick(_Source) = button::defaultAction :- succeed().

Formulario de referencia

Ing. Luis Palma Ttito

10

INTELIGENCIA ARTIFICIAL Gua Nro 03 PREDICADOS COMPLEJOS Y VISUAL PROLOG Nombres: __________________________________________________ Cdigo: ______________________ Fecha: ___________ Nota: _______

CUESTIONARIO 1.- Ampli la aplicacin Bienvenido a Prolog y muestre el mensaje de bienvenida en la ventana de mensajes y tambien amplie para activar la ventana de bienvenida desde la barra de herramientas (mostrar al docente) 2.- Los operadores aritmticos son: +, -, *, /, div, mod, Desarrolle una aplicacin con un formulario que permita evaluar las operaciones binarias aritmtica (mostrar al docente) 3.- Desarrolle las aplicaciones recursivas de la prctica de laboratorio de la presente gua: Mostrar enteros hasta N, Factorial de N, Suma de dgitos de entero, Torres de Hannoi (mostrar al docente) 4.- En clases y objetos se utilizan los smbolos :: y :, en que caso se utiliza el uno y en que caso el otro, y cul es su propsito? ................................................................................................................................................................ ................................................................................................................................................................

5.- Desarrolle los siguientes programa recursivos y utilizando formularios Programa que determine la sumatoria de n, n = 1+2+3+. + n Programa que muestre el n-simo termino de la serie fibonacci Programa que muestre los primero n terminos de la serie fibonacci Programa que convierta un nmero binario a decimal Programa que convierta un nmero decimal a binario (mostrar al docente).

............................. Firma del Alumno

Ing. Luis Palma Ttito

11

You might also like