miércoles, 16 de junio de 2010

PRIMERA TAREA DEL CURSO

Bueno acá les dejo el programa de la primera tarea, el programa solo muestra una ventana que la dividen 2 páneles, el panel superior pintado de gris incluye 5 botones con sus respectivas leyendas, los botones tienen asignado un color distinto cada uno y el botón que está al final es el de salir. Al pulsar cualquier botón(excepto el de salir), el panel inferior cambiará a su respectivo color.

Acá les dejo unas imágenes del programa en ejecución (hagan click en las imagenes para verlas más grandes) :



































Por si quieren probar que el programa funciona acá les dejo el código para que lo puedan copiar:
// librerias usadas en este programa
import javax.swing.JFrame; // ventana
import javax.swing.JPanel; // agrupar y arreglar
import javax.swing.JButton; // boton
import javax.swing.JLabel; // texto no modificable
// clases que permiten acomodar componentes de distintas maneras
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Color;//Libreria para color
// escuchadores y eventos
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
// aqui comienza nuestra clase
public class Practica implements ActionListener {
// todo el codigo va aqui adentro
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();

if (cmd.equals("ROJO")) {// que hacer cuando uno pica al boton Rojo
this.miPanel.setBackground(Color.RED);
return;

}else if(cmd.equals("AZUL")){
this.miPanel.setBackground(Color.BLUE);
return;

}else if(cmd.equals("VERDE")){
this.miPanel.setBackground(Color.GREEN);
return;

}else if(cmd.equals("AMARILLO")){
this.miPanel.setBackground(Color.YELLOW);
return;

}else if (cmd.equals("SALIR")) {
System.exit(1); // salir
}
}
// atributos de la clase Practica
private JPanel miPanel;
private JLabel miTexto;

// constructor de Practica
public Practica(JPanel p, JLabel t) {
this.miPanel = p;
this.miTexto = t;
}

// el metodo principal
public static void main(String[] args) {

// creamos variables dentro del metodo main
JFrame f = new JFrame(); // una ventana nueva

// llamamos los metodos definidos en la libreria
f.setSize(800, 600); // que tan grande
f.setLocation(100, 200); // donde
f.setTitle("Ventana de Triana"); // como se llama

// que pasa cuando lo cierro
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// creamos unos paneles para agrupar elementos
JPanel pARRIBA = new JPanel();//pGridBag=ARRIBA
JPanel pABAJO = new JPanel();//pFlow=ABAJO
JPanel p = new JPanel(); // panel del fondo

// asignar los administradores de acomodo a cada panel
pARRIBA.setLayout(new GridBagLayout());
pABAJO.setLayout(new FlowLayout());
p.setLayout(new GridLayout(2, 2));

// asignar un color de fondo a cada panel para distinguirlos
pARRIBA.setBackground(Color.GRAY);
pABAJO.setBackground(Color.WHITE);
p.setBackground(Color.GRAY);

// manejo del layout gridbag
GridBagConstraints con = new GridBagConstraints();
con.gridx = 1;
con.gridy = 2;
con.gridwidth = 2;
con.gridheight = 3;

JLabel aviso = new JLabel();
JButton rojo = new JButton("Rojo");//Boton"pinta de rojo el panel"
Practica yo = new Practica(pABAJO, aviso);//"Panel que se pintará de rojo"
rojo.addActionListener(yo);
rojo.setActionCommand("ROJO");
pARRIBA.add(rojo, con);

con.gridx = 1;
con.gridy = 5;
con.gridwidth = 2;
con.gridheight = 2;
//---------------------------------------------------------------------
JButton azul = new JButton("Azul");//Boton"pinta de azul el panel"
azul.addActionListener(yo);
azul.setActionCommand("AZUL");
pARRIBA.add(azul, con);

con.gridx = 1;
con.gridy = 8;
con.gridwidth = 2;
con.gridheight = 2;

//----------------------------------------------------------------------

JButton amarillo = new JButton("Amarillo");//Boton"pinta de amarillo el panel"
amarillo.addActionListener(yo);
amarillo.setActionCommand("AMARILLO");
pARRIBA.add(amarillo, con);

con.gridx = 1;
con.gridy = 11;
con.gridwidth = 2;
con.gridheight = 2;
//----------------------------------------------------------------------

JButton verde = new JButton("Verde");//Boton"pinta de Verde el panel"
verde.addActionListener(yo);
verde.setActionCommand("VERDE");
pARRIBA.add(verde, con);

con.gridx = 1;
con.gridy = 14;
con.gridwidth = 2;
con.gridheight = 2;

//----------------------------------------------------------------------
JButton salir = new JButton("Salir");
salir.addActionListener(yo);
salir.setActionCommand("SALIR");
pARRIBA.add(salir, con);

con.gridx = 6;
con.gridy = 7;
con.gridwidth = 1;
con.gridheight = 1;


// poner los paneles auxiliares en el panel del fondo
p.add(pARRIBA);
p.add(pABAJO);

// hacer que este panel sea el contenido de la ventana
f.setContentPane(p);

// hacer que la ventana sea visible
f.setVisible(true);

// salir del programa
return;
} // termina main
} // termina la clase
Practica

