jueves, 4 de octubre de 2012

Listas enlasadas

Buenas como estan soy narurasengan y hoy les traigo listas enlasadas, para explicarlo de forma general imaginemos un archivero, o una caja con documentos, en este archivero tenemos lo que son folders de informacion en donde se guardan los trabajos o documentos que queremos almacenar tales como tareas de matematicas o fisica etc. cada folder existen documentos que contienen informacion o imagenes de lo que decidimos guardar. y todos estos datos nos dicen algo respecto a un unico sujeto es decir que es el forder de un unico cliente.

 En forma teorica en si que es una lista enlasada pues es un conjunto de objetos que se relacionan en forma de lista, dichos objetos pueden ser de cualquier tipo, en este caso se usan nodos pues los nodos son los que contienen informacion imagenes numeros lo que se quiera guardar en ellos.

El archivero seria nuestra lista, pues en ella se almacenara todos los folders de informacion es decir los nodos con la informacion que necesitamos almacenar y los documentos que se almacenan en el folder son los atrubutos que deceamos guardar es decir la informacion que nos piden que guardemos como nombre de usuario, edad, fotografias, etc.
 
Para crear una lista enlasada se necesitan dos cosas, una clase nodo y otra una clase lista, y otra clase es la que ingresa y modifica la informacion de esta empecemos con la clase Nodo

package listasenlasadas;


/**
 * @author jaac747
 */

public class Nodo {

    /*
     *Creo una variable nodo la cual va a contener una referencia o un apuntador
     * es decir con siguiente paso al siguiente nodo de la lista este es el que
     * enlasa los datos de la lista
     */

    private Nodo siguiente;

    /*
     * estas bariables son las de un usuario podemos colocar mas variables o menos
     * es decir que el nodo contendra esta informacion del usuario en un unico nodo
     * 
     */

    private String nombre;
    private String apellido;
    private int telefono;
    
    /*
     * metodo constructor vacio
     */

    public Nodo(){
    
    }

    /*
     * metodo constructor que recibe la informacion del usuario
     */

    public Nodo(String nombre,String apellido,int telefono){
        this.nombre=nombre;
        this.apellido=apellido;
        this.telefono=telefono;
    }

    /**
     * @return the siguiente
     */
    public Nodo getSiguiente() {
        return siguiente;
    }

    /**
     * @param siguiente the siguiente to set
     */
    public void setSiguiente(Nodo siguiente) {
        this.siguiente = siguiente;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the apellido
     */
    public String getApellido() {
        return apellido;
    }

    /**
     * @param apellido the apellido to set
     */
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    /**
     * @return the telefono
     */
    public int getTelefono() {
        return telefono;
    }

    /**
     * @param telefono the telefono to set
     */
    public void setTelefono(int telefono) {
        this.telefono = telefono;
    }
}
Luego de esto tenemos la clase lista que contiene la lista de objetos o de nodos
package listasenlasadas;

/**
 *
 * @author jaac747
 */
public class Lista {
    /*
     * nodo raiz es una referencia a el principio de la lista de los nodos
     */

    private Nodo raiz;
    /*
     * el metodo insertar como su nombre lo indica sirve para insertar en la lista de nodos
     * a un nodo nuevo
     */
    public void insertar(String nombre, String apellido, int telefono) {
        //se crea un nuevo nodo con la informacion
        Nodo nuevo = new Nodo(nombre, apellido, telefono);
        System.out.println(nombre+" "+apellido+" "+telefono);
        //se verifica si el principio de la lista esta vacia si si se el asigna 
        //el nuevo nodo al principio
        if (raiz == null) {
            raiz = nuevo;

        } else {
            //de lo contrario se recorre la lista de nodos asta encontrar el que este 
            //vacio y se inserta el nuevo nodo en esta
            Nodo puntero = raiz;
            while (puntero.getSiguiente() != null) {
                puntero = puntero.getSiguiente();
            }
            puntero.setSiguiente(nuevo);
        }
    }
    /*
     *el metodo modificar modifica un nodo se busca el nodo que se quiere 
     * modificar en este caso la busqueda es por nombre pero es mas recomendable
     * hacerlo por id o carnet o cedula algo que sea unico del usuario y del nodo 
     * para que aya repeticiones
     */
    public void modificar(String nombre, String apellido, int telefono) {
        Nodo puntero = raiz;
        //recorre la lista asta que encuentra el nombre y luego lo modifica
        while (puntero.getNombre().equals(nombre) == false) {
            puntero = puntero.getSiguiente();
        }
        puntero.setNombre(nombre);
        puntero.setApellido(apellido);
        puntero.setTelefono(telefono);
    }
    /*
     *este metodo elimina toda la lista de nodos
     */
    public void eliminar() {
        raiz = null;
    }
}

y por ultimo el metodo principal main que es el que agrega cambia y elimina todo
package listasenlasadas;

/**
 *
 * @author jaac747
 */
public class Listasenlasadas {

