Tareas



13 Nov 09

basura2

Hoy me puse a diagramar algunas cosillas para un proyecto pendiente, pero antes de empezar me encontre con la flojera de descargar un programa agradable y servil para hacer estos diagramas.

En mi desicion por no bajar nada e instalarlo en mi pc, decidi buscar uno online. Encontre este que me gusto mucho, parece que estas trabajando en una aplicacion de escritorio, es facil de dentender y aunque no ofrece muchas herramientas como algunos programas dedicados a este objetivo, si te saca muy bien del apuro. Lo unico que tienes que hacer es registrarte con tu email y te dejan probarlo por 30 dias, que chulada!! pues yo solo lo necesite por 1 ^^.

Al finalizar tus diagramas te permite guardarlos para editarlos después, puedes compartir tu trabajo con varios colaboradores y si te interesa compartirlo con gente que no esta registrada, puedes exportar tu diagrama a una imagen jpg y otras extensiones que ya no me acuerdo.

Espero que les guste y les sea útil, si no, ps bajen uno jojo!

Visitar GLIFFY

basura


Filed under: Tareas,computadora,weba

Trackback Uri






5 Oct 09

Ya explique el problema de las torres de Hanoi y publique una solucion recursiva a dicho problema. En este post pondre la solucion No recursiva  iterativa en modo de pseudocodigo.

Pseudocodigo

//los argumentos origen, destino y axuliar son variables representando las tres torres del problema original (pueden ser estructuras o simplemente el nombre de cada torre, en este caso solo representan el nombre de las torres por tanto, se asume que son de tipo texto).
//n es el numero de discos
//pilaN, pilaO, pilaD y pilaA son estructuras de tipo PILA
//tope es una variable de tipo entero.
//varaux es una variable de tipo texto (en este caso por que las torres son representadas unicamente por su nombre, es decir, esta variable debe ser del mismo tipo que origen, destino y auxiliar)
//bandera es una variable de tipo boleano

solucionIterativa(n, origen, destino, auxiliar)

hacer tope=0 y bandera = falso
repetir mientras (n>0) y (bandera=falso)

repetir mientras (N>1)

//se guardan en las pilas los valores actuales de los parametros
tope=tope+1
pilaN[tope]=n
pilaO[tope]=origen
pilaD[tope]=destio
pilaA[tope]=auxiliar

n=n-1
varaux=destino
destino=auxiliar
auxiliar = varaux

Fin //fin de repetir mientras (N>1)

mover disco de origen a destino
bandera=verdadero

si tope >0 entonces //quiere decir que las pilas no estan vacias

n=pilaN[tope]
origen=pilaO[tope]
destino=pilaD[tope]
auxiliar=pilaA[tope]
tope=tope-1

mover disco de origen a destino

n=n-1
varaux=origen
origen=auxiliar
auxiliar=varaux
bandera=falso

Fin //fin de si tope >0 entonces

Fin //fin de repetir mientras (n>0) y (band=falso)

Fin //fin del metodo

Explicacion breve del pseudocodigo.

La recursion sacrifica mucho espacio en memoria para guardar el estado del flujo del programa en el momento en que la recursion es iniciada, por ello resulta costoso en cuanto a espacio en memoria y debemos buscar otro tipo de soluciones. En este caso simularemos la recursion utilizando pilas para guardar el estado de las variables.

En el algoritmo de recursion, utilizamos las variables n, origen, destino y auxiliar que pusimos como argumentos en el metodo HANOI. Bueno pues en este metodo tambien utilizaremos esas variables y para guardar el estado de cada una utilizaremos estructuras de tipo pila, crearemos una pila por variable y en estas pilas iremos guardando los valores que va tomando cada variable.

pilaN para guardar los valores de n
pilaO para guardar los valores de origen
pilaD para guardar los valores de destino
pilaA para guardar los valores de auxiliar

La variable tope la usaremos para indicar el ultimo valor de las pilas, es decir el que se encuentra hasta arriba por eso es de tipo entero, para indicar la posicion del elemento.

La variable varaux es una variable que sirve para rotar las pilas origen y destino, segun el movimiento que se desee hacer.

y la variable bandera, sirve como indicador, para saber si hay mas iteraciones que hacer o no, ya no habra mas movimientos que hacer si las pilas estan vacias.

En la siguiente tabla se muestran los valores que toman todas las variables en cada paso para un mejor entendimiento:

Comportamiento de variables en el metodo

tabla de valores que van adquiriendo las variables en cada paso

tabla de valores que van adquiriendo las variables en cada paso

Donde A, B y C representan el valor existente en la variable origen, destino y auxiliar respectivamente y podemos ver como estos valores van cambiando de posicion conforme aumentan los pasos.

y donde

[A:C] quiere decir que se mueve el valor A al valor C (sin confundir que en realidad el movimiento es de la variable origen a la variable destino, como lo indica el algoritmo)


