5 de octubre de 2011

burbuja

http://www.fayerwayer.com/2011/04/algoritmos-de-ordenamiento-con-baile-hungaro-rumano-y-gitano/

Ejemplo: Uso de Vectores 2

Calcular el valor de la sumatoria:   (Xi / Xpromedio)


    public static void main(String[] args) {
        // TODO code application logic here
        int i=0, n;
        float z=0, x [], suma=0, promX;

        n= Integer.parseInt(JOptionPane.showInputDialog("Número de elementos"));
        x=new float [n];
     
        for (i=0; i
            x[i]=Float.parseFloat(JOptionPane.showInputDialog("Valor de la pos [" + (i+1) + "]"));
         }

        i=0;
        while (i
            suma=suma + x[i];
            i=i+1;
        }

        promX=suma/n;

        i=0;
        do {
            z= z + (x[i]/promX);
            i=i+1;
        } while (i

        JOptionPane.showMessageDialog(null, "Valor de la sumatoria Z=" + z);

    }

3 de octubre de 2011

Ejemplo: Uso de Vectores 1


/*
 * Programa para almacenar el promedio de las notas de un estudiante
 * El número de notas a leer esta dado como una entrada n
 */
package prueba;
import javax.swing.*;
/**
 *
 * @author ibrahimdkj
 */
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Declaramos el vector como V
        float V[];
        //Declaramos la variable que va a almacenar el promedio de las notas
        float promedio=0;
        //Declaramos n que es el número de notas y pedimos al usuario el número de notas que desea
        //digitar por medio de un inputdialog,
        //al cual lo convertimos a entero utilizando el Integer.parseInt para poder asignarselo a n
        int n=Integer.parseInt(JOptionPane.showInputDialog("Digite el numero de notas"));
        //Inicializamos el Vector con un tamaño n
        V=new float[n];
        //Declaramos el ciclo for el cual va a ser el que usemos para pedir los datos
        for(int i=0;i
        {
            //Asigamos el dato leído al vector en la posición i-
            V[i]=Float.parseFloat(JOptionPane.showInputDialog("Digite la nota "+(i+1)));
            //Vamos sumando las notas y almacenandolas en el promedio
            promedio=promedio+V[i];
        }
        //Ya teniendo la sumatoria de las notas las dividimos sobre el total de notas para sacar el promedio.
        promedio=promedio/n;
        //Imprimimos el promedio por medio del showMessageDialog
        JOptionPane.showMessageDialog(null,"El promedio de las notas es "+promedio);       
    }
}

30 de septiembre de 2011

Primer ejemplo en Java


Un primer ejemplo en Java que comprende leer unas variables, transformar su tipo y posteriormente imprimir esos valores, lo pueden descargar aquí.

El código del main es el siguiente:
package validarfecha;
import javax.swing.*;
/**
 *
 * @rafalizcano
 */
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        //Declaración de las variables
        int dia, mes, año;
        String temp;
        //Solicitar los valores (Entradas)
        dia = Integer.parseInt(JOptionPane.showInputDialog("Por favor digite el día"));
        temp=JOptionPane.showInputDialog("Por favor digite el mes");
        mes=Integer.parseInt(temp);
        año = Integer.parseInt(JOptionPane.showInputDialog("Por favor digite el Año"));
        //Imprimir con una ventana de dialogo
        JOptionPane.showMessageDialog(null,"La fecha leída es: \n" + dia + "/" + mes + "/" + año);
    }
}

La Solución completa la pueden descargar aquí o verla a continuación:

28 de septiembre de 2011

Tutoriales de Java

Existen diversos tutoriales en la red que se pueden usar para comenzar con nuestro trabajo en Java, aquí referencio algunos:
Si hay algún buen material sobre Java en la web y consideran debe estar aquí recibo sus comentarios.

10 de agosto de 2011

Aplicaciones de Grafos!

Los señores de http://www.algovidea.cl/ ponen a disposición una serie de materiales sobre la programación de grafos, es una página interesante para revisar y encontrar explicaciones que ayudarán en el desarrollo del proyecto final.

La lista de videos disponibles en su canal algovidea esta en: http://www.youtube.com/playlist?list=UUDXOnCB8eLN8

Algunos de los vídeos incluyen:

  • El vendedor Viajero:



  • EL camino mínimo:



  • Coloración de Grafos:



¡Gracias Cindy por el aporte!

9 de agosto de 2011

Pilas, Colas y Hashmaps

Estas estructuras ya están predefinidas en clases que se incluyen en el lenguaje JAVA, vean aquí como utilizarlas:

27 de julio de 2011

Qué problemas se podrían solucionar usando grafos