martes, 1 de junio de 2010

PUNTOS EXTRA

GRAFO CONEXO.

Un grafo es conexo si y sólo si tiene una única componente conexa.
Un grafo es conexo si existe algún camino entre todo par de vértices.
El siguiente grafo es conexo ya que de cualquier vértice se puede llegar a cualquier otro através de un camino.


Por ejemplo para llegar del vértice u a x, tengo que ir forzosamente por w, luego puedo ir por z, y después directamente a x, pero imagínense que entre "w" y "z" no hay arista, entonces para llegar de u a x, pasaría igual forzosamente por w, luego podría ir a t, luego por w al final a x.











El siguiente grafo no es conexo porque no existe ningún camino entre los vértices a y c.
Aunque como podemos apreciar en la imagen, hay todavía varios vértices que no se unen.





PUNTOS EXTRA

ISOMORFISMO


Dos grafos son isomorfos cuando tienen la misma estrucura, es decir sus vértices están relacionados de igual forma aunque esten dibujados de manera distinta.

Condiciones necesarias para que dos grafos sean isomorfos:

-Deben tener la misma cantidad de vertices.

-Deben tener la misma cantidad de aristas.

-Deben tener los mismos grados de los vértices.

-Deben tener caminos de las mismas longitudes.

-Si uno tiene ciclos, el otro también debe tenerlos.


Analizaremos si los siguientes grafos son isomorfos:
(Para hacer más grande la imagen hacer click sobre ella)













Vemos que ambos tienen 4 vértices y 5 aristas.

Ahora vamos a definir la función biyectiva, haciendo corresponder los vértices con iguales grados:

f(A)=Y;

f(B)=Z;

f(C)=X;

f(D)=W;

Ahora la definición dice que si entre 2 vértices del primer grafo hay una arista,también debe haber arista entre los vértices del segundo grafo.

Por ejemplo vemos en la imagen anterior que en el G1(grafo 1) entre A y B hay una arista, y también hay una arista entre f(A) y f(B) en el G2(grafo 2).

Esto mismo habría que revisar para cada arista, ordenando convenientemente los vértices.

En la siguiente tabla se observa la cantidad de aristas que unen a cada par de vértices:
(Para ver más grande la imagne hacer click sobre ella)












Por ejemplo nosotros pusimos como función biyectiva f(A)=Y y f(B)=Z, y vemos que del vértice A al vértice B hay una arista, esto en el grafo 1; en el grafo 2 vemos que concuerda con su biyectiva porque del vértice Y al vértice Z también hay una arista.

Como las tablas con sus respectivos valores tienen las mismas cantidades de aristas, podemos asegurar que G1 es isomorfo a G2.