Bueno, edite el proyecto final que tenia. Aqui dejo el video explicandolo:
Y tengo una hyper duda (y que da error en el juego): tengo el clip "Bala", este tiene ciertas acciones, pero cuando hago los duplicados (balas que se disparan al apretar space) estas no hacen las acciones de bala. Mi duda es como hacerlas
Les dejo la aplicación (que nunca me cargo en facebook)
Bueno, explicare más o menos lo que consta mi trabajo. Es una aplicación flash, que trata de una nave que va en el espacio matando a sus enemigos.
Lo elementos de lo que consta el juego (lo que llevo) son:
Nave:
Este objeto se mueve con
las flechas del teclado.
Dispara el elemento (clip de pelicula) "disparo".
Nave Enemiga:
Tiene trayectoria aleatoria (en el eje y)
Se reproduce el elemento cada cierto
tiempo.
Disparo
Bueno ahora pondre lo codigos que use en cada uno de los elementos como en el flash. Empezare con la nave:
Nave:
onClipEvent(load)
{
function reset()
{
this._x = 100;
this._y = 150;
}
reset()
}
En la nave esta este script, se hace una uncion reset que se utilizaría por ejemplo: "Una nave enemiga choco contigo", ahi tendriamos que usar este script para volver a poner la nave en posición x = 100, y = 150.
Disparo (bala):
onClipEvent(enterFrame){
this.onEnterFrame = function()
{
this._x += 12;
if (this._x > 550)
{
this.removeMovieClip();
}
}
}
En este elemento ponemos su velocidad (desplazamiento) en el eje x que seria igual a 12 fps (corrijanme si estoy mal).
Luego se hace una comparación que podría decirse : si el disparo esta en posición mayor a los x = 550 entonces borra disparo" (o asi lo interpreto yo); esto quiere decir, que despues de hacer nuestro disparo este se desplazara cierta cantidad en x y al llegar a cierto punto (en este caso la posicion 550 en x) el elemento se borrara (no tiene caso que siga al infinito...)
Nave enemiga:
onClipEvent(load)
{
function reset()
{
var timer = 12;
this._y = Math.random() * 300
this._x = 550
mySpeed = Math.ceil(Math.random() * 6) + 1;
}
reset();
}
Primero se declara una función reset() que servirá para ubicar en cierta posición nuestra nave. Lo que hace esta función es ubicar a nuestra nave en la posición 550 (al final de nuestro flash, de ahi salen las naves...) y una posición en y aleatoria; con la linea this._y = Math.random() * 300 nuestra nave se puede posicionar en diferentes puntos en el plano y (asi da la sensación de diferentes naves saliendo en la pantalla).
Otras lineas:
onClipEvent(enterFrame)
{
this._x -= mySpeed;
if (this._x < -10) //Cuando la nave enemiga sale de la pantalla hacia la izquierda
{
reset(); //Se llama para ubicar una nave nueva
}
if (timer >= 12)
{
var dir = Math.ceil(Math.random() * 2) //variable dirección
//Aqui Math.random consigue solo numeros comprendidos entre 0 y 1, cuando lo multiplicamos por 2, Math.ceil decrementa o incrementa el valor hacia el valor más próximo (para dejar enteros), por eso en este caso solo obtendríamos números 1 y 2
timer = 0; // se iguala la variable timer a 0
}
if (dir == 1)
{
//if dir = 1,
this._y -= 3; //la nave se mueve hacia arriba
}
else if(dir == 2)
{
this._y += 3; //la nave se mueve hacia abajo
}
timer++ //incrementamos a timer 1; cuando timer sea igual a 12 obtendremos una nueva dirección
}
Flash:
var i = 0; //esta variable la utilizaremos más adelante
this.onEnterFrame = function()
{
_root["Bala" + i]._x += 25; //aquí llamo a los duplicados de mi bala, asi cuando los invoque estos tendrian una velocidad de 25 en eje x
//Aqui comienza lo del teclado:
if (Key.isDown(Key.RIGHT))//Cuando se aprieta la tecla derecha
{
if (Nave.hitTest(550, Nave._y, true))//más adelante explicare esto
{
Nave._x -= 5;
}
Ship._x += 10; //velocidad de la nave
} else if (Key.isDown(Key.LEFT))//Cuando se aprieta la tecla izquierda
{
if (Nave.hitTest(0, Nave._y, true))
{
Ship._x += 5;
}
Ship._x -= 10;//velocidad
} else if (Key.isDown(Key.UP))//cuando se aprieta la tecla arriba
{
if (Nave.hitTest(Nave._x - 40, 0, true))
{
Ship._y += 5;
}
Ship._y -= 10;
} else if (Key.isDown(Key.DOWN))//cuando se aprieta la tecla abajo
{
if (Nave.hitTest(Nave._x - 40, 300, true))
{
Ship._y -= 5;
}
Ship._y += 10;
}
if (Key.isDown(Key.SPACE))//cuando se aprieta la barra espaciadora
{
i++;//aqui incrementamos la variable "i" del principio
_root.attachMovie("Bala", "Bala" + i, _root.getNextHighestDepth());//haremos una copia de Disparo(bala) y lo ataremos a la posición de la nave
_root["Bala" + i]._x = Nave._x + 25;//posición de la bala con respecto a nuestra nave
_root["Bala" + i]._y = Nave._y;
}
}
hitTest:
Explicare lo del hitTest (que lamentablemente no he podido hacerlo funcionar en el flash).
Se utiliza el hitTest, en el caso de nuestro flash, para saber si 2 clip de pelicula estan cerca o se sobreponen, en este caso se libera una acción.
El hitTest lo podriamos usar en nuestro flash si se sobreponen la bala con la nave enemiga, en este caso podriamos pedir que se eliminara el clip de la nave enemiga, asi daría el efecto de haberla destruido.
Aqui les dejo un ejemplo del flash (que le falta, lo admito.), pero que me sirvio de mucho para aprender un poco del javascript.
La aplicación se subio a facebook con la instrucciones sacados de mi compañero Avedaño
La aplicación se hizo con respecto a un tutorial en internet Click Aqui
Bueno explicare de lo que trata mi proyecto de medio curso. Basicamente es un formulario en Python que escribe los datos en un archivo XML, luego otro script python que lee cada linea del XML y las escribe en una tabla hecha en HTML.
*formulario.py
En este formulario se hacen las siguientes preguntas: Nombre/Apellido, Matrícula, Correo electrónico, Edad, Ocupación y Blogspot (porque la mayoria tiene uno). Los datos que se escriban se van guardando en un xml el cual es "alumnos.xml".
*alumnos.py
En este script llamo al archivo "alumnos.xml". Este Script lee cada una de las lineas del archivo xml y las imprime en una tabla HTML
*alumnos.html
Es la pagina de salida del anterior script. Tiene un CSS para la tabla llamado "greyscale.css". Tambiém muestra link hacia los blogspot de los registrados.
Lo siento si no me di a explicar mejor, pero es lo que puedo decir de mi programa. Pueden checar las imagenes para ver los ejemplos de las lineas de los scripts en python.
Esta entrada es para explicar solo un avance de mi proyecto (ya que hay un problema que no me ha dejado terminarlo). Esta escrito en Python y consta de lo siguiente:
Formulario:
En este formulario se dan los datos personales como
-Nombre y apellido
-Matricula
-Correo electrónico
-Edad
-Ocupación
-Pagina Web
Archivo XML:
En este archivo se escriben los datos antes escritos por el usuario.
Pagina HTML:
En esta página los datos del archivo XML se acomodan en una tabla hecha en HTML.
Como ven he tenido problemas con el acomodo de la información.
La entrada es para corroborar que he avanzado con el proyecto, pero por algunos compromisos personales no lo he podido terminar todavía.
Espero que me ayuden con algunas ideas para acomodar la información. En este día o mañana subo el trabajo terminado y con el codigo.
Por las vacaciones (al no tener mucho que hacer) lei un poco sobre el lenguaje Python. Aqui les dejo un pdf que encontre que explica algunas cosas de este lenguaje. Bueno solo actualizo con este aporte, pronto actualizare para el programa que se encargo para lab. de Programación Web.
Dra. Elisa: a raiz de algunos compromisos que han surgido el dia de hoy jueves (pues ya son las 1:00 de la madrugada) no asistire a la clase. El programa lo subire pronto. Checare el codigo de la clase de hoy para hacer la tarea de la proxima semana. Saludos!
Bueno primero que nada, doy las gracias a Carlos Espinosa por darme la idea de poner banderas para los colores del programa, visiten su blog AQUI
Edite el programa que hicimos el jueves, le agregue 3 botones "Rojo", "Azul", y "Verde" para que al momento de apretar cualquiera de estos 3 el color de la linea cambiara.
Aqui les dejo algunas imagenes del resultado: El programa tiene algunos errores, como al principio solo aparece una pantalla roja, solo hay que picarle a "Rojo" y el panel cambia de color y que las lineas guardadas son de color gris, esto tiene que ver con la linea "Color GUARDADO".
Para mas tardar el domingo (porque tengo que hacer algunas cosas en lo que resta de la semana) subire el codigo ya corregido sin los errores que aparecen aqui. Lo he subido asi porque en este momento mi internet esta bueno (he tenido algunos problemas hoy jeje) y hago este post rapido.
Hola compa~neros, pues hoy tengo una duda. El jueves pasado hicimos un programa en el cual podiamos dibujar lineas en un panel, bueno yo quiero ademas de dibujar lineas, poder dibujarlas de diferentes colores. Ya he agregado los 3 botones "Rojo" , "Verde" y "Azul", y con sus debidos escichadores, pero el problema que encontre fue al momento de cambiar los valores de las lineas a dibujar. Que tendria que hacer: cambiar todos lo valores cada vez que se aprieta un boton?, mi duda es si hay otros metodos y como lo haria. Espero que me digan una solucion a la duda. Bueno, aqui les dejo una imagen del programa (solo agregue los botones y escuchadores)
Lo siento, en mi programa en la parte de texto, para poder pasar renglones lo hice como html, el blogspot lo entendio como instruccion y no se muestran en el codigo. Asi es como lo tengo en mi codigo:
El tema del programa es sencillo: Es una pregunta de destreza, al contestarla bien el panel se cambia a color verde, de lo contrario, se pone de color rojo.
JPanel pFlow = new JPanel();
JPanel p=new JPanel();
pFlow.setLayout(new FlowLayout());
JLabel aviso= new JLabel();
Pregunta escucha= new Pregunta(p, aviso);
pFlow.setBackground(Color.WHITE);
pFlow.add(new JLabel("Intrucciones: Responde correctamente la pregunta formulada, si no esta bien respondida el cuadro se iluminara de color rojo, de lo contrario de color verde.
Un hombre quería entrar a su trabajo pero olvido su NIP\n sin embargo se acordaba de ciertas pistas para recordarlo.\n
5 Pistas.\n
*El quinto numero mas el tercero equivalen a 14\n *El cuarto numero es uno mas que el segundo numero\n *El primer numero es uno menos que dos veces el segundo numero\n *El segundo numero mas el tercer numero equivalen a 10\n *La suma de todos los numeros es 30\n
Cual era su NIP?"));
JButton A= new JButton("76458");
A.addActionListener(escucha);
A.setActionCommand("RA");
JButton B= new JButton("74658");
B.addActionListener(escucha);
B.setActionCommand("RB");
JButton C= new JButton("67458");
C.addActionListener(escucha);
C.setActionCommand("RC");
JButton D= new JButton("65748");
D.addActionListener(escucha);
D.setActionCommand("RD");
JButton salir = new JButton("salir");
salir.addActionListener(escucha);
salir.setActionCommand("Sal");
p.add(new JLabel("Si te gusto el juego, Visita mi blogspot http://thavoch.blogspot.com :) "));
Bueno como lo prometi, aqui estan algunas cosas y curiosidades que me plantearon despues de exponer la clase el día del jueves. Aqui pongo, el tema de kruskal en la deteccion de celulas cancerosas (aclaracion) y el video de la clase. __________________________________________________________
Prueba "Kruskal - Wallis" Bueno para empezar, en el proyecto 5 explique el algoritmo de Joseph Kruskal (MST). En la informacion que saque venia que tambien se puede usar en la deteccion de celulas cancerosas, me puse a investigar y encontre la prueba "Kruskal-Wallis". Al principio se puede pensar que es lo mismo, pero la verdad es que no. Esta prueba fue hecha por William H Kruskal. Segun creo, hubo un error de informacion debido a los apellidos, porque Joseph es hermano del matemático y estadista William Kruskal (autor de la Prueba de Kruskal-Wallis), y del matemático y físico Martin Kruskal (autor de las coordenadas de Kruskal-Szekeres), entonces, en la informacion que saque se pudo confundir los proyectos de los hermanos.
La prueba de Kruskal-Wallis es un método no paramétrico para probar si un grupo de datos proviene de la misma población. Intuitivamente, es idéntico al ANOVA con los datos reemplazados por categorías. Si quieren informacion del metodo click AQUI
Ejemplo: Relación entre las reservas de hierro maternas y del recién nacido
Material y métodos. Diseño transversal en el que se incluyó a 163 mujeres embarazadas y sus neonatos de término, derechohabientes del Hospital de Ginecología y Obstetricia número 15 del Instituto Mexicano del Seguro Social (IMSS) en Chihuahua, Chih., México. Se analizaron antecedentes maternos. Se determinaron niveles de hemoglobina, hematocrito y ferritina sérica en muestras maternas y de cordón umbilical. Se definieron reservas de hierro maternas de acuerdo a ferritina (µg /l): bajas £11.9, moderadas de 12 a 20 y normales ³20.1. Se utilizó la prueba de Kruskal Wallis para establecer diferencias entre grupos, ji cuadrada para diferencia de proporciones y r de Pearson para establecer la relación entre reservas de hierro maternas y del recién nacido.
Tengo que recalcar que no es un ejemplo de celulas cancerosas, pero se da a entender con esto que este metodo se utiliza para pruebas medicasy muy posiblemente se utilice para reconocer las celulas cancerosas __________________________________________________________
El video del proyecto 5
aqui el video de la clase, perdonen la calidad de video, mi celular no es tan potente, pero espero que el audio se oiga bien. __________________________________________________________
en la prueba kruskal - wallis la verdad es que no encontre mucha informacion, si alguien tiene mas informacion o piensa que la informacion aqui subida esta mal, hagamelo saber por medio de un comentario en esta entrada.
Hola raza, bueno para pedirles un favor yo subi los puntos extra el miercoles en la madrugada por unos problemillas de conexion que tuve el lunes y martes
Les agradeceria si pudieran checar la entrada de Puntos Extra y luego ir a esta direccion de las lista de correos:
y comentaran a su parecer, cuantos puntos extra me dan :D __________________________________________________________
en otro tema, mas al rato subire algunas cosillas, engtre ellas tratare de buscar lo de la ultilizacion del algoritmo de Kruskal en el reconocimiento de celulas cancerosas, que la verdad me quede intrigado de como se utilizaria este algoritmo.
Saludos raza, comenten! yo ahorita me paso a los blogs, porque tengo algunas dudas con algunos temas para que respondan!
Árbol: Es un grafo en el que existe un único nodo desde el que se puede acceder a todos los demás y cada nodo tiene un único predecesor, excepto el primero, que no tiene ninguno. También podemos definir un árbol como: o Un grafo conexo y sin ciclos. o Un grafo sin ciclos y con n-1 aristas, siendo n el número de vértices.
Grado de un nodo: en un árbol es el número de subárboles de aquel nodo (en el ejemplo, el grado de v1 es 2 y de v2 1). Denominamos hojas en un árbol a los nodos finales (v3, v5 y v6). Un árbol de máximo alcance : es aquel que obtenemos en un grafo conexo y sin ciclos. Árbol de mínima expansión: Árbol de máximo alcance cuyo valor es mínimo, es decir, la suma de sus aristas es mínima. ______________________________________________________
Joseph B. Kruskal investigador del Math Center (Bell-Labs), que en 1956 descubrió su algoritmo para la resolución del problema del Árbol de coste total mínimo (minimum spanning tree - MST) también llamado árbol recubridor euclídeo mínimo. Este problema es un problema típico de optimización combinatoria, que fue considerado originalmente por Otakar Boruvka (1926) mientras estudiaba la necesidad de electrificación rural en el sur de Moravia en Checoslovaquia.
El objetivo del algoritmo de Kruskal es construir un árbol (subgrafo sin ciclos) formado por arcos sucesivamente seleccionados de mínimo peso a partir de un grafo con pesos en los arcos.
Algoritmo de Kruskal:
El algoritmo de Kruskal es un algoritmo de la teoría de grafos para encontrar un árbol recubridor mínimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un árbol, incluyen todos los vértices y donde el valor total de todas las aristas del árbol es el mínimo. Si el grafo no es conexo, entonces busca un bosque expandido mínimo (un árbol expandido mínimo para cada componente conexa). El algoritmo de Kruskal es un ejemplo de algoritmo voraz.
El algoritmo de Kruskal permite hallar el árbol minimal de cualquier grafo valorado (con capacidades). Hay que seguir los siguientes pasos:
1. Se marca la arista con menor valor. Si hay más de una, se elige cualquiera de ellas. 2. De las aristas restantes, se marca la que tenga menor valor, si hay más de una, se elige cualquiera de ellas. 3. Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las ya marcadas. 4. El proceso termina cuando tenemos todos los nodos del grafo en alguna de las aristas marcadas, es decir, cuando tenemos marcados n-1 arcos, siendo n el número de nodos del grafo.
Complejidad del algoritmo
m el número de aristas del grafo y n el número de vértices, el algoritmo de Kruskal muestra una complejidad O(m log m) o, equivalentemente, O(m log n), cuando se ejecuta sobre estructuras de datos simples. Los tiempos de ejecución son equivalentes porque:
-m es a lo sumo n2 y log n2 = 2logn es O(log n). -ignorando los vértices aislados, los cuales forman su propia componente del árbol de expansión mínimo, n ≤ 2m, así que log n es O(log m).
Aplicaciones:
La aplicación típica de este problema es el diseño de redes telefónicas. Una empresa con diferentes oficinas, trata de trazar líneas de teléfono para conectarlas unas con otras. La compañía telefónica le ofrece esta interconexión, pero ofrece tarifas diferentes o costes por conectar cada par de oficinas. Cómo conectar entonces las oficinas al mínimo coste total.
Otra aplicación menos obvia es que el árbol de coste total mínimo puede ser usado como solución aproximada al problema del viajante de comercio (traveling salesman problem), recuerde que encontrar la solución óptima a este problema es NP-completo. La manera formal de definir este problema es encontrar la trayectoria más corta para visitar cada punto al menos una vez. Nótese que si se visitan todos los puntos exactamente una vez, lo que se tiene es un tipo especial de árbol. Pseudocodigo:
Entrada: Un grafo ponderado conexo con todos sus pesos diferentes.
i : = 1;
N := tamaño del grafo de Entrada en número de vértices;
mientras (i < style="font-weight: bold;">Ejemplo:
Este es el grafo original. Los números de las aristas indican su peso. Ninguna de las aristas está resaltada.
AD y CE son las aristas más cortas, con peso 5, y AD se ha elegido arbitrariamente, por tanto se resalta.
Sin embargo, ahora es CE la arista más pequeña que no forma ciclos, con peso 5, por lo que se resalta como segunda arista.
La siguiente arista, DF con peso 6, ha sido resaltada utilizando el mismo método.
La siguientes aristas más pequeñas son AB y BE, ambas con peso 7. AB se elige arbitrariamente, y se resalta. La arista BD se resalta en rojo, porque formaría un ciclo ABD si se hubiera elegido.
El proceso continúa marcando las aristas, BE con peso 7. Muchas otras aristas se marcan en rojo en este paso: BC (formaría el ciclo BCE), DE (formaría el ciclo DEBA), y FE (formaría el ciclo FEBAD).
Finalmente, el proceso termina con la arista EG de peso 9, y se ha encontrado el árbol expandido mínimo.
Como se puede apreciar, este algoritmo es de optimizacion, ya que saca un coste minimo vistando a todos los nodos. Puede usarse para el problema del viajante.
Algoritmo de Kruskal
ejemplo del algoritmo en la web para probarlo click AQUI
Para descargar la diapositiva de la clase click AQUI
_____________________________________________________ Autoevaluacion: Pues este tema me gusto desde el principio, puesto que en proyecto 2 habia hecho el problema del transbordo con costos, y se parece. De este algoritmo hay mucha informacion en la web, pero creo que pude redactarla en un modo mas entendible. Creo que si me esforce en cumplir el cometido del blog, ya seran ustedes los que juzguen... ______________________________________________________ Bibliografia: http://es.wikipedia.org/wiki/Joseph_Kruskal http://es.wikipedia.org/wiki/Algoritmo_de_Kruskal http://lear.inforg.uniovi.es/ioperativa/TutorialGrafos/minimaexp/kruskal/appletKruskal.htm (programa del algoritmo de kruskal en la web) 'http://www.dma.fi.upm.es/gregorio/grafos/primkruskal/kruskal/kruskal.html http://www.monkers.net/examenes/EDA/practica2.pdf ______________________________________________________ bueno espero que les haya gustado el tema, si tienen algunas preguntas o simplemente comentar algo, no duden en hacerlo.
Represente este pseudocodigo en un diagrama de flujo
Bueno aqui yo lo trate de hacer en raptor para que el programa corriera y me quedo como resultado este diagrama de flujo. Que hace exactamente? Pues la funcion del pseudocodigo y que esta representado en el diagrama, es saber si un numero es primo o no. Para esto tiene diferentes funciones el diagrama, tratare de explicar una por una:
Cuando se inicia el programa, se pide un valor "n"cualquiera. Este sera evaluado por la primera condicion: ((n%2)==0) esto quiere decir, se saca ((n modulo 2)==0), si el resultado del numero n introducido es 0 entra por la parte verdadera donde la condicion sera que si el residuo de la condicion anterior es 2 entonces el numero no es primo, si no es 2, es primo.
Cuando el ((n modulo 2)==0) sea falso, entrara a otras instrucciones. Al principio de las instrucciones se añade un valor i y este sera igual a 3. Luego se evalua un while con la condicion i<=raiz(n) (en raptor se escribiria: i>=sqrt(n) ). Si esta condicion es verdadera se evaluara la condicion ((n%i)==0) que evaluaria ((n modulo 3)==0). Si esta condicion se cumple imprime un "no"y si no se cumple va le va sumando a i (3) 2 numeros hasta que se deje de cumplir la expresion i>=sqrt(n). Si al final se deja de cumplir esta condicion se imprimira un "si". Ejecucion paso a paso.
Tratare de explicar 2 ejecuciones: evaluando 4 y 17
Evaluando numero 4
InicioSe introduce el numero 4 Se cumple la primera condicion del if,quedaria ((4%2)==0) Entra por la parte verdadera Se evalua ùn if con la siguiente condicion (4==2) Como el 4 no es igual a 2 el resultado es Falso Entra por la parte falsa Imprime un "no"Fin
Evaluando el numero 17
Inicio Se introduce el numero 17 No se cumple la primer if con la condicion ((17%2)==0) Entra por la parte falsaSe añade el valor "i" que es igual a 3 Se evalua un while con la condicion 3<=raiz(17), la afirmacion es verdadera ya que raiz(17)=4.1 y 3 es menor Entra por la parte verdadera Evalua un if con la siguiente condicion ((17%3)==0), esta afirmacion es falsa Se suma 3+2=5 Se evalua la condicion 5<=raiz(17), la afirmacion es falsa ya que 5 es mayor a 4.1 Sale del while Imrpime si Fin tambien aqui dejo un video del diagrama de flujo en raptor, donde se evaluan tres numero que son el 3, 4 y 17. Si quieren descargar el programa click aqui
Problema No. 3 Ejecuta paso por paso la máquina Turing definida por la siguiente función de transición, con la entrada siendo la representación binaria del número decimal 43 Primero que nada, avaluaremos el numero binario para 43, para eso vamos dividiendo el numero de 2 en 2 43/2= 26 residuo 1 26/2= 13 residuo 0 13/2= 6 residuo 1 6/2= 3 residuo 0 3/2=1 residuo 1 1/2= 0 residuo 1
y quedaria el numero binario 101011 Conforme a las instrucciones evaluamos
iniciamos s, inicio s, inicio - nos movemos hacia la derecha leemos s,1 - imprimimos 1 y avanzamos hacia la derecha (no hay modificaciones) leemos s,0 - imprimimos 0 y avanzamos hacia la derecha (no hay modificaciones) leemos s,1 - imprimimos 1 y avanzamos hacia la derecha (no hay modificaciones) leemos s,0 - imprimimos 0 y avanzamos hacia la derecha (no hay modificaciones) leemos s,1 - imprimimos 1 y avanzamos hacia la derecha (no hay modificaciones) leemos s,1 - imprimimos 1 y avanzamos hacia la derecha (no hay modificaciones) leemos s, espacio - cambiamos estado "s" a "t", imprimimos 1 y avanzamos hacia la izquierda (si hay modificaciones) leemos t,1 - imprimimos 1 y avanzamos hacia la izquierda (no hay modificaciones) leemos t,1 - imprimimos 1 y avanzamos hacia la izquierda (no hay modificaciones) leemos t,1 - imprimimos 1 y avanzamos hacia la izquierda (no hay modificaciones) leemos t,0 - imprimimos si y hacemos alto.
(perdonen la tabla mal hecha)
el numero de salida seria 1011111 que seria igual a 95
Lo que hace la maquina es multiplicarse por 2 a agrega un 1 de suma y un 1 en el lugar del 8 (se suma 8, dando (43x2)+8+1=95 )
La complejidad asintotica es lineal O(n). ________________________________________________________
Buenas tardes-noches profesora y compañeros. Bueno junto con mi equipo (Gerardo Ossio, Chio Soco, Claudia Lozano) escogimos el tema de "Pilas" para exponer como proyecto 4.
Que hice yo? Bueno consegui la informacion inicial del proyecto e hice las animaciones que se usaron en las diapositivas, para ilustrar los ejemplos de la insercion/extraccion de la pila.
Como me salio? Bueno, las animaciones pues no tienen mucha imaginacion (hechas con microsoft gif animator), no pude hacerlas en flash pues no tengo los programas y hablando de la informacion pues opino a mi parecer que consegui buena informacion.
En que aspectos estoy bien y en cuales me hace falta mejorar. A mi parecer estoy bien en la comprension del tema, solo me falta mejorar en la implementacion del mismo, ejemplo hacer pilas en c.
Ayudo a los demas o me apoyo en ellos. Pues la verdad en esta actividad trate de comprender todo por mi mismo, pero porsupuesto hubo algunas cosas que tuve que pedir ayuda y otras a las cuales explique a mis compañeros de equipo.
Quien se encarga de coordinar el trabajo? Pues la verdad todos.
Que papel tomo yo. Pues la verdad con un poco de liderazgo pero tambien como alguien que puede acatar las ordenes, es decir, no solo el que dice que hacer sino que tambien hace.
Bueno como hice una "pendejada" de hacer el borrador del proyecto 3 en word y luego hacer copy/paste y pegarlo en el blog, me afecto el color de los links y otras opciones, por lo cual lo volvi a subir, el trabajo ya se califico y si lo subi entre el dia y la hora indicadas solo que lo volvi a subir para corregir los errores. Bueno es para aclarar alguna dudilla si entran al blog. Saludos
Bueno para comenzar, me toco explicar el tema "Numeros de fibonacci" junto a mis compañeros Gerardo Ossio, Claudia Lozano y Rocio Solis.
En breve explicare lo que entendi lo que es Algoritmos Recursivos e Iterativos, pues es en lo que se basaba todo el proyecto. Lo que entendi fue:
Conceptos:
Algoritmos Recursivos: es cuando un problema se puede simplificar (dividir) en partes mas pequeñas para resolverlo. Es como el refran "Divide y venceras" (que es lo que me acuerdo que nos dijo la Profe Tania cuando le toco dar clase) y nos puso el ejemplo de los numeros factoriales, en ese caso tuvimos que sacar el factorial de 5 y dividimos el problema hasta la suma de factoriales que sabiamos de antemano.
Bueno para dar un ejemplo propio, tuve que investigar el de Fibonacci, un ejemplo facil es como sacara el numero fib(6)=8. El problema se podria dividir como
fib(6)=fib(4)+fib(5)
a su vez podriamos dividir el fib(4), entonces nos quedaria:
fib(6)=fib(2)+fib(3)+fib(5)
y tambien podriamos dividir el fib de 2, quedaria:
fib(6)=fib(1)+fib(2)+fib(3)+fib(5)
se podria decir
fib(6)=(0)+(1)+(1+1)+(2+3)=8
es es un ejemplo, ya que dividimos (simplificamos) los terminos hasta saber unas sumas mas faciles, y resolvimos el problema.
Algoritmo Iterativo: Se caracterizan por ejecutarse mediante ciclos, son muy utiles para cuando se necesita hacer una repeticion de "n" veces de una tarea.
En el ejemplo de Fibonacci se podria hacer una iteracion al decir:
i:=1;
j:=0; para k desde 1 hasta n hacer
j:=i+j;
i:=j-i;
fpara
devolver j;
esto es, que si le damos valores de 0 y 1, los sumara y devolvera el valor "k" ,sustituira el valor "k" en "j" y el de "j" en "i", luego volvera a sumar y sustituir "n" veces.
Cuando usar Recursivo o Iterativo
Podriamos decir que se usa recursivo cuando son problemas dificiles que no se puede hacer en forma Iterativa y que su dificultad nos haga dividirlo en pasos mas simples.
Podriamos usar el iterativo cuando el problema planteado se pueda hacer mediante pasos repetitivos que nos haga ahorar tiempo y memoria.
En nuestro ejemplo de "Secuencia de Fibonnacci" es evidente que tedriamos que usar la forma iterativa, ya que en la forma recursiva (como vimos en el ejemplo de fib(6)) tuvimos que descomponer, volver a descomponer y asi hasta llegar a una operacion que nos daria el resultado, eso llevo tiempo y si fuera en el computador ademas nos tomaria memoria ya que solo imaginar hacer el fib(100), tendria que hacer mas operaciones y mas tiempo, mientras de la manera iterativa solo haria una simple suma, sustituiria, volveria a hacer suma etc... ya como solo nos interesan los 2 ultimos numeros poara la suma no tendriamos que guardarlos siempre en la memoria, es reduciria tanto tiempo como memoria.
Trabajo Grupal
Yo diria que falto comunicacion al principio por compromisos que cada uno tuvimos en las 2 semanas para hacer el trabajo, pero al final cuando ya nos pusimos de acuerdo me di cuenta que mis compañeros pueden ser personas de las cuales aprender (por asi decirlo), como por ejemplo al momento de buscar informacion del trabajo, si tenia alguna duda alguno de ellos me explica y viceversa, yo diria que se puede aprender mucho solo con escuchar a otras personas.
He poder decir que ne los ultimos dias hubo demasiada comunicacion.
Contribucion del trabajo
Principalmente todos tuvimos que buscar informacion de todos los temas, pero del cual me enfoque mas es sobre la complejidad y el analisis del problema.
Como comparo lo que aporte, a lo que aportaron los demas?
Pues yo diria que todos aportamos algo muy importante, no se podria decir "yo aporte mas o yo aporte menos", cada quien hizo su esfuerzo en buscar informacion y opinar cual era buena y mala. Por suerte en el proyecto se puede observar una contribucion de cada uno, nadie se quedo sin contribuir.
Que se podria mejorar en el futuro...
Solo un poco la comunicacion en los primeros dias del proyecto, porque la verdad no nos gusta dejarlo todo para el final (que en esta ocasion fue diferente ya que hubo examenes y compromisos personales que nos lo impidieron tantillo)
Diapositiva
http://www.megaupload.com/?d=GM99HPNF
ya como final, todo lo que aqui se leyo fue lo que escribi personalmente y lo que entendi, si creen que se me paso algo o de plano me quivoque en una definicion haganmelo saber, prefiero que me digan y parecer tonto por 5 min a no entender nunca y ser tonto para siempre jeje
Bueno principalmete el problema de transbordo es un problema clasico del transporte, es un modelo particular de problema de programación lineal, uno en el cual su resolución a través del método simplex es dispendioso, pero que debido a sus características especiales ha permitido desarrollar un método más práctico de solución.
El modelo de transporte se define como una técnica que determina un programa de transporte de productos o mercancías desde unas fuentes hasta los diferentes destinos al menor costo posible.
Para entender el problema del transbordo veremos un ejemplo simple de un problema de transporte clasico:
Modelo General del Problema del Transporte
Es un caso especial de problema de programación Lineal, en el que todos los coeficientes de las variables en las restricciones tienen coeficiente uno (1), esto es:
ai,j = 1 ; para todo i , para todo j donde:
Xi,j= Unidades a enviar desde la fuente i-ésima (i=1,...,m) al destino j-ésimo (j=1,...,n)
Ci,j= Costo de enviar una unidad desde la fuente i-ésima (i=1,...,m) al destino j-ésimo (j=1,...,n)
ai = Disponibilidad (oferta) en unidades, de la fuente i-ésima (i=1,...,m)
bj = Requerimiento (demanda) en unidades, del destino j-ésimo (j=1,...,n)
para que el problema sea optimo deberiamos cumplir con las reglas de
Bueno ya entrando al problema del transbordo:
El Problema del Transbordo
Dos fábricas de automóviles, P1 y P2, están conectadas a tres distribuidores, D1, D2 y D3, por medio de dos centros de tránsito, T1 y T2, de acuerdo con la red que se muestra en la siguiente diapositiva
Las cantidades de la oferta en las fábricas P1 y P2, son de 1000 y 1200 automóviles, y las cantidades de la demanda en las distribuidoras D1, D2 y D3, son de 800, 900 y 500 automóviles. El costo de envío por automóvil (en decenas de dólares) entre los pares de nodos, se muestra en los eslabones (arcos) de conexión de la red
Situaciones: Enviar un bien desde unos puntos de origen a unos puntos de destino pero pudiendo pasar por puntos intermedios. Reconoce que a veces en la vida real resulta mas economico enviar mercancias a traves de puntos intermedios en lugar de hacerlo directamente desde el origen hasta el destino.
Los vertices del grafo pueden ser de varios tipos:
Orıgenes puros: Solo pueden enviar bienes. De ellos solamente pueden salir arcos.
Destinos puros: Solo pueden recibir bienes. A ellos solamente pueden llegar arcos.
Transbordos: Pueden enviar y/o recibir mercancias A ellos pueden llegar arcos y/o de ellos pueden salir arcos.
Cada vez que se plantea un problema de programación lineal, se procede cumpliendo las siguientes etapas: 1.- Comprensión del problema (lectura en detalle) 2.- Definición de las variables de decisión 3.- Descripción de la función objetivo 4.- Identificación de las restricciones del problema
Se plantea identificando como variables de decisión a todas las posibilidades de flujos de asignación, a transferir entre los nodos de la red de transbordo Se define como función objetivo la minimización de los costos de transporte asociados al transbordo Las restricciones corresponden a un balance de transferencia de unidades para cada nodo de la red de asignación, sin olvidar la condición de no negatividad
como ya vimos en la parte inicial, procedemos con las operaciones
El transbordo ocurre ya que la cantidad de la oferta de 2200 (1000 + 1200) automóviles en los nodos P1 y P2, requiere pasar a través de los nodos de transbordo de la red (T1 y T2) ,antes de llegar a sus puntos de destino en los nodos D1, D2 y D3 • Nodos puros de Oferta P1, P2 • Nodos de Transbordo T1, T2, D1, D2 • Nodos puros de Demanda D3
El modelo de transbordo se convierte a un modelo de transporte con seis puntos de origen (P1, P2, T1, T2, D1 y D2) y cinco de destino (T1, T2, D1, D2 y D3) NODOS PUROS DE OFERTA Y NODOS PUROS DE DEMANDA Las cantidades de la oferta y la demanda en los nodos puros de oferta y puros de demanda, queda:
Oferta en un Nodo -->Oferta Original puro de Oferta
Un nodo puro de oferta no posee amortiguador
Demanda en un Nodo -->Demanda Original puro de Demanda
Un nodo puro de demanda no posee amortiguador
NODOS DE TRANSBORDO Las cantidades de la oferta y la demanda en los nodos de transbordo, se establece de acuerdo a:
Oferta en un Nodo de Transbordo --> Oferta Original + Amortiguador
La oferta necesariamente posee un amortiguador, mientras que a veces se encuentra oferta original
Demanda en un Nodo de Transbordo ---> Demanda Original + Amortiguador La demanda necesariamente posee amortiguador, mientras que en ocasiones hay demanda original
El problema pertenece a " p" ya que es un algoritmo lineal, que puede resolverse facilmente, el problema plantea el coste minimo y si ya se dan el coste de cada distancia solo se tendra que optar por la combinacion mas minima.
El problema que escogimos para realizar un pseudocodigo fue el de la "Guia Telefonica", junto con mi compañera Rocio Cecilia Solis hicimos una estructura en dev c++, en esta estructura utilizamos dos herramientas principales que fueron el "if" y el "switch" para nuestro directorio.
Nos basamos primordialmente en como un ser humano busca un telefono en la guia telefonica, esta claro que hay una serie de pasos para hacerlo, basicamente se podria decir que nuestro directorio funcionaba de la siguiente manera:
Letra a buscar > Apellido a buscar > Apellido compuesto > Listado de nombres
De manera breve ejemplificare en manera de pseudocodigo el algoritmo que usamos para buscar nombres en nuestro directorio:
NOTA //*Azul*// : comentarios personales (//*verde//) : representacion de un numero "rojo": palabras que aparecen en la pantalla
int main() { int letra; system ("CLS"); printf("\t\t Directorio de Monterrey\n\n");
printf("Elija una de las siguientes letras para empezar a buscar\n\n");
//*En esta parte se escogera un número de la siguiente lista de letras*//
printf("A=1\tE=5\tI=9\tM=13\tP=17\tT=21\tX=25\nB=2\tF=6\tJ=10\tN=14\tQ=18\tU=22\tY=26\nC=3\tG=7\tK=11\tÑ=15\tR=19\tV=23\tZ=27\nD=4\tH=8\tL=12\tO=16\tS=20\tW=24\n\nopcion:"); scanf ("%d", &letra); //*En esta parte se evaluara un caso segun el número escogido en la opcion anterior*//
switch(letra) { case //*Número escogido//*:
//*Segun el caso escogido, se despliega un menú que pregunta que opcion de apellido se quiere segun la letra escogida al principio*//
printf("\n\nUsted Selecciono la letra A para empzar a buscar, elija uno\n de los suguientes Apellidos:\n1=Apellido 1\n2=Apellido 2\n3=Apellido 3\nopcion:"); scanf("%d", &letra);
//*En esta parte se realizara el proceso de "if" (verdadero/falso) hasta encontrar el número escogido*//
if (x=(//*número escogido*//){ printf ("\n\nA seleccionado el apellido //*"apellido compuesto seleccionado"//*, hubo una coincidencia de 5 nombres, elija una opcion\n\n"); printf ("1=Apellidos 1\n1=Apellidos 2\n1=Apellidos 3 \n"); scanf ("%d", &letra);
//*Hacemos otra funcion "if" para evaluar el numero ecogido*//
de esta manera ejemplificada se podria entender el objetivo de nuestro proyecto. Ahora se ejemplificara el primer caso en que utilizaremos nuestro codigo, para este ejemplo escogeremos la letra "G" para entender mas o menos el objetivo. #include stdio.h #include conio.h
int x=0;
int main() { int letra; system ("CLS"); printf("\t\t Directorio de Monterrey\n\n"); printf("Elija una de las siguientes letras para empezar a buscar\n\n"); printf("A=1\tE=5\tI=9\tM=13\tP=17\tT=21\tX=25\nB=2\tF=6\tJ=10\tN=14 \tQ=18 \tU=22\tY=26\nC=3\tG=7\tK=11\tÑ=15\tR=19\tV=23\tZ=27\nD=4\tH=8\tL=12\tO=16\tS=20\tW=24\n\nopcion:"); scanf ("%d", &letra);
en la pantalla aparecera nuestro menu de letras para empezar a buscar, escogeremos la opción "G" que es el número 7
switch(letra) { case 7: printf("\n\nUsted Selecciono la letra G para empzar a buscar, elija uno\nde los suguientes Apellidos:\n\n1=Galvan\t6=Gorrion\n2=Garcia\t7=Guitierrez\n3=Garza\n4=Guevara\n5=Guerra\n\nopcion:");
scanf("%d", &letra);
En esta parte nos despliega un menú de los apellido que empiezan con la letra escogida (en este caso la "G"), luego escogeremos la opcion 3 que corresponde al apellido "Garza"
if (x=3) { printf ("\n\nA seleccionado el apellido Garza, hubo una coincidencia de 22 Apellidos\ncompuestos, elija una opcion\n\n"); printf ("1=Garza Alvarado\n2=Garza Alvarez\n3=Garza Arellano\n4=Garza Barba\n6=Garza Barreda\n7=Garza Benavides\n8=Garza Blasques\n9=Garza Buentello\n10=Garza Castillo Martha\n11=Garza Cavazos\n12=Garza Casares\n13=Garza Cantu\n14=Garza Garza\n15=Garza de Leon\n16=Garza Delgado\n17=Garza Maldonado\n18=Garza Rodriguez\n19=Garza Salinas\n20=Garza Villarreal\n21=Garza Zamora\n22=Garza Zapata\n\nopcion:"); scanf ("%d", &letra);
Nos desplegara un menu con los apellidos compuestos (apellidos que tienen el apellido escogido anteriormente como primer apellido), nosotros escojeremos la opcion 15 que corresponde al apellido compuesto "Garza de León"
if(x=15) { printf("\nHubo 12 coincidencias\n\n"); printf("Garza de Leon Eustolia\t\t83588512\nGarza de Leon Adrian\t\t83608647\nGarza de Leon Diana\t\t83492749\nGarza de Leon Hilda Gloria\t81340204\nGarza de Leon Jose Angel\t83101866\nGarza de Leon Jose Regino\t83262824\nGarza de Leon Marcelino\t\t83820750\nGarza de Leon Ramon Gerardo\t83144447\nGarza de Leon Ricardo Francisco\t83430367\nGarza de Leon Romulo\t\t83797724\nGarza de Leon Silvia\t\t83347144\nGarza de Leon Yolanda\t\t83350393");
}
ya con la opcion 15 escogida, nos desplegara la lista de nombres que coinciden con los parametros a igual que sus telefonos
Nuestro segundo caso es con la letra V, como usa el mismo metodo que utilizamos con la "G" solo pondremos el pseudocodigo y la imagen del programa:
#include stdio.h #include conio.h
int x=0;
int main() { int letra; system ("CLS"); printf("\t\t Directorio de Monterrey\n\n"); printf("Elija una de las siguientes letras para empezar a buscar\n\n"); printf("A=1\tE=5\tI=9\tM=13\tP=17\tT=21\tX=25\nB=2\tF=6\tJ=10\tN=14 \tQ=18 \tU=22\tY=26\nC=3\tG=7\tK=11\tÑ=15\tR=19\tV=23\tZ=27\nD=4\tH=8\tL=12\tO=16\tS=20\tW=24\n\nopcion:"); scanf ("%d", &letra);
switch(letra) { case 23: printf("\n\nUsted Selecciono la letra V para empezar a buscar, elija uno\nde los suguientes Apellidos:\n\n"); printf("1=Valles\n2=Vara\n3=Varela\n4=Vargas\n5=Vazquez\n6=Velasco\n7=Viera\n8=Villanueva\n10=Viramontes\n11=Vota\n\nopcion:");
scanf("%d", &letra); if (x=10){ printf ("\n\nA seleccionado el apellido Viramontes, hubo una coincidencia de 8 Apellidos\nCompuestos, elija una opcion\n\n"); printf ("1=Viramontes Brown\n2=Viramontes Flores\n3=Viramontes Fuentes\n4=Viramontes Garcia\n5=Viramontes Gutierrez\n6=Viramontes Romo\n7=Viramontes Sierra\n8=Viramontes Velazquez\n\n opcion:"); scanf ("%d", &letra);
if(x=6){ printf("\nHubo 4 coincidencias\n"); printf ("Viramontes Romo Jesus\t\t83431255\nViramontes Romo Jose Luis\t83774291\nViramontes Romo Maria Eugenia\t83343068\nViramontes Romo Silvia\t\t83772352"); } }
perdonen la descripcion de las librerias, van entre signos de mayor/menor, pero el editor de blogger no me las acepta)
aqui anexo un video de la ejecucuion del programa (para verlo mejor, verlo en pantalla completa)