    public static void main(String[] args) {
        // TODO code application logic here
        Lista nueva=new Lista();
        nueva.insertar("josue", "hernandes", 58624315);
        nueva.insertar("erick", "cortez", 45862319);
        nueva.modificar("josue", "arenales", 58624315);
        nueva.eliminar();
    }
}
Bueno eso es todo por ahora me falto lo que es eliminar un solo nodo pero eso lo are otro dia no es muy dificil solo se modifica siguiente

miércoles, 19 de septiembre de 2012

agregar un arreglo de labels

Lastimosamente para netbeans no hay un metodo que solo indicar el tamaño del arreglo y ya esta, hay que hacerlo a mano, en este caso cree una clase jframe y a este le añadi un jpanel   y en este es el que le aplico el codigo.


package agregarlabels;

import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.border.Border;

/**
 *
 * @author jaac747
 */
public class pantalla extends javax.swing.JFrame {

    /**
     * Creates new form pantalla
     */
    public pantalla() {
        initComponents();
        inicio();
        this.setSize(400, 425);
    }
     
    private void inicio(){
        JLabel[] tablero;
        jPanel1.setSize(340, 340);
        int datox=15;//el total de piesas horizontalmente
        int datoy=datox;//para que sea una matriz cuadrada se iguala 
        int aux=datox*datoy;//el total de labels en la matriz
        tablero=new JLabel[aux];//se crea el arreglo de labels segun el tamaño total
        int espacio=5;//se crea un espacio que sera el que estara entre los datos
        //se obtiene el tamaño en x de los labels segun la cantidad de estos
        int tamanox=(jPanel1.getWidth()-(espacio*(datox+1)))/datox;
        System.out.println(tamanox);
        //se obtiene el tamaño en y de los labels segun la cantidad de estos
        int tamanoy=(jPanel1.getHeight()-(espacio*(datoy+1)))/datoy;
        System.out.println(tamanoy);
        
        int total=0;// se crea una bariable para recorrer el arreglo de labels
        int posiciony=0;//variable que sirve para ver la posicion en y de
for(int y=0;y<datoy;y++){
            //se le da una pocicion en y 
            posiciony=(y*(tamanoy+espacio)+espacio);
            for(int x=0;x<datox;x++){
                //System.out.println(total);
                tablero[total]=new JLabel("1");// se crea el objeto jlabel
                tablero[total].setBackground(Color.red);
                //se le da un borde
                tablero[total].setBorder(BorderFactory.createLineBorder(Color.black));
                //se le da una pocicion en x 
                int posicionx=((x+1)*espacio+(x*tamanox));
                System.out.println(posicionx);
                //se le da una posicion en x & y & se le da un tamaño en x & y 
                tablero[total].setBounds(posicionx,posiciony, tamanox, tamanoy);
                // se añade el label a un panel
                jPanel1.add(tablero[total]);
                //se le da que el label es visible
                tablero[total].setVisible(true);
                total++;
                //System.out.println((espacio+x*tamanox));
            }
        }
    }

sábado, 1 de septiembre de 2012

cambio de varios jpanel's en unico jframe

Una obcion util al momento de realizar programas es el cambio de paneles en una misma ventana con el click de un boton  o la seleccion de un menu, puesto que nos separa las diferentes secciones de codigo segun lo necesitemos

primero se añade un jpanel dentro de la ventana  y se le da el tamaño deceado, el panel es la parte seleccionada en el cuadro rojo

 luego se le da click derecho y se va a set Layout(1) que es un tipo de ordenamiento y se selecciona el ordenamiento card layout(2)

se crea los paneles como clases de jpanel que seran los que utilizaremos con cada obcion en este caso tenemos ingresos(1) y modificar(2)

en el jframe se añade este codigo que es el que ara el cambio de paneles, asi tendria que quedar la clase pantalla

package cambioventana;

import java.awt.CardLayout;

/**
 *
 * @author jaac747
 */
public class pantalla extends javax.swing.JFrame {

    /**
     * Creates new form pantalla
     */
    
    private CardLayout paletas;//esta es una obcion que nos permite hacer el cambio de panels en la misma ventana
    private ingreso ingresos=new ingreso();// jpanel que contiene ingresos
    private modificar modifica= new modificar();//jpanel que contiene modificar
    boolean cambios=true;
    public pantalla() {
        initComponents();
        
        //se añade este codigo

        jPanel1.setLocation(WIDTH, WIDTH);// le digo que tenga una localizacion dentreo de la ventana
        jPanel1.add(ingresos,"menu1"); //le indico que ingresos tendra de sobrenombre menu1 y que pertenece a jpanel de ventana
        jPanel1.add(modifica,"menu2");//le indico que modifica tendra el sobrenombre de menu2 y que pertenece a jpanel de ventana

        paletas = (CardLayout)jPanel1.getLayout(); //le agrego la obcion a paletas para que aga el cambio
        paletas.show(jPanel1, "menu1");// le indico que jpanel tendra el cambio y cual panel mostrara
    }
    
    /**
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
   
    /**
     * esto es para que al precionar el boton aga el cambio
     */
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
            if(cambios==true){// comprueva que panel esta como son dos se usa true o false
                paletas.show(jPanel1, "menu2");// hace cambio entre el panel uno  al 2
                cambios= false;
            }else{
                paletas.show(jPanel1, "menu1");// hace cambio entre el panel 2 al 1 
                cambios= true;
            }
    }

