You are on page 1of 17

TECNOLGICO NACIONAL DE MXICO

INSTITUTO TECNOLGICO DE ACAPULCO


Educacin Tecnolgica con Compromiso Social
Ingeniera en Sistemas Computacionales
Carrera
PROGRAMACION LOGICA
Asignatura
Unidad 1:

Competencia especfica
a desarrollar:

Profesor:

Criterios de evaluacin de la unidad

Ing. Silvestre Bedolla Solano.

Equipo: 8
Alumnos:
HERRERA PIMBER GUADALUPE
GUZMN GUERRERO GLADIS
LOPEZ MIRANDA ITZEL
MIRANDA CAMPOS CESAR AUGUSTO
CERVANTES MUNDO ANGEL EDUARDO
LAGUNAS MENDEZ FREDDY

11320582
11320207
12320109
10320147
12320008
12320018

Acapulco, Gro. A 11 de Septiembre del 2015

CUADRO SINOPTICO DONDE SE DESCRIBA LOS DIVERSOS ESTILOS


DE LA PROGRAMACION (10%)

Tabla donde se describan los conceptos bsicos de la programacin


representativa, presentando ejemplos (20%).

PROGRAMACION REPRESENTATIVA
PROGRAMACION

P. Declarativa

P. Lgica

P. Funcional

P. Multiparadigma

CONSISTE EN:
Programacin en el que
el
programador
especifica
que
debe
computarse en lugar de
como deben realizarse
los cmputos.
Computacin
en
la
mquina, deduccin en
la lgica y satisfaccin en
un modelo estndar de la
teora.
En
programacin
funcional la descripcin
de dominios conduce a la
idea de tipo de datos.

CARACTERISTICAS
-Programa= Lgica +
Control

-Permite una bsqueda


indeterminista
(built-in
search) de soluciones.

-Comprobacin de las
expresiones.
-expresiones funcionales
-concepto matemtico de
funcin

Consiste
en
la -Permiten
la
gestin
integracin
de
los automtica
de
la
distintos paradigmas de memoria.
programacin
-responder a diferentes
declarativa.
consultas (objetivos)
-estructuras de datos.

EJEMPLOS:
Programacin declarativa:
Funcin que invierte el orden de los elementos en una lista.
rev :: [t] [t]
rev [ ] = [ ]
rev (x : xs) = app (rev xs) [x]
Programacin logica:
% Hechos:
es_espaol("Manolo").
es_italiano("Marco").

es_colombiano("Marcelo").
% Reglas:
es_europeo(A) :- es_espaol(A).
es_europeo(A) :- es_italiano(A).
es_americano(A) :- es_colombiano(A).
es_terricola(A) :- es_europeo(A).
es_terricola(A) :- es_americano(A).
son_del_mismo_continente(A,B) :- es_europeo(A), es_europeo(B).
son_del_mismo_continente(A,B) :- es_americano(A), es_americano(B).
Programacion funcional

Programacin multiparadigma
package main
import "fmt"
func main() {
var a int
var c int
c=5
fmt.Printf("La serie del 5 :)...\n")
for n := 1; n < 11; n++ {
a=n*c
fmt.Printf("%d ,", a)

}
}

Reporte con las caractersticas de la programacin representativa,


donde explique tres ejemplos con sus cdigos, entornos etc. (10%).

Caractersticas de los lenguajes de programacin representativa:

Los lenguajes representativos estn orientados a buscar la solucin del


problema, sin preocuparse por la forma de llegar, el programador debe
concentrarse en la lgica del algoritmo, donde el control de secuencia lo
considera.

Los programas estn formados por un conjunto de definiciones o


ecuaciones, la cuales describen lo que debe ser calculado.

Donde pueden estar asignados un valor a lo largo de la ejecucin del


programa en lo cual implica que no puede existir asignacin destructiva.

Tener en cuenta las soluciones en el lenguaje de programacin debe ser


implementarle en una computadora para ser capaz de dichas acciones.

Ensayo sobre un lenguaje de programacin representativa (25%).

