Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia
Mostrando entradas con la etiqueta Ejercicios resueltos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ejercicios resueltos. Mostrar todas las entradas

26/10/12

Problema Resuelto: Sumar columna de numeros

JAN29

Problema: El problema dice así, "Quiero sumar los números de una columna, los valores de las celdas se pueden modificar diatónicamente". Es todo o.O

Respuesta:

Para resolver este problema partimos de una interfaz básica, utilizamos el IDE Netbeans 6.9

Solo sumaremos números enteros. Para saber si se realizo o no algún cambio sobre el JTable debemos hacer uso de un listener, más propiamente de un TableModelListener,
Nuestro ejemplo estará compuesto de una columna de productos STRING y otra de cantidades INT
esta segunda columna es la que sumaremos. Cuando se cambie el valor de cualquier celda de la segunda columna, se hará uso de un método privado para recalcular el total, si por error se introduce un valor NO NUMÉRICO,  el valor, cualquiera que fuere sera reemplazado por un cero "0".

El código es:

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class interfaz extends javax.swing.JFrame {

    //se inicia la tabla con algunos datos
    DefaultTableModel model = new DefaultTableModel(
           new Object[][] {
                { "Harina", "10" },
                { "Huevos", "21" },
                { "Chorizo", "53" },
                { "Leche", "4" },
                { "Pan", "34" },
                { "Mantequilla", "12" },
                },
      new Object[] { "Producto", "Cantidad" });

    /** Creates new form interfaz */
    public interfaz() {
        initComponents();

    suma();//primera suma del total 
    this.jTable1.setModel( model );
    //se añade a la tabla un Listener
    this.jTable1.getModel().addTableModelListener(new TableModelListener() {
      //cuando se produzca un cambio se ejecuta el codigo que coloquemos aqui dentro
      public void tableChanged(TableModelEvent e) {
          //sabemos que nuestros numeros se encuentra en la segunda columna iniciando de 0
          if( e.getColumn()==1 )//cuando se modifique un valor de la columna
              suma();//se ajusta el resultado
      }
    });
    }

    /** Metodo privado para la suma de cantidades */
    private void suma()
    {
        int total = 0;
        //recorrer todas las filas de la segunda columna y va sumando las cantidades
        for( int i=0 ; i<model.getRowCount() ; i++)
        {
            int numero =0;
            try{
                //capturamos valor de celda
                numero = Integer.valueOf( model.getValueAt(i, 1).toString() );
            }
            catch (NumberFormatException nfe){ //si existe un error se coloca 0 a la celda
                numero = 0;
                model.setValueAt(0, i, 1);
            }
            //se suma al total
            total += numero;
        }
        //muestra en el componente
        this.jTextField1.setText( String.valueOf(total) );
    }

Cuando ejecutemos tendremos como resultado:

Bájate el código AQUI

continue reading

12/5/12

Cargar datos a un JTree desde una base de datos

JAN29

Problema: Se necesita cargar los datos de una base de datos hacia un JTree, la base de datos es de un país que tiene departamentos y los departamentos tienen provincias y las provincias, municipios, al hacer clic en un nodo, debe desplegar sus nodos hijos. Al realizar clic en un nodo, se debe desarrollar una acción.

Base de datos:
-- 
-- Base de datos: 'dbbolivia'
-- 
-- 
-- Estructura de tabla para la tabla 'departamento'
-- 
CREATE TABLE departamento (
  dep_id int(2) NOT NULL,
  dep_nombre varchar(32) NOT NULL,
  PRIMARY KEY  (dep_id)
);
-- 
-- Estructura de tabla para la tabla 'provincia'
-- 
CREATE TABLE provincia (
  prov_id int(2) NOT NULL auto_increment,
  prov_nombre varchar(32) NOT NULL,
  dep_id varchar(32) NOT NULL,
  PRIMARY KEY  (prov_id)
);
-- 
-- Estructura de tabla para la tabla 'municipio'
-- 
CREATE TABLE municipio (
  mun_id int(2) NOT NULL auto_increment,
  mun_nombre varchar(32) NOT NULL,
  prov_id int(2) NOT NULL,
  PRIMARY KEY  (mun_id)
);
Solución.
¿Qué necesitamos?

  • Netbeans
  • Servidor MySQL

Crear la base de datos y agregar algunos datos

1. Crear una proyecto netbeans, agregar un JFrame (interfaz.java) y agregar los siguientes controles:
2. Agregar también una clase (nombre:database.java) para inter actuar con la base de datos MySQL. el código de la clase es:
import java.sql.*;
/**
 * @web http://www.jc-mouse.net
 * @author Mouse
 */
public class database {
  /* DATOS PARA LA CONEXION */
  private String bd = "dbbolivia";
  private String login = "";//USUARIO
  private String password = "";//CONTRASEÑA
  private String url = "jdbc:mysql://localhost/"+bd;
  private Connection conn = null;
//___________________________________________________________________________________ Soy una barra separadora :)
   public database(){
      try{
         //obtenemos el driver de para mysql
         Class.forName("com.mysql.jdbc.Driver");
         //obtenemos la conexión
         conn = DriverManager.getConnection(url,login,password);
         if (conn!=null){
            System.out.println("OK base de datos "+bd+" listo");
         }
      }catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }
    }
//___________________________________________________________________________________ Soy una barra separadora :)
    public Connection getConnection()
    {
        return this.conn;
    }
//___________________________________________________________________________________ Soy una barra separadora :)
/* METODO PARA REALIZAR UNA CONSULTA A LA BASE DE DATOS
 * INPUT:
 *      table => nombre de la tabla donde se realizara la consulta, puede utilizarse tambien INNER JOIN
 *      fields => String con los nombres de los campos a devolver Ej.: campo1,campo2campo_n
 *      where => condicion para la consulta
 * OUTPUT: un object[][] con los datos resultantes, sino retorna NULL
 */
    public Object [][] select(String table, String fields, String where){
      int registros = 0;
      String colname[] = fields.split(",");

      //Consultas SQL
      String q ="SELECT " + fields + " FROM " + table;
      String q2 = "SELECT count(*) as total FROM " + table;
      if(where!=null)
      {
          q+= " WHERE " + where;
          q2+= " WHERE " + where;
      }
      //obtenemos la cantidad de registros existentes en la tabla
      try{
         PreparedStatement pstm = conn.prepareStatement(q2);
         ResultSet res = pstm.executeQuery();
         res.next();
         registros = res.getInt("total");
         res.close();
      }catch(SQLException e){
         System.out.println(e);
      }
    //se crea una matriz con tantas filas y columnas que necesite
    Object[][] data = new String[registros][fields.split(",").length];
    //realizamos la consulta sql y llenamos los datos en la matriz "Object"
      try{
         PreparedStatement pstm = conn.prepareStatement(q);
         ResultSet res = pstm.executeQuery();
         int i = 0;
         while(res.next()){
            for(int j=0; j<=fields.split(",").length-1;j++){
                data[i][j] = res.getString( colname[j].trim() );
            }
            i++;         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return data;
 }
//___________________________________________________________________________________ Soy una barra separadora :)
}
Esta clase se conecta a la base de datos, también cuenta con una clase para realizar una consulta
3. Clase interfaz.java
- Las librerias que se utilizan son:
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
- Crear una instancia a la clase database.java:
private database db = new database();
- Implementar la clase database, así como el código para llenar el JTree en el constructor de la clase interfaz.java:

public interfaz() {
        initComponents();
        this.setTitle("JTree - http://www.jc-mouse.net/");

     //se crea la raiz
     DefaultMutableTreeNode pais = new DefaultMutableTreeNode("Bolivia");
     DefaultMutableTreeNode departamento;
     DefaultMutableTreeNode provincia;
     DefaultMutableTreeNode municipio;     

     //se obtienen los departamentos
     Object[][] data_dep =  db.select("departamento", " dep_id, dep_nombre", null);
     if( data_dep.length > 0)
     {
        for(int i=0; i < data_dep.length; i++)
        {
            //se crea hojas departamentos
            departamento = new DefaultMutableTreeNode(data_dep[i][1]);
            pais.add(departamento);
            //se obtiene las provincias
            Object[][] data_prov =  db.select("provincia", "prov_id,prov_nombre" , " dep_id='" + data_dep[i][0].toString()+"' ");
            if( data_prov.length > 0)
            {
                for(int j=0; j< data_prov.length; j++)
                {
                    provincia = new DefaultMutableTreeNode(data_prov[j][1]);
                    departamento.add(provincia);
                    //se obtienen los municipios
                    Object[][] data_mun =  db.select("municipio", "mun_id,mun_nombre" , " prov_id='" + data_dep[j][0].toString()+"' ");
                    if( data_mun.length > 0)
                    {
                        for(int k=0; k< data_mun.length; k++)
                        {
                            municipio = new DefaultMutableTreeNode(data_mun[k][1]);
                            provincia.add(municipio);
                        }
                    }
                }
            }
        }
     }

    
    DefaultTreeModel modelo = new DefaultTreeModel(pais);
    this.jTree1.setModel(modelo);

    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {

        public void valueChanged(TreeSelectionEvent e) {
            // Se obtiene el Path seleccionado
            TreePath path = e.getPath();
     Object [] nodos = path.getPath();
            String txt= jTextArea1.getText() + "Path seleccionado: ";
            for (Object nodo: nodos)
                txt+=nodo.toString() + " | ";                
            txt+="\n";            
     // Se obtiene el Nodo seleccionado
            DefaultMutableTreeNode NodoSeleccionado = (DefaultMutableTreeNode)nodos[nodos.length-1];            
            txt+="-> Accion para Nodo Seleccionado [" + NodoSeleccionado.getUserObject().toString() + "]";
            txt+="\n";
     jTextArea1.setText(txt);
  }            
    });

    }

- Explicación: Se crea la raíz país (Bolivia), después se extrae los registros de la tabla departamentos y se añade a la raíz país, se extrae los registros provincias y se añade a su raíz departamento, se repite el proceso para municipios.

- Ejecutar

Descargar proyecto HERE

continue reading

10/4/11

Ejercicio Resuelto: Clase Fecha

JAN29

El problema dice asi: 

"Crear la clase Fecha que tenga como atributos día, mes y año, en el constructor se debe validar que la fecha ingresada sea la correcta. Si la fecha ingresada es incorrecta colocar datos de tal manera que sea correcta. Además crear los métodos diaSiguiente, de tal manera que nos devuelva la fecha del día siguiente y diaAnterior que nos devuelva la fecha del día anterior."

¿Que tenemos que hacer?
  • Validar que la fecha sea la correcta
  • Crear el método diaSiguiente
  • Crear el método diaAnterior
Coloquemos algunas reglas:
  • El formato de entrada de la fecha sera "dd/mm/yyyy"
  • Solo se permiten fechas entre 1900 y 2100 ¿porque? porque no :)
  • Si la fecha que se introduce es incorrecta o no se encuentra entre el rango establecido, devolvera "25/10/2010" el dia que nacio mi perro, coloco esta fecha porque el problema no indica que tratamiento darle a una fecha erronea.