    /**
     * @param args the command line arguments
     */

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration
}

viernes, 31 de agosto de 2012

Nuevo proyecto en netbeans y ventana GUI

Para iniciar un nuevo proyecto en netbeans primero iniciamos la aplicacion, si es la primera ves que se utiliza netbeans aparecera en blanco sin ningun proyecto por seleccionar y seguir trabajando en el. se da click en el boton de crear nuevo proyecto:
Se escoje la categoria de java, y se escoje el tipo de proyecto en este caso una aplicacion de escritorio ("java Aplication"), y se le da next
se pone el nombre del proyecto que represente lo que vamos a trabajar, y se da finalizar
y se creo nuestro primer proyecto:
INSERTAR UNA INTERFAS GRAFICA EN NUESTRO PROYECTO

 Primero no situamos en la parte izquierda y le damos click DERECHO en el paquete de nuestro proyecto en este caso es la cajita amarilla partida en 4 se selecciona nuevo(1) y se escoje JFrame(2)
se pone el nombre de la ventana y se le da finalizar
se crea la interface grafica y se agrega a nuestro proyecto (1)
(2) es el area de trabajo de la ventana
(3) son los componentes que podemos agregar a la ventana solo se arrastra el componente que queremos agregar al area de trabajo y se agrega
 para programar esta ventana y hacer que los botones y demas tengan obciones se da en source
 y nos muestra el codigo de trabajo de la ventana , hay lo podemos modificar y agregar mas codigo

lunes, 13 de agosto de 2012

Pasar de Decimal a Binario

Este es un tema que me preguntaron, pues lo que se hace para pasar cualquier entero decimal a binario es dividirlo entre 2 y lo que se toma es el residuo para ir lo agregando al final, y la división final es la que va al principio es decir por ejemplo cuando dividimos 5 /2 nos da residuo 1 y resultado 2 este lo volvemos a dividir entre 2 y nos queda residuo 0 y resultado 1 luego se pone al revés para que quede 1(resultado final) 01(residuos acumulados)


package decimal.a.binario;

/**
 *
 * @author jaac747
 */
public class DecimalABinario {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        String binario="";
        int entero=15;// numero a pasar a binario
        binario=pasar(entero); //string que recibe el binario
        System.out.println(binario);//imprime el resultado
    }
    public static String pasar(int dato){
//metodo para pasar enteros a binario
        String resultado="";
        while(dato>=2){
//si es mayor o igual que 2 entra en el ciclo, de lo contrario no pues 1 =1 en binario
            resultado=dato%2 + resultado;
// se concatena los numeros binarios
            dato=dato/2;
        }
        resultado= dato+resultado;//se agrega el ultimo digito; 

        return resultado;
    }
}

martes, 31 de julio de 2012

Plataforma IDE

Bueno pues como no se como empezar iniciare con esto, lo primero que se ase cuando se empieza a programar es escoger el tipo de plataforma ideal para nuestro lenguaje de programación, en un principio esto es para java pues es el lenguaje que se ve en el primer curso de programación, yo en lo personal e probado 3 plataformas IDE  sin mencionar a la consola de windows o linux dependiendo de su sistema operativo, estos son: JCreator IDE,  Eclipse IDE, Netbeans(Eclipse y netbeans los e probado en linux y windows, Jcreator solo en windows, por cuestiones de preferencias)

JCreator no es un mal editor lo que tiene es que te hace aprenderte el código de memoria y esto es útil, pero al mismo tiempo es una desventaja pues cuando se tiene proyectos y tareas, lo principal es ahorrar tiempo de programación e identificar los diferentes errores ortográficos que se tengan.

Eclipse es otro editor de programas, es muy bueno y este te ayuda a completar secciones de codigo, y a pesar de que tiene interfas grafica no me a gustado pues es un tanto dificil de usar, para el programador novato que decea aprender a programar desde cero es ideal pues no se esta con las molestias de que no se recuerda una palabra en especifico, y permite comprender las pociciones de los objetos que se esten programando.

Netbeans es otro excelente editor de programas, este es mas gráfico ya que se centra en ahorro de tiempo y completar el código, este no llama librerías enteras dentro del programa sino agrega solo secciones de código importando solo en este segmento de código lo que se necesita para la ejecución, este te ahorra tiempo con sus diferentes comandos.

En si los tres son buenos pero todo es cuestion de la habilidad del programador y la costumbre pues se debe acostumbra a este para poder sacarle el mayor provecho posible de este.

Bueno esto es todo por ahora, despues miraremos un poco de codigo.
Saludos

"Un viaje de mil kilómetros se inicia con un paso"

lunes, 30 de julio de 2012

Inicio

Bueno como me sugirieron crear un blog de programacion para ayudar al publico en general, y para que se me quedaran los conceptos de las diferentes cosas que e aprendido y aprendere estare realizando las diferentes tareas de subir algunas de las cosas que e realizado con el tiempo y realizare, espero que se entienda y pues estamos para cervir.