INTRODUCCIN
Los primeros lenguajes de programacin de alto nivel se disearon durante los
aos 1950. Desde entonces los lenguajes de programacin han sido una
fascinante y prolfica rea de estudio para los cientficos de la computacin y los
ingenieros.
El estudio de los lenguajes de programacin, es llamado a veces lingstica de la
programacin, por analoga con la lingstica de los lenguajes naturales. La
analoga se basa en el hecho en que ambos; lenguajes naturales y lenguajes de
programacin, poseen sintaxis (forma) y semntica (significado). La analoga no
puede tomarse en todo el contexto, Los lenguajes de programacin no pueden ser
comparados con los lenguajes naturales en trminos de su rango de expresividad
y subjetividad. Por otro lado, un lenguaje natural no es ms ni menos que un grupo
de personas que hablan y escriben, as que la lingstica natural est restringida al
anlisis de los lenguajes existentes; mientras que los lenguajes de programacin
son concienzudamente diseados y se pueden implementar en computadoras.
CONCEPTOS BSICOS
Cada lenguaje de programacin es una creacin y como tal ha sido
cuidadosamente diseado. Algunos lenguajes han sido diseados por personas
nicas, como por ejemplo Pascal. Otros, han sido diseados por un grupo grande
de personas, tales como PL/l y Ada. La experiencia sugiere que aquellos lenguajes
diseados por personas nicas o grupos pequeos, tienden a ser ms compactos
y coherentes que aquellos lenguajes diseados por grandes grupos.
Un lenguaje de programacin, digno de su nombre, debe reunir ciertos requisitos.
El lenguaje de programacin debe ser universal. Es decir, cualquier problema
debe tener una solucin que puede ser programada en el lenguaje y dicha
solucin ser implementada en cualquier computador. Este requisito es uno de los
ms fuertes y pocos lenguajes lo poseen. Se dice que cualquier lenguaje en el
cual pueden definirse funciones recursivas se considera universal. De otro lado, un
lenguaje sin recursin ni iteracin no puede ser universal. Existen ciertos
lenguajes de aplicacin que no son universales, pero s podran ser
razonablemente descritos as mismos, como lenguajes de programacin.
El lenguaje de programacin debe ser implementarle en una computadora, es

decir; debe ser posible ejecutar un programa en trminos del lenguaje en cualquier
mquina. La notacin matemtica generalmente no es implementable porque en
su notacin es posible formular problemas que no pueden ser resueltos por
cualquier computador. Los lenguajes naturales tampoco son implementables por
razones totalmente diferentes: ellos son tan imprecisos y tienden a ser muy
ambiguos.
SINTAXIS Y SEMNTICA
Cada lenguaje tiene sintaxis y semntica:

La sintaxis de un lenguaje de programacin est relacionada con la forma


de los programas, por ejemplo, como es que las expresiones, comandos,
declaraciones, etc. son puestos juntos en un programa.

La semntica de un lenguaje de programacin est relacionada con el


significado de los programas; por ejemplo, cmo ellos se comportarn
cuando se ejecutan en una computadora.

La sintaxis de un lenguaje influye en cmo los programas son escritos por el


programador, ledos por otro programador y traducidos por el computador. La
semntica de un lenguaje determina como los programas son compuestos por el
programador, entendidos por otros programadores e interpretados por el
computador. La sintaxis es importante; pero la semntica es ms importante an.

ENFOQUE HISTRICO
Los lenguajes de programacin de hoy son el producto de un desarrollo que se
inici en los 1950's. Numerosos conceptos de lenguajes han sido inventados,
examinados e implementados en sucesivos lenguajes. Con muy pocas
excepciones, el diseo de cada lenguaje ha sido fuertemente influenciado por la
experiencia con los lenguajes iniciales. Los lenguajes de hoy no son el producto
final del desarrollo del diseo del lenguaje; nuevos conceptos y paradigmas estn
siendo desarrollados y el escenario de los lenguajes de programacin de los
prximos diez aos podra ser un poco diferente al de hoy.
PARADIGMAS DE LA PROGRAMACION.
Para que una computadora realice una tarea, debe programrsela para que lo
haga colocando en la memoria principal un algoritmo apropiado el cual es
expresado en lenguaje mquina. En los inicios de la programacin, esta tarea era
onerosa por lo laborioso y difcil de disear cada algoritmo (sin contar los errores
en que se podra incurrir). El gran paso se dio cuando se empez a dar