La clase se llamara jcFecha


import java.util.regex.Pattern;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class jcFecha {
    private int dia=25;
    private int mes=10;
    private int anio=2005;

    //formato fecha dd/mm/yyyy
    public jcFecha(String f){
        validarfecha(f);
    }

    //hace lo que su nombre dice que hace :?
    private void validarfecha(String f){
        boolean ok=false;
        //valida formato        
        if(Pattern.matches("\\d{1,2}/\\d{1,2}/\\d{1,4}", f)){
            //divide la fecha en dia, mes,año
            String[] ff = f.split("/");
            //valida año -> solo años entre 1900 y 2100
            anio = Integer.parseInt(ff[2]);
            if(anio>=1900 && anio<=2100){
                //valida mes -> 1 a 12
                mes = Integer.parseInt(ff[1]);
                if(mes>=1 && mes<=12){
                    //valida dia entre 1 y la cantidad de dias que tenga ese mes (incluido año bisiesto )
                    dia = Integer.parseInt(ff[0]);
                    if(dia>=1 && dia<=cantidad_dias(mes,anio)){
                        ok=true;
                    }
                }
            }
        }
        //si fecha no es valida o no cumple con las reglas anteriores
        //la fecha devolvera 25/10/2005 EL CUMPLE DE MI PERRO :)
        if(!ok){
            dia=25;
            mes=10;
            anio=2005;
        }       
    }

    public int getDia(){
        return this.dia;
    }

    public int getMes(){
        return this.mes;
    }

    public int getAnio(){
        return this.anio;
    }

    public String getFecha(){
        return  dia + "/" + mes + "/" + anio;
    }

    //metodo publico que devuelve la fecha + un dia
    public String diaSiguiente(){
        //si dias se encuentra entre el rango (1  - dia - (ultimo_dia-1)) se añade un dia
        //mes y anio se dejan como esta
        if(dia < cantidad_dias(mes,anio)){
            dia++;
        }else{//sino se debe añadir +1 al mes
            //si no es diciembre se añade +1 al mes, anio se deja como esta
            if(mes < 12){
                mes++;
                dia=1;
            }else{//si es diciembre, se pasa al año siguiente
                anio++;
                mes=1;
                dia=1;
            }
        }
        return dia + "/" + mes + "/" + anio;
    }

    /* devuelve la cantidad de dias de un mes  dado mes y año */
    private int cantidad_dias(int m, int y){
        int d =0;
        switch(m) {
            case 1: case 3: case 5: case 7: case 10: case 12: case 8:
              d=31; break;
        case 2:
            if ((y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0)))
                d=29;
            else
                d=28;
            break;
        case 4: case 6: case 9: case 11:
               d=30; break;
        }
        return d;
    }

}