Filed under: Tareas,computadora,estudiar,programacion

Trackback Uri






23 Sep 09

Hoy quería hablarles de un pack de juegos pero dado que no sirve megaipload (¬¬), cambiare esa sesion por una divertidisima clase de arboles binarios.

Igualmente este sera un post divertidísimo =D, bueno en realidad no, pero igual les sirve para la escuela.

Intoducción

Primero, vamos a ver los tres tipos de recorridos que pueden llevarse a cabo en los arboles binarios para visitar todos los nodos que en el existen. Si no entienden estos términos ven la siguiente imagen:

arbol2

Jaja, ya quedó claro?

Primero hay que definir recorrido de nodos de manera formal

Definición formal

Recorrido de nodos en un árbol binario: Visitar todos los nodos del árbol en forma sistemática de manera que solo sean visitados una sola vez.

Tipos de recorridos

Hay tres formas de hacerlo:

Recorrido preorden.- Hay que visitar los nodos en el siguiente orden:

recorrido preorden

Recorrido preorden

-Raíz
-Sub arbol izquierdo
-Sub árbol derecho

Recorrido inorden.-Hay que visitar los nodos en el siguiente orden:

recorrido inorden

recorrido inorden

-Sub arbol izquierdo
-Raíz
-Sub árbol derecho

Recorrido postorden.-Hay que visitar los nodos en el siguiente orden:

Recorrido postorden

Recorrido postorden

-Sub arbol izquierdo
-Sub árbol derecho
-Raíz

Tomando como ejemplo la imagen tendriamos despues de visitar los nodos del arbol los siguientes resultados:
Visita preorden  —> A B D E C F G
Visita inorden     —> D B E A F C G
Visita postorden —> D E B F G C A

Con esto dejo en sus manos el PSEUDOCODIGO para programar este algoritmo:

Pseudocodigo  preorden


preorden( nodo )

//donde nodo es un  registro de tipo puntero
//valor, nIzq y nDer son campos del registro nodo.
//valor = valor del nodo que se esta visitando
//nIzq y nDer= valor de tipo apuntador (sirven para no perder los nodos derecho e izquierdo y poder volver cuando se necesite)

si nodo <> NULO  entonces //(si nodo no es nulo/vacío)

visitar el nodo //nodo.info (obtenemos el valor del nodo )
preorden(nodo.izq) //llamamos de nuevo el método preorden mandando como parámetro el nodo izquierdo del nodo actual.
preorden(nodo.der) //llamamos de nuevo el metodo preorden mandando como parámetro el nodo derecho del nodo actual

fin

fin

Explicación visual del pseudocodigo

Por alguna razon, esta imagen me aclara mas la idea del pseudocodigo:

Mi explicacion grafica y chada del pseudocodigo

Mi explicacion grafica y chafa del pseudocodigo

Para realizar el pseudocodigo postorden e inorden pos namas cambia unas cosillas del anterior, si no sabes como hacerlo pues, pegate un tiro ¬¬, igual los dejo acá abajo para que no se awiten:

Pseudocodigo  inorden

inorden( nodo )

//donde nodo es un registro de tipo puntero
//valor, nIzq y nDer son campos del registro nodo.
//valor = valor del nodo que se esta visitando
//nIzq y nDer= valor de tipo apuntador (sirven para no perder los nodos derecho e izquierdo y poder volver cuando se necesite)

si nodo <> NULO  entonces //(si nodo no es nulo/vacío)

inorden(nodo.izq) //llamamos de nuevo el método inorden mandando como parámetro el nodo izquierdo del nodo actual.
visitar el nodo //nodo.info (obtenemos el valor del nodo )
inorden(nodo.der) //llamamos de nuevo el método inorden mandando como parámetro el nodo derecho del nodo actual

fin

fin

Pseudocodigo  postorden

postorden( nodo )

//donde nodo es un registro de tipo puntero
//valor, nIzq y nDer son campos del registro nodo.
//valor = valor del nodo que se esta visitando
//nIzq y nDer= valor de tipo apuntador (sirven para no perder los nodos derecho e izquierdo y poder volver cuando se necesite)

si nodo <> NULO  entonces //(si nodo no es nulo/vacío)

postorden(nodo.izq) //llamamos de nuevo el método postorden mandando como parámetro el nodo izquierdo del nodo actual.
postorden(nodo.der) //llamamos de nuevo el método postorden mandando como parámetro el nodo derecho del nodo actual
visitar el nodo //nodo.info (obtenemos el valor del nodo )

fin

fin

Espero y les sirva si no pos, que chafa soy. Cualquier duda o extra que quieran agregar, ya saben, existen los comentarios, ahí abajito, Agradezcan no sean weyes. Salep, estudien ;)


Filed under: Tareas,estudiar,programacion

Trackback Uri