martes, 6 de julio de 2010

Tarea2 Ordenación de Arreglos de Números

Que es la Ordenación de Números?
O mas bien conocido en la programación como algoritmos de ordenamiento, estos son arreglos de una lista o de un vector de una secuencia, dada en forma sin un orden, osea, que lleven una secuencia o que estén acomodadas de mayor a menor o viceversa.


Ej.:
secuencia: 51, 35, 23, 65, 84, 45
acomodo: 23, 35, 45, 51

Para que me Sirven...
Bueno estos arreglos, hay que conocerlos, ya que son importante y si se utilizan muy seguido.
Por ej.:
-Las calificaciones que sacaste y las quieres acomodar de mayor a menor
-Saber cual es el precio mas bajo de ciertos productos
-Acomode una secuencia dada, entre otras....

Que tipos de Ordenamientos hay...
Hay diferentes tipos de ordenamiento, pero los mas utilizados son los siguientes:

Da click aquí si quieres ver animaciones de diferentes tipos de ordenamiento

Yo que hice...??
Y claro yo aquí por mi cuenta hice un programa en c en la cual tu das una secuencia de números y eliges la forma en la que se Ordenaran

Ordenamiento
View more documents from Abraham
Y aquí si quieres descargar el código en c.
Continua...

jueves, 1 de julio de 2010

Reporte Tarea1 Taller de Programacion


¿Que hice yo, Como me salio?
La parte que yo realice fue, buscar herramientas para poder utilizar c, en diferentes Sistemas Operativos, junto con mi compañera de equipo, ya después conseguido esta información, lo que se hizo fue redactar todo y convertirlo en pdf. En mi opinión, el trabajo me salio bien, ya que le pusimos mucho empeño para sacar una buena nota.

¿En qué aspectos estoy bien y en qué me hace falta mejorar?
Entendí acerca de como instalar herramientas en diferentes sistemas operativos, algo que no sabia de programas para mac, el trabajo que se realizo junto con mi compa
ñera y de la manera de como se trabajo.

Ayudo a los demás o me apoyo en ellos
En mi punto de vista, se trabajo por igual, hubo mucha cooperación por parte de ambos, si mi compa
ñera tenia dudas acerca del trabajo, le ayudaba o le explicaba, al igual que si yo tenia algún problema ella me ayudaba.

¿Quién se encarga de coordinar el trabajo?
Como se había mencionado, se trabajo por igual, nos coordinamos y nos apoyamos mutuamente, y nos poníamos de acuerdo.

¿Qué papel tomo yo?
Por ambas partes se tomo un papel importante, ya que ambos trabajamos, ambos buscamos información, la comparábamos, decidíamos, redactamos, etc... Asi que tomamos ambos el mismo papel.


View more documents from Abraham.
Y aqui esta el link de para descargar el pdf.

jueves, 17 de junio de 2010

Java Tarea1

Hola que tal aqui les dejo mi programa, que es bastante sencillo lo que hace que abre una ventana en ella hay dos ventanas ccon un boton cada uno, al oprimirle cambia de color de fondo tratando de poner el mismo fondo en ambos... aqui se los dejo el codigo y unas imagenes:


//libreria
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.GridLayout;
import java.awt.GridBagLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