Y ahora debemos probar nuestra clase jcFecha:


public class Main {       
    public static void main(String[] args) {
        //se crea el objeto jcFecha
        jcFecha jc = new jcFecha("12/12/2001");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //fecha correcta
        jc = new jcFecha("30/11/2011");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //Fecha correcta -> año bisiesto
        jc = new jcFecha("28/2/2000");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //Fecha correcta -> Año no bisiesto
        jc = new jcFecha("28/2/2002");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //fecha incorrecta
        jc = new jcFecha("01/aa/2011");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //fecha incorrecta
        jc = new jcFecha("01/10/11");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //Fecha correcta -> fecha fuera de rango
        jc = new jcFecha("10/5/1789");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
    }
}


Resultado en consola
Y ahora se preguntaran y donde #@Mmrrr esta el metodo DiaAnterior?????, pues no voy a hacer toda su tarea :) , solo tienen que modificar un poco el metodo diaSiguiente y listo

continue reading

4/2/10

Ejercicio Resuelto: Diagrama E-R "Universidad"

JAN29

Se desea simular el comportamiento de una universidad cualquiera, atendiendo a la siguiente especificación.

Cada alumno se matricula de una serie de asignaturas en las que obtendrá una calificación. Un alumno puede matricularse de la misma asignatura varias veces y de una asignatura pueden matricularse muchos alumnos.