La teoría de grafos es una de las herramientas que aparece más frecuentemente en el análisis matemático de los juegos.

Nació con los puentes de Königsberg, se encuentra en el juego de Hamilton, da la estrategia adecuada para los acertijos de cruces de ríos, como el del pastor, la oveja, la col y el lobo, el de los maridos celosos, y resuelve también muchos otros más modernos como el de los cuatro cubos de la Locura Instantánea...

Un pastor, con una col, una oveja y un lobo (se supone que hasta cierto punto amaestrado) se encuentra a la orilla de un río que quiere atravesar. Hay en su orilla una barca en la que cabe él y una sola de sus pertenencias al tiempo. ¿Cómo se las ingeniará para pasarlas todas? Si deja solas a un lado oveja y col, ésta será liquidada rápidamente por la oveja. Si deja oveja y lobo solos a un lado, el lobo se zampará a la oveja. En cambio al lobo no le atrae nada la col y bien se puede quedar solo con ella. El problema es clásico y fácil de resolver sin grandes esfuerzos sistemáticos. Pero existe una solución sencilla acudiendo, como sucede en muchas ocasiones en que se trata de realizar secuencialmente un conjunto de tareas, a la teoría de grafos. Ver más en:

El problema de locura instantánea, parte de que se tienen 4 cubos y cada una de las caras del cubo esta pintada por un color diferente (ejemplo: amarillo, morado, rosado, fucsia). El problema consiste en apilar los cubos uno sobre el otro, de modo que uno vea los 4 colores, desde el frente, por detrás, por la izquierda por la derecha. Como existen 331,776 formas diferentes de apilar los cubos, lo mejor es utilizar un método que no implique probar con todas las posibilidades. Mediante los grafos se puede encontrar solución a este problema.

Una explicación de este último problema y algunas variaciones del mismo, es lo que se denomina EL PUZZLE DE LOS CUATRO COLORES y esta bien descrito en este enlace.

Existen más problemas que pueden ser encontrados en libros de teoría de juegos o incluso en los de Matemáticas discretas, solo queda que seleccione su proyecto y lo implemente como trabajo final.

Información Importante sobre Grafos y Árboles

El departamento de Ingeniería de Sistemas y Computación de la Universidad de los Andes publica unas presentaciones bien completas sobre definiciones y usos de los grafos y árboles, aquí enlazo algunos links bastante interesantes:

Seguimos en contacto!

3 de junio de 2011

Trabajo de POO - Herencia

Este trabajo consiste en diseñar, documentar y entregar un caso donde se aplique el concepto de herencia. El caso a entregar debe contemplar:
  1. Requerimiento del problema (enunciado donde mencione cual el contexto del problema, que clases debe tener en cuenta, sus atributos y métodos).
  2. Mapa conceptual del problema.
  3. Diagrama de Clases. (Pueden trabajarlo en Visio)
  4. Programa en Java que implemente las clases. (definición de clases e implementación de las mismas en el main - prototipo básico).
Se evaluará cumplimiento en la entrega, originalidad del ejemplo, manejo de conceptos, complejidad del ejemplo, presentación, codificación.

La entrega debe realizarse creando una carpeta en dropbox (carpeta compartida) con el nombre y código. en dicha carpeta debe tener organizado los elementos a entregar (carpeta del proyecto, Diagrama de clases, enunciado del problema en word).

Fecha de entrega:   Martes  7 de Junio (hora de clase)
Vale por dos quices!!!

28 de mayo de 2011

Funciones matemáticas

Al utilizar la clase  estándar Math, se tiene acceso al conjunto de funciones matemáticas estándar:
  • Math.abs( x )           para int, long, float y double
  • Math.sin( double )
  • Math.cos( double )
  • Math.tan( double ) 
  • Math.asin( double )
  • Math.acos( double )
  • Math.atan( double )
  • Math.atan2( double,double )
  • Math.exp( double )
  • Math.log( double )
  • Math.sqrt( double )
  • Math.ceil( double )
  • Math.floor( double )
  • Math.rint( double )
  • Math.pow( a,b )
  • Math.round( x )        para double y float
  • Math.random()          devuelve un double
  • Math.max( a,b )        para int, long, float y double
  • Math.min( a,b )        para int, long, float y double
  • Math.E                 para la base exponencial
  • Math.PI                para PI

Método de Bisección!

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package biseccion;
import javax.swing.*;
/**
 *
 * @author Admin
 */
public class Main {
    /**
     * @param args the command line arguments
     */
    public static double f (double x) {
        double rta;
        rta= Math.pow(x,3) + 4 * Math.pow(x,2) -10;
        return (rta);
    }