mnemnicos a los diversos cdigos de operacin y a los operandos del lenguaje


de mquina. Con esto, los programadores pudieron aumentar considerablemente
la comprensibilidad de las secuencias de instrucciones mquina. Por ejemplo, la
siguiente rutina, empleando el mtodo mnemnico:

CRG
CRG
MULTI R0
ALM
STOP

R2
R3
R2 R3
R0

TARIFA
HORAST
PAGO

Se puede interpretar como: cargar en el registro R2 al valor de TARIFA, cargar en


el registro R3 el valor de HORAST, en la tercera sentencia, MULTI RO, 192,193
significa multiplique el contenido de R2 por R3 y pngalo en RO. A este tipo de
lenguaje de programacin se convino en llamarlo lenguaje ensamblador debido a
que justamente un programa llamado ensamblador se encargaba de traducir estos
mnemnicos a una forma ms compatible con la mquina.
(Se le llam ensamblador porque su tarea era ensamblar instrucciones en
lenguaje mquina a partir de los cdigos de operacin y operando obtenidos al
traducir nombre mnemnicos e identificadores). Al lenguaje ensamblador se le
conoce tambin como lenguaje de bajo nivel. Una desventaja importante del
lenguaje ensamblador es el ser dependiente de la mquina, es decir, si se cambia
la mquina, cambia el programa ensamblador.

Al estudio de los lenguajes en cuanto al enfoque del proceso de programacin se


le denomina paradigmas de la programacin, entendindose el trmino paradigma
como la forma de ver y hacerlos programas. Bajo este enfoque se tienen cuatro
paradigmas los cuales son:

paradigma por procedimientos o paradigma imperativo

paradigma declarativo

paradigma funcional

paradigma orientado a objetos

El paradigma por procedimientos, es tal vez el ms conocido y utilizado en el


proceso de programacin, donde los programas se desarrollan a travs de
procedimientos. Pascal C y BASIC son tres de los lenguajes imperativos ms
importantes. La palabra latina imperare significa "dar instrucciones". El paradigma
se inici al principio del ao 1950 cuando los diseadores reconocieron que las
variables y los comandos o instrucciones de asignacin constituan una simple
pero til abstraccin del acceso a memoria y actualizacin del conjunto de
instrucciones mquina. Debido a la estrecha relacin con la arquitectura de la
mquina, los lenguajes de programacin imperativa pueden ser implementados
muy eficientemente, al menos en principio.

El paradigma imperativo an tiene cierto dominio en la actualidad. Una buena


parte del software actual ha sido desarrollado y escrito en lenguajes imperativos.
La gran mayora de programadores profesionales son principalmente o
exclusivamente programadores imperativos (Hay que aadir que los paradigmas
de la programacin concurrente y orientada al objeto son en realidad subparadigmas de la programacin imperativa, as que sus adeptos tambin son
programadores imperativos).

El paradigma declarativo o paradigma de programacin lgica se basa en el hecho


que un programa implementa una relacin antes que una correspondencia. Debido
a que las relaciones son mas generales que las correspondencias (identificador direccin de memoria), la programacin lgica es potencialmente de ms alto nivel
que la programacin funcional o la imperativa. El lenguaje ms popular enmarcado
dentro de este paradigma es el lenguaje PROLOG. El auge del paradigma
declarativo se debe a que el rea de la lgica formal de las matemticas ofrece un
sencillo algoritmo de resolucin de problemas adecuado para, usarse en un
sistema de programacin declarativo de propsito general.

Si la programacin imperativa se caracteriza por el uso de variables, comandos y