//implements sirve que escuhcara el boton
public class change implements ActionListener {

public void actionPerformed(ActionEvent a){

//que hacer cuando pica un boton especial
this.suma++;
if(this.suma % 2 == 0){
System.out.println("Cambio de color verde");
this.panelsecundario.setBackground(this.verde);
}else{
System.out.println("Cambio de color rosa");
this.panelsecundario.setBackground(this.rosa);
}
return;
}

private JPanel panelsecundario;
private int suma;
private Color verde, rosa;
public change(JPanel p){ //se tiene que llamar el nombre del archivo
this.panelsecundario = p;
this.suma = 0;
this.verde = new Color(68, 128, 60); //colores en formato RGB
this.rosa = new Color(185, 24, 85); //rango de 0-255ose
}

public static void main(String[] args){

//se crean variablles
JFrame ventana = new JFrame();//Una ventana nueva

ventana.setSize(400, 300);//que tan grande sera la ventana
ventana.setLocation(100, 200);// donde(tu le das las coordenadas en el lugar para que se abra
ventana.setTitle("Ventana Abraham"); //Cual sera el nombre de la venta(impreso ya ejecutandose)

//que pasa si se cierra el programa
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setVisible(true);

//creamos unos paneles para agrupar elementos
JPanel pdere= new JPanel();
JPanel pizq= new JPanel();
JPanel p= new JPanel(); //panel del fondo

//asignar los administradores de acomodo de cada panel
pdere.setLayout(new GridBagLayout ());
pizq.setLayout(new GridBagLayout ());
p.setLayout(new GridLayout (1, 2));

//asignar el colorde fondo de cada panel
pdere.setBackground(Color.BLUE);
pizq.setBackground(Color.GREEN);
//boton escucha
JButton der = new JButton("Izquierdo");
JButton izq = new JButton("Derecho");

change yo = new change (pizq);
izq.addActionListener(yo);
change tu = new change (pdere);
der.addActionListener(tu);

//pone los boton en los paneles
pizq.add(izq);
pdere.add(der);

//poner lo paneles auxiliares
p.add(pdere);
p.add(pizq);
ventana.setContentPane(p);
ventana.setVisible(true);
return;
}
}

martes, 18 de mayo de 2010

Algoritmo de prim

Check out this SlideShare Presentation:

lunes, 17 de mayo de 2010

Reporte del Proyecto 5 Algoritmo de Prim





Un poco acerca de esto:
El algoritmo de prim es un algoritmo perteneciente a la teoría de lo grafos para encontrar un árbol recubridor mínimo en un grafo conexo , no dirigido y cuyas aristas están etiquetadas.
El algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de manera independiente por el científico computacional Robert C. Prim en 1957 y redescubierto por Dijkstra en 1959. Por esta razón, el algoritmo es también conocido como algoritmo DJP o algoritmo de Jarnik.

pero para no aburrirte tanto acerca de este, en pocas palabras lo que hace es que que ayuda a ahorrar recursos, llegando a cada una de sus aristas.

Problema que resuelve
El problema que resuelve es del camino mas corto o caminos minimos. El problema consiste en encontrar un camino entre dos vértices (o nodos) de tal manera que la suma de los pesos de las aristas que lo constituyen es mínima.

Problema de decision:
Existe un camino mas corto que c?

Respuesta: La pregunta que se te hace es que si existe un camino mas corto, si la respues es que si, ya sea de que a o b sean mas cortos que c, y se vuelve a hacerse la misma pregunta pero ahora si hay uno de b, ya que puede haber un d o un e, cuando la respuesta sea no y haya recorrido todas las aristas, la solucion habra acabado.

Perteneciente a P
Este problem se puede resolver en timpo polinomial, por lo tanto esto se puede resolver con una maquina turing no determinsita en timpo polinomial

Algoritmo:
los pasos son:
1. Se marca un nodo cualquiera, será el nodo de partida.
2. Seleccionamos la arista de menor valor incidente en el nodo marcado anteriormente, y marcamos el otro nodo en el que incide.
3. Repetir el paso 2 siempre que la arista elegida enlace un nodo marcado y otro que no lo esté.
4. El proceso termina cuando tenemos todos los nodos del grafo marcados.