Cada asignatura es impartida por un único profesor y un profesor puede dar clase de muchas asignaturas. Cada profesor pertenece a un departamento.

De los alumnos almacenaremos la cedula de identidad (CI), nombre, primer apellido, segundo apellido, calle, ciudad, provincia, teléfono, fecha de nacimiento y estado civil. El estado civil de un alumno puede ser el siguiente: S:Soltero C:Casado V:Viudo P:Separado D:Divorciado.

De las asignaturas se guarda el código, nombre completo, número de créditos y un campo de observaciones.

De cada profesor tenemos información del CI, titulación que posee, nombre y primer apellido.

De los departamentos se tiene como datos su código y nombre.

ALUMNO(CI, Nombre, ApPaterno, ApMaterno, Fono, Calle, Ciudad, Provincia, FNac, EC)
ASIGNATURA(Codigo, Nombre, Creditos, CI_Prof, Observaciones)
MATRICULA(CI, Cod_Asig, Fecha, Nota)
DEPARTAMENTO(Codigo, Nombre)
PROFESOR(CI, Nombre, ApPaterno, Titulo, Cod_Dep)

continue reading

6/12/09

Ejercicio resuelto: Palindromo en java

JAN29

Escribe una clase en java para determinar si una palabra o frase es palindroma.


Respuesta:
Un palíndromo es una palabra, número o frase que se lee igual hacia adelante que hacia atrás. Habitualmente, las frases palindrómicas se resienten en su significado cuanto más largas son.

El clasico ejemplo es: anita lava la tina

Nuestra clase se llama "palindromo.java", recibe como parametro una cadena, si esta cadena tiene espacios en blanco los elimina, despues realiza una comparacion caracter por caracter determinando si corresponde a un palindromo o no, devuelve TRUE si es un palindromo, FALSE caso contrario.

/**
 * @web http://jc-mouse.blogspot.com
 * @author mouse
 */