procedimientos, la programacin funcional se caracteriza por el uso de
expresiones y funciones. Un programa dentro del paradigma funcional, es una
funcin o un grupo de funciones compuestas por funciones ms simples
establecindose que una funcin puede llamar a otra, o el resultado de una
funcin puede ser usado como argumento de otra funcin. El lenguaje por
excelencia ubicado dentro de este paradigma es el LISP. Por ejemplo si se desea
obtener la nota promedio de un alumno podra construirse una funcin promedio la
cual se obtendra a partir de otras funciones ms simples: una (sumar) la cual
obtiene la suma de las entradas de la lista, otra (contar) la cual cuenta el nmero
de entradas de la lista y la tercera (dividir) que obtiene el cociente de los valores
anteriores, su sintaxis ser (dividir (sumar notas) (contar notas))

Obsrvese que la estructura anidada refleja el hecho de que la funcin dividir


acta sobre los resultados de suma y contar.

El paradigma orientado a objetos, se basa en los conceptos de objetos y clases de


objetos. Un objeto es una variable equipada con un conjunto de operaciones que
le pertenecen o estn definidas para ellos. El paradigma orientado a objetos
actualmente es el paradigma ms popular y da a da los programadores,
estudiantes y profesionales tratan de tomar algn curso que tenga que ver con
este paradigma, podra decirse, que programar orientado a objetos est de moda.
Alrededor de 1970 David Parnas plante el ocultamiento de la informacin como
una solucin al problema de gerenciar grandes proyectos software. Su idea fue
encapsular cada variable global en un mdulo con un grupo de operaciones (al
igual que los procedimientos y las funciones) que permitan tener un acceso directo
a la variable. Otros mdulos pueden acceder a la variable slo indirectamente,
llamando a estas operaciones.
Hoy se usa el trmino objeto para tales mdulos o variables encapsuladas a s
mismas. Lenguajes imperativos como Pascal Y C han sido modificados (o
aadidos) para que soporten el paradigma orientado a objetos para dar Delphi en
el caso de Pascal y C++ en el caso de C.

Una de las bondades importantes de los lenguajes orientados a objetos es que las
definiciones de los objetos pueden usarse una y otra vez para construir mltiples
objetos con las mismas propiedades o modificarse para construir nuevos objetos
con propiedades similares pero no exactamente iguales.

El lenguaje orientado a objetos por excelencia es Smaltalk desarrollado en Palo


Alto Research Center durante los 1970's
.
Pero que es exactamente un lenguaje orientado a objetos- Los siguientes
conceptos sealan las caractersticas generalmente aceptadas acerca de los
lenguajes orientados a objetos.

Objetos y clases son obviamente los conceptos fundamentales. Una clase


es un conjunto de objetos que comparten las mismas operaciones.

Objetos (o al menos referencia a objetos) deben ser valores de la clase


base. As, cualquier operacin puede tomar un objeto como un argumento y
puede devolver un objeto como resultado. De esta manera el concepto de
clase de objetos est relacionado con el concepto de tipo de dato.

Herencia es tambin vista como un concepto clave dentro del mundo de los
objetos. En este contexto, la herencia es la habilidad para organizar las
clases de objetos en una jerarqua de subclases y superclases y las
operaciones dadas para una clase se pueden aplicar a los objetos de la
subclase.

CONCLUSIONES
La comprensin bsica de los conceptos de los lenguajes de programacin y los
diferentes paradigmas son necesarios para todos los ingenieros de software, no
tanto para los especialistas en un lenguaje de programacin. Esto se debe a que
los lenguajes de programacin son una herramienta fundamental.
Los lenguajes de programacin influencian notablemente la manera en que
pensamos acerca del diseo y construccin del software y los algoritmos y
estructuras de datos que utilicemos para desarrollar software.

Propuesta de proyecto final (en equipo) consiste en desarrollar


software en la programacin funcional y aplicarlo en la resolucin de
problemas a travs del diseo de agentes inteligentes (5%).

Se detalla el diseo y la implementacin de un agente inteligente capaz de jugar al