Que es lo que viene haciendo esta algoritmo?
lo que viene haciedno este algoritmo es, recorrer todo el grafo dado, tocando cada una de sus aristas, utilizando el menor numero posible de reursos.
Pseudocodigo
// Inicializamos todos los nodos del grafo. La distancia la ponemos a infinito y el padre de cada nodo a NULL
// Encolamos, en una cola de prioridad donde la prioridad es la distancia, todas las parejas del grafo
por cada u en V[G] hacer
distancia[u] = INFINITO
padre[u] = NULL
Añadir(cola,)
distancia[s]=0
mientras cola != 0 do
// OJO: Se entiende por mayor prioridad aquel nodo cuya distancia[u] es menor.
u = extraer_minimo(cola) //devuelve el minimo y lo elimina de la cola.
por cada v adyacente a 'u' hacer
si ((v ∈ cola) && (distancia[v] > peso(u, v)) entonces
padre[v] = u
distancia[v] = peso(u, v)
Actualizar(cola,)

Ejemplo paso a paso:


Siguiendo el algoritmo de Prim, tenemos:
o Elegimos, por ejemplo, el nodo 1 y lo marcamos.
o Elegimos la arista con menor valor incidente en 1, la (1, 3) = 1 la marcamos y marcamos el otro nodo en el que incide, el 3.
o Elegimos la arista con menor valor incidente en un nodo marcado y otro que no lo esté, la (1, 2) = 3 la marcamos y marcamos el nodo no marcado, el 2.
o Elegimos la arista con menor valor incidente en un nodo marcado y otro que no lo esté, la (2, 5) = 5 la marcamos y marcamos el nodo no marcado, el 5.
o Elegimos la arista con menor valor incidente en un nodo marcado y otro que no lo esté, la (5, 6) = 1 la marcamos y marcamos el nodo no marcado, el 6.
o Elegimos la arista con menor valor incidente en un nodo marcado y otro que no lo esté, la (5, 7) = 2 la marcamos y marcamos el nodo no marcado, el 7.
o Elegimos la arista con menor valor incidente en un nodo marcado y otro que no lo esté, la (5, 4) = 6 la marcamos y marcamos el nodo no marcado, el 4.
o FIN. Finalizamos dado que tenemos marcados los 7 nodos del grafo.
o Por tanto el árbol de mínima expansión resultante sería:



Estructura de datos:
El tipo de estrucura de datos, que este emlpea es el de cola de prioridad, ya que se van a indicando conforme a su prioridad.

Su complejidad:
Es O(n^2), porque se recorre cada nodo y se compara con cada uno de ellos, para marcarlos que ya los visito, y asi no usar mas recursos.

Aplicaciones
Este algoritmo tiene diversas aplicaciones, mas que nada es impementado, para ahorrar recursos como ya se habia mencionado, se puede usar en el cableado en poner postes de luz, cableados de redes, entre otros.
como viene funcionando esto?
imaginate, si cada poste de luz es un nodo junto tambien con las casas, y su cableado es un arista y a esta asignandole un valor, que viene siendo la distancia que hay en ellos, para esto hay que buscar la forma en ahorra cableado, para eso se emplea este algoritmo.

Bibliografia:
http://es.wikipedia.org/wiki/Algoritmo_de_Prim
http://algoritmoshade.blogspot.com/
http://www.cut-the-knot.org/Curriculum/Games/Mazes.shtml
http://www.youtube.com/results?search_query=algoritmo+de+prim&aq=0
http://www.mincel.com/java/prim.html

domingo, 25 de abril de 2010

Reporte Proyecto 4

¿Que hice yo, Como me salio?
Mi objetivo principal, fue hacer la Explicación de aplicaciones reales, tarde un poco en buscarlos, pero ya despues de un tiempo de reflexion los encontré. Me salió bien las aplicaciones y se los mande a mis compañeros para que dieran su opinion y les parecio buena.

¿En qué aspectos estoy bien y en qué me hace falta mejorar?
Entendi el funcionamiento de las pilas, y sobre todo sus aplicaciones, el trabajo que se hizo en equipo y como nos lo distribuimos, Si acaso algo que no entendi fue el conteo por parentesis, pero ya despues de leerlo le entendi.

Ayudo a los demás o me apoyo en ellos
En mi opinión todos cooperamos por igual, trabajamos en equipo, si uno tenía duda, los demás buscaban la forma de apoyarlo, al dar o al compartir una idea, todos opinabamos la implementabamos o la mejorabamos.

¿Quién se encarga de coordinar el trabajo?
Como ya se habia mencionado antes, todos trabajamos por igual, al coordinar, nos poniamos de acuerdo para que el trabajo saliera por delante, cada uno de nosotros daba su opinion acerca de este.

¿Qué papel tomo yo?
Todos tomamos un papel importante en este proyecto, no creo que seria justo mencionar quien hizo mas o quien menos, porque entre los 4 se busco la forma de sacarlo, si acaso a mencionar sería de que cada uno dío su opiníon y se trabajaba con lo que se comentaba y se ponía a disposicion.





Blog de mis Companeros:

domingo, 14 de marzo de 2010

Tercer Proyecto

14/mar/10

Hola a todos, este es mi proyecto de Algoritmos Computacionales realizado por mis compañeros Rodolfo, Christian, Erick y su servidor Abraham Silva,el proyecto que escogimos, fue el de Numeros de Catalan.

Muchos de ustedes se preguntaran para que sirven o cual es su utilidad, pero la realidad, esque este tipo de numeros los vemos muy seguidos. Nombrando algunos ejemplos seria: en las secuencias, estructuras de arboles, estructuras de figuras, combinaciones, etc...

La formula, para sacar estos numeros, es la siguiente:


Donde n, es todo cualquier numero positivo.

n  C_n \,
0 1
1 1
2 2
3 5
4 14
5 42
6 132
7 429
8 1430

Aqui se muestra una tabla con los primeros 8 numeros y como se realiza...

aaa y por cierto, disculpen mi dibujo feo, pero es para que me entiendan de como sacarlo.

Este metodo, es un tipo de recursion, ya que esta secuencia se va repitiendo en mucahs otras ya que el numero resultante simpre sera el mismo.

Ya teniendo la base y la idea de esto, lo que se hizo, pues fue el programa que es el siguente

#include

long*numero;
int n,i;

main()
{
printf("Ingrese el numero deseado de la serie:");
scanf("%d", &n);
numero = new long[n+1];
numero[0] = 1;

for (i = 1; i <= n; i++)
{
numero[i] = (numero[i-1]*2*(2*i-1))/(i+1);
}
printf("\nEl numero de Catalan para el numero %d es %d",n,numero[n]);

getchar();
getchar();
getchar();
}


Se tuvieron algunas complicaciones, ya que no se sabian algunas cosas de programacion, pero al fin se pudo, ya que nos apoyamos con uno...

http://es.wikipedia.org/wiki/Cálculo_de_los_números_de_Catalan

Considero, que parte de nuestro trabajo, nos falto un poco de organizacion, ya que conociendonos bien, como buenos estudiantes y mexicanos, lo dejamos todo a ultima hora y como salga, pero no, tenemos de excusa los examenesque le dedicamos horas y horas de estudio.
Pero si acaso lo que podria resaaltar fue la cooperacion de cada uno para que se pudiera realizar.

Y por cierto aqui pongo el link de las diapositivas:

http://rapidshare.com/files/363496541/PROYECTO.pptx1

Paginas hermanas:
http://algoritmoscomputacionalesras.blogspot.com/
http://cris-algoritmoscomputacionalesfime.blogspot.com/

Y ya para finalizar y no quitarles de su valioso tiempo les dejo unos links por si quieren estudiar mas acerca de los numeros de catalan:

http://es.wikipedia.org/wiki/Cálculo_de_los_números_de_Catalan/
http://gaussianos.com/los-numeros-de-catalan/
http://tiopetrus.blogia.com/2004/101101-los-numeros-de-catalan.php

Gracias y saludos...