public class palindromo {

public boolean espalindromo(String cadena){
    boolean valor=true;
    int i,ind;    
    String cadena2="";
    //quitamos los espacios
    for (int x=0; x < cadena.length(); x++) {
        if (cadena.charAt(x) != ' ')
            cadena2 += cadena.charAt(x);
    }
    //volvemos a asignar variables
    cadena=cadena2;    
    ind=cadena.length();
    //comparamos cadenas
    for (i= 0 ;i < (cadena.length()); i++){        
       if (cadena.substring(i, i+1).equals(cadena.substring(ind - 1, ind)) == false ) {
           //si una sola letra no corresponde no es un palindromo por tanto
           //sale del ciclo con valor false
            valor=false;
            break;
       }
       ind--;
    }
    return valor;
}
}

Nuestro main:


/**
 * @web http://jc-mouse.blogspot.com
 * @author mouse
 */
public class Main {
    
    public static void main(String[] args) {              
        palindromo objclass=new palindromo();
        if(objclass.espalindromo("la ruta nos aporto otro paso natural")){
            System.out.println("Palindromo");
        }
        else
        {
            System.out.println("No Palindromo");
        }
    }    
}

Frases palindromos para que pruebes

"adivina ya te opina ya ni miles origina ya ni cetro me domina ya ni monarcas a repaso ni mulato carreta acaso nicotina ya ni cita vecino anima cocina pedazo gallina cedazo terso nos retoza de canilla goza de panico camina onice vaticina ya ni tocino saca a terracota luminosa pera sacra nomina y animo de mortecina ya ni giros elimina ya ni poeta ya ni vida" (de Ricardo Ochoa)


"no di mi decoro cedi mi don" (de Juan Filloy)

"nada yo soy adan" (de Guillermo Cabrera Infante)

"atale demoniaco cain o me delata" (de Julio Cortazar)

"alli por la tropa portado traido a ese paraje de maniobras una tipa como capitan usar boina me dejara pese a odiar toda tropa por tal ropilla" (de Luis Torrent)

continue reading

3/12/09

Ejercicio resuelto: leer, validar y contar dias con clase fecha en java

JAN29

Implemantar una clase para que lea una fecha con el formato "dd/MM/yyyy" y valide que sea una fecha correcta, tambien la fecha debe ser mayor al 01/01/1900, la clase debe devolver el numero de dias transcurridos desde el primer Grito Libertario de America.

Respuesta:
Diseñamos nuestra clase que llamamos cfecha.java, para realizar operaciones con fechas en java se hara uso de las librerias java.text.SimpleDateFormat y java.util, ademas para controlar las excepciones que puedan ocurrir se hace uso de java.text.ParseException.

El constructor de la clase cfecha, se inicializa con la fecha actual del sistema con su respectivo formato, ademas la clase cuenta con los metodos getFecha() y setFecha(d,m,y), un metodo privado para validar la fecha introducida y otro metodo para contar ls dias, cuando se introduce una fecha, se devuelve un valor booleano TRUE si la fecha es valida y False si la fecha no lo es.


package fecha;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/** 
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class cfecha {
    private String mifecha;
    private String fechaini = "25/05/1809";
    private int dia= 1;
    private int mes = 1;
    private int anio =1900;

public cfecha(){
   SimpleDateFormat formateador = new SimpleDateFormat(
  "dd/MM/yyyy", new Locale("es_ES"));
   Date fechaDate = new Date();
   mifecha = formateador.format(fechaDate);   
}

public String getFecha(){
    return mifecha;
}

public boolean setFecha(int d, int m, int y){          
    boolean esfecha =true;
    if (ValidaFecha(mifecha)){  
        if ((d >= dia)&& (m >= mes)&& (y >= anio))
        {
           mifecha= d + "/" + m + "/" + y;
           esfecha=true;
        }  
        else
        {
            esfecha=false;
        }
    }
    else
    {
        esfecha=false;
    }        
    return esfecha;
}
/**
 Valida una fecha si el formato de entrada es igual a dia/mes/año
 */   
private boolean ValidaFecha(String f) {
    try {
        //ayuda a mostrar la fecha respecto a un formato dado
        //en este caso dia/mes/año
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault());    
        //desabilita el modo permisivo osea que si es introduce una fecha invalida la ignorara
        // y no la convertira a una fecha equivalente valida
        formatoFecha.setLenient(false);
        //Convierte la cadena introducida en una fecha
        formatoFecha.parse(f);
    } catch (ParseException e) {
        // si se produce un error en la conversion devuelve false= fecha no valida
            return false;
        }    
    return true;
} 