    /*
    public static double df (double x) {
        double rta;
        rta= x * Math.sin(x);  //Aqui colocar la derivada de f
        return (rta);
    }
    */
    public static void main(String[] args) {
        // TODO code application logic here
        double a, b, p;
        double tol=0.0001;
        boolean sw=true;

        a= Double.parseDouble(JOptionPane.showInputDialog("Deme el valor de a?"));
        b= Double.parseDouble(JOptionPane.showInputDialog("Deme el valor de b?"));

        //JOptionPane.showMessageDialog(null, "Valor de f(a):" + f(a));

        if (f(a)*f(b) <0) {

            do {
                p= (b-a)/2 + a;
                JOptionPane.showMessageDialog(null, "Valor de p:" + p + " - Valor de f(p):" + f(p));
                if (f(p)==0) {
                    JOptionPane.showMessageDialog(null, "La raiz es: " + p);
                    sw=false;
                }
                else if (f(a) * f(p) >0) {
                         a=p;
                      }
                     else {
                         b=p;
                     }

            } while ((sw) && (Math.abs(f(p))>tol));

           if (sw)
              JOptionPane.showMessageDialog(null, "Valor cercano a la raiz:" + p);
        }
        else
              JOptionPane.showMessageDialog(null, "En ese intervalo no se asegura una raiz f(a)=" + f(a) + " - f(b)=" + f(b));
    }
}

2 de mayo de 2011

Ejercicios: Identificación de clases

  1. Diseñar una clase que modele una Cuenta Bancaria.. Una cuenta tiene un número, nombre del cliente,  clave,  saldo y un estado (activa, bloqueada, inactiva entre otros). A una cuenta se le puede: consultar su saldo, consignar, retirar, transferir, bloquear, desbloquear y cambiar clave.

    Leer los datos básicos de la Cuenta Bancarias, hacer una consignación, un retiro y mostrar el saldo  actual.
  2. Una biblioteca ha decidido modelizar su proceso de préstamo, que consta de libros y revistas, para así poder dar mejor servicio a los estudiantes. Los libros son elementos que la biblioteca puede prestar por tres (3) días, mientras que las revistas solo se pueden prestar para fotocopiar y el tiempo máximo es de una (1) hora. El estudiante debe solicitar el préstamo del libro o la revista y devolverlo a mas tardar en el plazo indicado, según corresponda. De no cumplir con el tiempo estipulado del préstamo se debe cobrar una multa de $5.000 por libro por cada día adicional y una multa de $10.000 por revista por cada hora o fracción adicional.

    Determine los objetos que intervienen, con sus atributos y operaciones.

11 de abril de 2011

Definiendo una clase Basica

Un ejemplo para definir una clase sencilla. Se define la clase persona con un atributo edad y los métodos para establecer y devolver la edad, además de un método que diga si es mayor de edad.


Nota: El ejemplo esta como un proyecto de NetBeans

8 de abril de 2011

Ejemplo de la Clase Curso

Para descargar el ejemplo de una clase curso que contiene una colección básica de Estudiantes, de click aquí.

Este es el trabajo desarrollado en la clase de Estructuras de Datos el 8 de abril

Éxitos!

Generar números aleatorios en Java

Para generar números randomicos, debes incluir la libreria util en particular la clase Random:

import java.util.Random;

Después de acuerdo a lo que necesites puedes generar enteros o reales entre rangos definidos, para lo cual sigues el ejemplo presentado. (da click en ver más!)


Programación básica: Quiz 2 de 3

  1. Escriba un programa en Java que lea un número entero N y calcule el resultado de la siguiente serie : 1-1/2+1/3-1/4+1/5-1/6+... 1/N
  2. Se definen los números triangulares como los obtenidos de sumar los números naturales sucesivos 1, 2, 3, ...; es decir, los primeros números triangulares son 1, 3, 6, 10, .... Elaborar un programa en Java para imprimir los N primeros números triangulares.
  3. Dado un número entero, N, si la suma de sus divisores (sin contar a si mismo) es igual a N se dice que ese número es perfecto. Si la suma es inferior, se dice que es deficiente, y si es superior se dice que es abundante. Por ejemplo:
    6 tiene como divisores 1,2,3: Su suma es 6, por lo tanto es perfecto.
    8 tiene como divisores 1,2,4: Su suma es 7, por lo tanto es deficiente.
    24 tiene como divisores 1,2,3,4,6,8,12: Su suma es 36, por lo tanto es abundante.

    Escribir un programa que reciba una serie de números y devuelva un valor que clasifique cada número como perfecto, deficiente o abundante. Además el programa debe imprimir cuantos de cada número encontro y terminar cuando el número leído sea negativo.


Ver solución: