miércoles, 2 de febrero de 2011

Definicion de clases en un juego [clase]





Bueno amigos, aquí les dejo la explicación de clase acerca de el solitario, de cuales son su clases e instancias, con el objetivo de que ustedes puedan aprender mejor, y yo también así que si me llego a equivocar sus correcciones son permitidas.
Para analizar el solitario decidí dividirlo por clases.

1era clase.
Decidí poner estas 2 clases juntas, ya que la primera consiste en mostrar cartas de
manera aleatoria, para poder colocarlas en el tablero.

Realmente lo que son las cartas no importa, no pueden ser clases ya que eso de ser una reina de corazones, es solo un atributo, lo mas importante son los métodos que le agrega el creador de este juego para poder agregarse una sobre la otra.

Siguiente clase.


Esto se define como otra clase, ya que tiene otra función totalmente diferente a la pasada. Sus atributos pueden ser de que en cada espacio que exista

en un hoyo la primera carta tiene que ser un As, y que las cartas que sean colocadas sean colocadas de manera ascendente con el mismo atributo. Además de ese atributo, tiene
que existir otro; con el objetivo de poder mover las cartas ya colocadas al tablero por si necesita ayuda de una carta de la parte de arriba.

Siguiente clase :

Aquí podemos ver que esta clase tiene otra función totalmente diferente a las demás, ya que como métodos estos, serán acomodados de manera descendente y cada cuando que uno pondrá una carta, tendrá que ser con el color opuesto.
Cada columna que se puede apreciar, lo tomo como una instancia, ya que cada una de ellas tiene un numero diferente de cartas detrás de ellas en las cuales el juego no quiere mostrar, sin embargo ya sabe cuales son. Todas las columnas tienen la misma función, sin embargo tienen diferentes características, debido a las cartas colocadas detrás de ellas.
Otro método puede ser que cuando las cartas se acaban e
n una columna, es necesario agregar un Rey, para que pueda empezar la columna de nuevo.

Por ultimo
Por ultimo falta la clase del tablero, en el cual muestra una imagen en el cuando reiniciar el juego , o cuando cambiarlo. Además de poder mostrar las diferentes cartas que hay y posiblemente los highscores que existen en el juego.

Muchas gracias, ahí lo que quieran agregar, todo es bienvenido hasta luego.

Definicion de mis clases en mi projecto [Taller]

Bueno amigos, este son las clases que usare en mi projecto final, con breve explicacion ya que aun no tengo dominado este lenguaje, primero empezamos con las bases de este projecto para despues poder aprender mejor, aqui les van las clases con una breve explicacion debajo de ellas.
package Projecto;



/* Esta clase es la que mostrara las partes del cuerpo para dar a escojer al usuario cual es la que le duele o siente
molestia en esa.*/

public class Cuerpo {
// atributos
private boolean Cabeza;
private boolean espalda;
private boolean pecho;
private boolean piernas;
private boolean privadas;

//metodo

// constructor para crear un tablero
public Cuerpo (Cuerpo c, boolean a, boolean e, boolean p, boolean l, boolean h) {
this.Cabeza = a;
this.espalda= e;
this.pecho = p;
this.piernas = l;
this.privadas= h;
}

}

Bueno, aqui estamos dando a conocer las opciones que tiene el usuario al escojer que parte del cuerpo le duele. Al agregar el boolean como caracteristica de variable, nos estamos refiriendo a que la opcion a escojer es veradero o falso, y nada mas. Despues al crear un constructor para el tablero, estamos tratando de crear botones que muestren estas partes del cuerpo para darselo a conocer al usuario.

package Projecto;


public class Enfermedad { // nombrar la clase igual que el archivo
// atributos a mostrar

private boolean gripe;// sera la lista posible a escojer al usuario sobre que enfermedad tiene
private boolean migrana;
private boolean deshidratacion;
private boolean gastritis;
private boolean dolorpansa;

//etc

}



Aqui damos de alta la clase Enfermedad.java, esta sera una lista de enfermedades que existen en la actualidad, para hacerle al usuario mas facil si sabe que es lo que tiene el enfermo; para ello tambien damos de alta con la caracteristica boolean, ya que o le puede doler el estomago o no le puede doler, no hay de otra.


package Projecto;

public class Usuario {

// Atributos

private boolean Registro;
private boolean Noregistro;

//metodos
public void Registro (int n, int s, int e) {

String nombre = "n" ;
String sexo = "s" ;
int edad = e;

}
public void Noregistro (int n) {
int nombre = n; // solo por formalidad, y luego borrarlo

}

}


Aqui es la clase Usuario.java, en esta clase es donde daremos de alta al usuario que se registra, para llevar un historial sobre las enfermedades que ha llevado el enfermo. Ademas de eso damos de alta el usuario no registrado, esto es solo para las personas que buscan una simple medicina y cerrar el programa; en este caso no guardamos al usuario, sin embargo solo le preguntamos el nombre.

miércoles, 26 de enero de 2011

Taller de programacion Fase # 1

MI trabajo consistira en una aplicacion orientada a objetos.
Me puse a pnesar acerca de las necesidades de las personas, y cuando una persona se enferma alguna de las veces uno no sabe que medicina darle entonces esto se trata de ello. ESta aplicacion se trata de una ventana que muestre botones acerca de todas las partes del cuerpo, con el objetivo de darle al usuario una gran variedad de opciones para que pueda escojer que parte del cuerpo le duele al mismo.

El idioma en el cual hare este programa sera Python o Java, ya que no conosco ni domino estos lenguajes, puedo aprender a usar otro lenguaje de programacion orientado a objetos, con el objetivo de que su servidor pueda aprender mas cosas y para el futuro tenga una mayor facilidad de usar otros lenguajes.

*(instancias)
Para definir las clases de mi projecto las pondre en la siguiente lista :
1.-La ventana y sus botones
*Reinicio
*Las preferencias
* etc..
2.- EL cuerpo
*Representando todas las partes del cuerpo
*Las subdivisones del cuerpo (por ej. Brazo : bicep, antebrazo, tricep)
3.- Las medicinas distintas a aplicar al cuerpo
*JUnto con una lista completa de los tipos de medicinas que existen

4.- Una ventana de respuesta hacia lo que tiene que recetar a la persona enferma, con nombres de medicamentos , pero no medicinas para no da;ar derechos de autor ni crear publicidad.

5.- La persona
* Las caracteristicas principales de la persona, (Sexo y edad)

Projecto Fase # 1 (CLASE)



Aqui les voy a explicar los software que nos pidio la Dra. Schaeffer que bajemos para nuestras computadoras con el proposito de compilar, o generar codigos. La lista empieza con:

BOUML
Es un software gratis de UML (Unified Modeling Language que en español seria Lenguaje modelo unificado) que diseña diagramas. Este software esta programado en C++ y Qt, y esta suelto bajo GPL. Es multilenguaje, y crea generacion de codigos, y reversa de codigo en ingenieria.

El software BOUML incluye:
  • Te permite dibujar diagramas seguidos de standard UML 2.0.
  • Hace diagramas por delante y por detras en ingenieria para lenguajes multiples.
  • Es de plataforma cruzada, esto quiere decir que opera en diferentes plataformas computacionales.
  • Es muy rapido comparado con otros modelos UML.
  • Soporte XML,
En septiembre del 2010, el creador Bruno Pages, anuncio que dejara de produ
cis BOUML debido a "violaciones de derechos de autor y mal manejo de administradores de wikipedia."
La version 4,23 se llamo "Ultimate" fue distribuida en Noviembre del 2010. Sera la ultima de todas.

Umbrello
En computacion, Umbrello es un software tambien gratis de UML, que es una aplicacion de diagramas disponible para plataformas Unix y Windows. Es parte de KDESC4, pero trabaja bien con otros escritorios y ambientes de programacion.

Umbrello maneja todas los tipos de diagramas UML. Puede "reverse engineer code" escrito en C++, IDL, Pascal, Ada , Python, y Java, como tambien importa archivos XML generados por herramientas externas de PHP o codigo Perl y otros lenguajes de programacion.

Umbrello permite distribucion de contenido de modelos exportando foramtos a DocBook y XHTML. Esto ayuda a collavorar esfuerzos donde equipos no pueden tener pase directo a Umbrello, o en casos donde el contenido del modelo tiene que ser publicado en una pagina web.


Los lenguajes que Umbrello permite exportar son:




Aqui les dejo un tutorial tanto de Umbrello como de Bouml respectivamente!
http://bouml.free.fr/tutorial/tutorial.html (Este esta en ingles, pero es relativamente facil de entender)

Un saludo de mi parte, espero que les agrade mi entrada muchas gracias.

lunes, 17 de mayo de 2010

Proyecto Numero 5

Deteccion de Ciclos: Algoritmo de tortuga y liebre
El algoritmo de la tortuga y la liebre, sirve para la detección de datos, este fue inventado por Robert W. Floyd, quien lo invento a final de los 60’s.

Para conocer bien este método, primero necesitamos saber que es un grafo. Un grafo se determina conexo siempre y cuando estén conectado un nodo con otro nodo, ya sea por medio de aristas, flechas etc. En estos grafos siempre habrá un inicio y un final,pero se puede dar la ocasión que nos podemos encontrar con un ciclo, y este ciclo hace que el grafo se repita. Para eso estamos aquí.
Esto es un ejemplo de un grafo.

El algoritmo de detección de ciclos, que se implemente por medio de la historia clásica de “ La tortuga y la liebre”. Este algoritmo consiste en detectar en los grafos ciclos, estos ciclos ya sean del mismo tipo, una repetición de un dato, o de cualquier cosa, solo que se repita en el mismo grafo, o en la secuencia del mismo.

Aqui podemos apreciar que en el primer paso la liebre avanza 2 pasos, y luego la tortuga solo uno. En la segunda iteracion, la tortuga avanza al siguiente y la liebre otros 2 pasos. En el tercer paso se encuentre un dato igual, esto quiere decir que se encontro un ciclo. Cuando se encuentra el ciclo, este proceso termina.


La solucion mas facil, para buscar la ciclos, es aquella que vayas por toda la lista, anotando o memorizando que nodos has visitado. Es muy obvio que esto tiene un análisis asintótico de O(n^2) respecto a tiempo, esto significa que no es muy eficiente y a la ves aun mas complicado que nuestro algoritmo.

Problema de Decision

"En el grafo que se tiene, es posible encontrar un ciclo?"

Claro que es posible, ya que existen grafos con ciclos, o bien sin ciclos, aqui les demostrare 2 grafos de los 2 tipos.



El algoritmo de la tortuga y la liebre posiblemente es el mas famoso para detectar ciclos y a la ves muy eficiente. Tanto como la tortuga y la liebre son punteros, y ambos empiezan en el inicio del grafo. Para cada iteración o bien , para cada paso la tortuga avanzara un paso, y la liebre avanzara dos pasos. Si es que existe un ciclo, la liebre ira por ese ciclo y es posible que mas de una ves, y en algún tiempo la liebre se econtrara con nuestra tortuga. Si esto sucede, quiere decir que existe un ciclo. En caso de que no exista ningún ciclo, tanto como la tortuga y la liebre llegaran al final del grafo, sin tener que toparse.


A continuacion un ejemplo de un grafo con ciclo, aplicado con un pseudocodigo.

1 tortuga = inicio
2 hare = inicio
3
4 iteracion:
5 if liebre == final :
6 return 'No hay ciclo'
7 liebre = liebre.siguiente // Aqui se hace que la liebre avanze dos posiciones.
8
9
10 tortuga=tortuga.siguiente // La tortuga avanza una posicion
11
12 if tortuga == tortuga:
13 return 'Se encontró un ciclo!'.
Aqui podemos encontrar el inicio del algoritmo. Done usamos el
1 tortuga = inicio
2 hare = inicio
Aqui empezamos en el proceso.
En la iteracion numero dos, podemos ver que el humano(la tortuga) avanzo 1 numero de pasos, mientras que el caballo (liebre) avanzo 2 pasos. En este paso es donde se empieza la iteracion a partir del paso numero 4.
Sucede exactamente lo mismo, y como aun no se encuentra el uno con el otro, el programa aun no termina.
Lo mismo, seguimos en la iteracion repetitiva para encontrar el ciclo.
Aqui podemos ver que ya se estan acercando, sin embargo nada ha cambiado en este grafo, excepto por las posiciones de los datos.
Aqui es donde encontramos el ciclo, ya que tanto como la tortuga y la liebre se encontraron. Y es aqui donde nuestro pseudocodigo encuentra el ciclo, y vemos que si funciona el algoritmo de la tortuga y la liebre para encontrar ciclos.
Una persona se puede preguntar, por que no va la liebre sola?, pues esto no puede pasar, ya que si hay un ciclo la liebre avanzara para siempre, y no se detectarían ciclos, ademas la tortuga tiene que estar ahi, para asegurar que tengas un numero de "n" pasos, y facilita nuestro trabajo.
ANALISIS ASINTOTICO
Este problema tiene una complejidad O(n), ya que este problema se puede determinar en n pasos, sin tener que molestarte en procedimientos largos y complejos.
COMPLEJIDAD COMPUTACIONAL
Este problema tiene una complejidad de P, ya que se puede resolver por una maquina turing en un determinado tiempo, o bien en n tiempo. No es de complejidad alta, y solo toma un numero de n pasos.
ESTRUCTURA DE DATOS UTILIZADOS
En este algoritmo se usan arreglos e iteraciones, con el fin de poder ciclar las posiciones avanzadas hasta encontrar un ciclo. Se pueden emplear en listas hash, o tablas de datos, con el objetivo de encontrar un dato repetido.
APLICACIONES
Este algoritmo se puede usar en diferentes cosas como por ejemplo:
  • Rutas de camiones, mientras se realiza un programa para determinar las rutas de los camiones, es importante saber por donde cruzan y hacia donde van, con el objetivo de optimizar las calles y sus rutas.
  • Para determinar ciclos infinitos en programas de computadoras
  • Para configuraciones en automatas celulares, mientras se simulan se aplican algoritmos de de deteccion de ciclos, cada estado del automata.
  • Muchos algoritmos numerous-teoricos estan basados en deteccion de ciclos, incluyendo Pollard rho para la factorización de enteros, y el algoritmo del canguro con el problema logaritmo discreto

Conclusion Personal

En este proyecto siento que me ira muy bien, solo que me pudo haber ido mejor si no hubiera tenido unos problemas con el itnernet explroer, ya que al momento de subir mi trabajo tuve unas complicaciones te que mi internet no respondia, y no sabia por que, entonces cuando pasa eso el internet se cierra automaticamente y se reinicia asi que perdia toda mi informacion. Si lo pudiera haber hecho a la primera, me hubiera salido mucho mejor, ya que me estaba estresando cada ves mas. Fuera de eso siento que hice un buen trabajo, y con 3 ejemplos claros y simples. (2 en el blog y otro en la presentacion). Gracias espero que les haya gustado.

domingo, 25 de abril de 2010

Projecto Numero 4

En este projecto lo que hice fue el buscar una animacion en el internet, con el objetivo de poderles explicar a nuestros compañeros que es lo qeu hace una tabla de dispersion, ademas de buscar informacion del mismo tema para poder explicar que es lo que hace la animacion. Para mi, todo nos salio muy bien a cada uno de nosotros. En lo que tengo que mejorar es en el tiempo, organizarme mejor para no estar a las 8 de la noche empezandolo a hacer y acabar a esta hora. Me apoye con ambos de mis compañeros, ya que uno de nosotros ya tiene experiencia en esto y pudimos apoyarnos en el. El que se encargo de organizar este trabajo fue nuestro compañero que nos apoyo en el trabajo.
Gracias a nuestro compañero, pude entender bien este tema bueno no entenderlo bien si no tener una mayor perspectiva acerca de las tablas de dispersion, y almenos saber que es lo que hacen y de que pueden ser utiles.

jueves, 4 de marzo de 2010

Proyecto #2