/*
 Devuelve el numero de dias transcurridos desde una fecha inicial dada como constante
 * si la fecha introducida es menor a esa fecha, devuelve cero
 */
public int DiasTranscurridos(){
        try {                   
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
            Date f1 = formatoFecha.parse(fechaini);
            Date f2 = formatoFecha.parse(mifecha);                   
            if (f1.before(f2)) {                
               long f3 = f1.getTime();
               long f4 = f2.getTime();
               long resta = f4-f3;
               double dias = Math.floor(resta/(1000 * 60 * 60 * 24));
               return (int) dias;
            } else {
                return 0;
            }
        } catch (ParseException ex) {
            return 0;
        }    
}        
}


Para implementar la clase cfecha.java .


package fecha;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author mouse
 */
public class Main {
    
    public static void main(String[] args) {
        cfecha f = new cfecha();  
        if (f.setFecha(1, 14,1800)){
        System.out.println("Fecha introducida: " + f.getFecha());
        System.out.println(f.DiasTranscurridos() + " dias trasncurridos");      
        }
        else
        {
            System.out.println("No es un fecha valida");          
        }
        
    }
}
 

continue reading

2/12/09

Ejericicio resuelto: Suma y Producto de matrices en java

JAN29

Desarrolle un programa orientado a objetos para realizar la suma y multiplicacion de matrices.

Suma de matrices

Producto de matrices
Respuesta: Primero creamos la clase "matriz.java" que nos permite el manejo de los metodos asi como la creacion de nuestra matriz, ya que el problema no especifica mas detalles se trabajara sobre la base de una matriz cuadrada nxn.


/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class matriz {
    public int n; // dimension de la matriz
    private double[][] x; //array bidimensional
    
    //crea una matriz de "n" elementos con ceros
     public matriz(int n) {
        this.n = n;
        x = new double[n][n];
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                x[i][j]=0.0;
            }
        }
     }
     
     //crea una matriz con un array bidimensional pasado como parametro
     public matriz(double[][] x) {
        this.x=x;
        n=x.length;
    }

     //muestra en pantalla a la matriz 
      public String mostrar(){
        String texto="\n";
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                // tabulador "\t" y se limita el numero de decimales a tres
                texto+="\t "+(double)Math.round(1000*x[i][j])/1000;
            }
            //cuando se alcanza el final de la linea se inserta un  retorno de carro
            texto+="\n";
        }
        texto+="\n";
        return texto;
  }
      
      public  matriz suma(matriz a, matriz b){
        matriz resultado=new matriz(a.n);
        for(int i=0; i<a.n; i++){
            for(int j=0; j<a.n; j++){
                resultado.x[i][j]=a.x[i][j]+b.x[i][j];
            }
        }
        return resultado;
    }
      
      public  matriz producto(matriz a, matriz b){
        matriz resultado=new matriz(a.n);
        for(int i=0; i<a.n; i++){
            for(int j=0; j<a.n; j++){
                for(int k=0; k<a.n; k++){
                    resultado.x[i][j]+=a.x[i][k]*b.x[k][j];
                }
            }
        }
        return resultado;
    }      
}


La clase matriz.java esta compuesta por dos constructores matriz(int n) y matriz(double[][] x), la primera construye una matriz  de n-elementos los cuales inicializa en cero "0", el segundo constructor crea una matriz tomando como elementos los pasados por un array bidimensional.
Ademas la clase cuenta con el metodo mostrar(), la cual devuelve un String previamente formateada. Obviamente la clase tambien cuenta con los metodos suma(matriz a, matriz b) y producto(matriz a, matriz b), que devuelven como resultado una matriz.

Para ejecutar el programa:

/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Main {
 
    public static void main(String[] args) {                    
        double[][] a1={{2, 0, 1},{3,0,0},{5,1,1}};
        matriz a=new matriz(a1);
        
        double[][] a2={{1, 0, 1},{1,2,1},{1,1,0}};
        matriz b=new matriz(a2);
        
        System.out.println("Matriz A: " + a.mostrar());
        System.out.println("Matriz B: " + b.mostrar());        
        
        matriz re = a.suma(a, b);
        System.out.println("Suma "+re.mostrar());
        matriz re2 = a.producto(a, b);
        System.out.println("Producto "+re2.mostrar());
    }       
}


El resultado:

continue reading

Post recomendado