videojuego de Mario as como las tcnicas utilizadas para este diseo.
Categoras y descriptores
Java [Lenguaje de programacin]
Trminos generales rbol de decisin, agente inteligente
Palabras claves
Mario, enemigos, agente, inteligencia, escenario
Para la implementacin de este agente inteligente analizaremos el uso de tcnicas
utilizadas frecuentemente en aplicaciones de Inteligencia Artificial, tales como
rboles de decisin.
Despus, construiremos nuestro propio rbol de decisin para la solucin del
problema de agente inteligente planteado en la pgina web de 2011 Mario AI
Championship.
A continuacin, haremos un estudio detallado del paquete de software
proporcionado por dicha pgina web, sobre el cual se apoya nuestra
implementacin del agente de Mario inteligente.
Para ello, analizaremos agentes bsicos proporcionados dentro del paquete de
software, tales como el ForwarJumpingAgent el cual simplemente salta hacia
delante sin prestar ninguna atencin a los distintos elementos presentes en
escenario.
Adicionalmente, comprobaremos la funcionalidad de diversos mtodos y variables
implementados en otras clases dentro del paquete de software que nos sern de
gran ayuda para la construccin en cdigo Java de nuestro agente inteligente.
Por ltimo, procedemos a implementar y programar el rbol de decisin construido
previamente y a comprobar su funcionamiento real en diversos escenarios
utilizando las distintas opciones de simulacin disponibles.

2. RBOLES DE DECISIN
Se trata de modelos de prediccin en los cuales se utilizan tcnicas mediante las
que se pueden analizar decisiones secuenciales basadas en el uso de resultados.
Estos rboles son utilizados para generar sistemas expertos, rboles de juegos o
bsquedas binarias. Mediante su uso, un sistema dotado de Inteligencia Artificial
podr tomar decisiones en situaciones previamente definidas.
En un rbol de decisin, se dispone de unas ciertas entradas o situaciones, a
partir de las cuales se devuelve un resultado, convergiendo as en una nueva
situacin donde una nueva decisin ha de ser tomada.
Esta accin ser realizada tantas veces como sea necesario, hasta llegar a un
punto final, llamado hoja en nuestro rbol de decisin, donde se determina la
accin a realizar tras el camino tomado, aquella que se ajusta a la situacin
requerida. Un ejemplo de rbol de decisin, binario en este caso, se muestra a
continuacin.

3. DISEO DEL AGENTE


Para el diseo de nuestro agente, haremos uso de un rbol de decisin, no binario
en ste caso, donde se tomarn decisiones dependiendo del escenario al que se
enfrenta Mario en cada momento, indicndole la accin a realizar para tratar de
llegar lo menos daado posible al final del nivel. Aqu mostramos el rbol de
decisin que hemos diseado para resolver el presente problema:

Cada nodo consiste en una posible situacin a la que se podra enfrentar el agente
a lo largo de una partida. A continuacin, veremos detalladamente en qu consiste
cada una de ellas, para tener especial cuidado a la hora de implementar nuestro
sistema, evitando implementaciones que puedan dar lugar a comportamientos
errneos del agente inteligente.

3.1 Obstculos delante


Si mientras caminamos observamos un objeto el cual no es franqueable,
necesitaremos saltar para evitar situaciones en las que nos encontraramos
estancados. Ser conveniente adelantarnos a esta situacin y no detectar el
obstculo cuando se encuentra justo a nuestro lado, sino que convendr intentar
predecir la presencia de obstculos a distancias un poco mayores. De sta
manera se mejorar el rendimiento del sistema al tratar de adelantarse en la
resolucin de problemas que pueden ser evitados fcilmente con un simple salto a
tiempo.
3.2 Agujero delante
Al igual que en el caso anterior, ser necesario predecir cundo hay agujeros para
tratar de evitar caer en ellos y consecuentemente perder de forma definitiva la
partida. Para superar estos agujeros, tomaremos la misma accin que
anteriormente, es decir, saltar en el momento necesario para evitar situaciones
indeseadas una vez ms.
3.3 Enemigos delante
Los enemigos tambin han de ser evitados para no ser daados
innecesariamente. Por ello, cuando veamos un enemigo prximo y
siempre que sea posible (antes de saltar siempre habra que comprobar
si dicha accin es conveniente, vase 3.4), saltaremos hacia delante
para evitar ser alcanzados por un enemigo que pueda daar a Mario y
reducir su nivel en un rango (disparo grande pequeo fin de
partida).
Conclusin de todo y labibliograafia de todo

You might also like