viernes, 25 de noviembre de 2011

TDD… ejemplos básicos



Es una técnica de programación que emplea pruebas unitarias y refactorización de código.


El ciclo de vida de TDD comprende tres etapas

  1. Escribir una prueba que falle (rojo)
  2. Escribir una prueba que pase (verde)
  3. Refactorización, mejorar el código sin afectar su funcionamiento interno


Problema. Obtener el número de pulsaciones de una persona con 15 segundos de ejercitación.

Entrada: edad de la persona
Salida: número de pulsaciones
Restricciones o casos posibles:
  1. la edad no debe ser cero o un valor negativo,
  2. un valor flotante (ej. 4.5)
  3. o un carácter.

Fórmula. Num_pulsaciones = (220 – edad)/15

El primer paso es crear una prueba que falle, existen libros sobre TDD y Refactorización que indican la forma realizar los test, pero bien lo trataré de hacer según mi entendimiento.

PulsacionTest. Java

@Test
public void testObtenerPulsaciones() {
Pulsacion pulsacion = new Pulsacion();
System.out.println("obtenerPulsaciones: entero positivo");
int edad = 26;
double expResult = 12.0;
assertEquals(expResult, pulsacion.obtenerPulsaciones(edad), 0.0);
}

Obvio es que falle (no tengo que probar). Ahora el segundo paso es crear el código necesario (Pulsacion.java) para pasar la prueba.


//Código inicial
Pulsacion.java

public double obtenerPulsaciones(int edad){
return (220-edad)/15;
}

Listo pasa la primer prueba (valor entero no negativo). Ahora otro problema, es necesario realizar pruebas para los tres casos posibles (valor cero o negativo, valor flotante, o carácter).

Para ahorrar líneas de código defino “pulsación” como un atributo de la clase PulsacionTest.java para que sea accesible para los demás métodos.

He aquí el código aplicando TDD y un poco de Refactorización.

PulsacionTest. Java

Pulsacion pulsacion = new Pulsacion();

//para un valor entero no negativo
@Test
public void testObtenerPulsaciones() {
System.out.println("obtenerPulsaciones: entero positivo");
int edad = 26;
double expResult = 12.0;
assertEquals(expResult, pulsacion.obtenerPulsaciones(edad), 0.0);
}

// para un valor cero o negativo
@Test
public void testObtenerPulsacionesNegativoCero(){
System.out.println("obtenenerPulsaciones: cero o negativo");
int edad_neg=-26;
double expResult1=14.0;
assertEquals(expResult1, pulsacion.obtenerPulsaciones(edad_neg), 0.0);
}

// para un valor flotante
@Test
public void testObtenerPulsacionesReal(){
System.out.println("obtenenerPulsaciones: real");
double edad_real=26.0;
double expResult2=12.0;
assertEquals(expResult2, pulsacion.obtenerPulsaciones((int)edad_real), 0.0);
}

//para un carácter
@Test
public void testObtenerPulsacionesCaracter(){
System.out.println("obtenenerPulsaciones: caracter");
String edad_cad="26";
double expResult3=12.0;
assertEquals(expResult3, pulsacion.obtenerPulsaciones(Integer.parseInt(edad_cad)), 0.0);
}

En este método se podría agregar otro método que compruebe si la cadena introducida es numérica o no.


public bolean esNumerico (String cad){
try{
Integer.parseInt (cad);
return true;

}catch(NumberFormatException ex){
return false;}
}
//Código final
Pulsacion.java

public double obtenerPulsaciones(int edad){
if((int)edad<=0){
return (220-0)/15;
}
else if((int)edad>0){
return (220-(int)edad)/15;
}
else{
return (220-edad)/15;
}
}

jueves, 17 de noviembre de 2011

¿Cómo introducir/mostrar datos en Java, C, Groovy & Python?



En Java/Groovy

1. Uso de java.util.Scanner y java.io
package control.pruebas;


import java.util.Scanner;
import java.io.*;

public class Entrada {

/**
* @param args
*/
public static void main(String[] args) {
BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
Scanner tecla=new Scanner(System.in);


System.out.println("Introduce entero");
int entero;
try {
entero = Integer.parseInt(teclado.readLine());
System.out.printf("%d",entero);
System.out.println(entero);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



System.out.println("Introduce real");
double real;
try {
real = Double.parseDouble(teclado.readLine());
System.out.printf("%f",real);
System.out.println(real);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("Introduce cadena");
String cadena;
try {
cadena = teclado.readLine();
System.out.printf("%s",cadena);
System.out.println(cadena);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


System.out.println("Introduce entero");
int enterox= tecla.nextInt();

System.out.printf("%d",enterox);
System.out.println(enterox);
System.out.println("Introduce real");
double realx= tecla.nextInt();

System.out.printf("%f",realx);
System.out.println(realx);
System.out.println("Introduce cadena");
String cadenax= tecla.nextLine();

System.out.printf("%s",cadenax);
System.out.println(cadenax);

}

}

En Python
entero=int(raw_input('Introduce entero:'))
print "entero: %d"%(entero)
print "entero: ",entero

real=float(raw_input('Introduce real:'))
print "real: %f"%(real)
print "real: ",real

cadena=raw_input('Introduce cadena')
print "cadena: ",cadena

En C
int entero;
float real;

printf("Introduce entero:"); scanf("%d",&entero);
printf("entero: %d",entero);
printf("Introduce real:"); scanf("%d",&real);
printf("entero: %f",real);

char cadena[23];
puts("Introduce cadena");
gets(cadena);

puts(cadena);


domingo, 13 de noviembre de 2011

¿Cómo aprender a programar?

  • Conoce gente que sepa de programación 
  • Busca información, libros, apuntes, blogs, sitios especializados,etc.
  • Comparte tus conocimientos (aunque sean limitados) siempre alguien te podrá corregir si te equivocas
  • Siempre es bueno tener tu propio "banco de datos" donde almacenar tus apuntes, tus notas, etc.
  • Leer ayuda de mucho, también la lógica y las matemáticas
  • Haz notas de lo que no entiendas, busca términos que te confundan o que no entiendas claramente
  • Preguntar es bueno, aunque no siempre esperes que te contesten y resuelvan tus problemas
  • El Face y Twitter no son solo para ver mensajes sin contenido ni sustancia, también pueden servir para encontrar buena información y conocer gente
  • Si encuentras código no es bueno tan solo copiar y pegar,estudialo no todo el código que encuentras en  internet sirve
  • Y lo más importante, el programador se hace con la práctica no en las aulas

Un ejemplo muy sencillo. Sumar todos los valores de un arreglo
//defino un arreglo con números
int[] numeros={3,4,5,6,7,8,9};
int i,suma=0;
//bucle que va sumando todos los valores del arreglo
for(i=0;i<numeros.length;i++){
   suma+=numeros[i];
}
//muestro la suma de todos los valores
System.out.println("Suma de todos los números: "+suma);

    sábado, 12 de noviembre de 2011

    ¿XML ... eso con que se come?



    Java aparte de bonito, barato y eficiente es un lenguaje que permite procesar (con ayuda de algunas herramientas como:JAXB , XStream, JDom, etc.) los archivos *.xml.
    Los documentos xml tienen varios usos:
    1. Intercambo de informaciön entre aplicaciones (Web o de escritorio)
    2. XML como "base de datos"
    3. Ahorro de recursos de los servidores
    4. etc.
    Permite crear etiquetas personalizadas, sin embargo, es necesario que los documentos xml tengan un significado coherente.
    Un ejemplo. Crear un xml que represente la entidad Programador y sus atributos (nombre,edad y email).
    Programador.xml
    <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>
    <Programador>
    <Nombre>Daniel</Nombre>
    <Edad>27</Edad>
    <Email>daniel.2132@servidor.com</Email>
    </Programador>
    Es un archivo xml básico, pero todavia falta como darle validez.

    ¿Cómo se le da validez a los archivos xml?

    Existen dos alternativas (validadores) los Documentos de definición de tipos:
    1. DTD : ,describe la estructura del documento con un lenguaje que no tiene nada que ver con XML.
    2. XML Schemas: describe la estructura con XML
    Ejemplo con DTD.
    programador.dtd
    <!ELEMENT Programador(Nombre,Edad,Email)>
    <!ELEMENT Nombre (#PCDATA)>
    <!ELEMENT Edad (#PCDATA)>
    <!ELEMENT Email (#PCDATA)>
    Existen reglas para definir los elementos ( ), la cardinalidad (?,*,+), pero solo quiero poner una muestra sencilla.
    Asi quedaria el documento xml con dtd.
    <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>
    <!DOCTYPE Programador SYSTEM "programador.dtd">
    <Programador>
    <Nombre>Daniel</Nombre>
    <Edad>27</Edad>
    <Email>daniel.2132@servidor.com</Email>
    </Programador>

    Tratamiento de documentos XML

    Básicamente existen dos alternativas (se denominan parsers o analizadores):
    1. SAX:Simple API for XML, consiste en procesar los documentos xml según se va leyendo las etiquetas y se van localzando los elementos
    2. DOM:Document Object Model, consiste en leer el documento xml y obtener y modelo basado en objetos que se mantienene en memoria para poder realizar el tratamiento conforme sea necesario sobe la información leida. Es más lento que SAX.


    He aqui un ejemplo de un programa que lee XML escrito por @javadabadoo


    Espero continuar con el tema y hacer un ejemplo con JAXB. En otro post trataréde hablar más de esa tecnología con ayuda de NetBeans y/o Eclipse.





    JAXB
    Crear una clase java básica.
    Datos1.java
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package modelo.pruebas;
    //import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    /**
     *
     * @author yo
     */
    @XmlRootElement
    public class Datos1 {
       
        private double valor,tasa;
        private int periodo;     /**
         * @return the valor
         */
        public double getValor() {
            return valor;
        }
        /**
         * @param valor the valor to set
         */
        @XmlElement
        public void setValor(double valor) {
            this.valor = valor;
        }
        /**
         * @return the tasa
         */
        public double getTasa() {
            return tasa;
        }
        /**
         * @param tasa the tasa to set
         */
        @XmlElement
        public void setTasa(double tasa) {
            this.tasa = tasa;
        }
        /**
         * @return the periodo
         */
        public int getPeriodo() {
            return periodo;
        }
        /**
         * @param periodo the periodo to set
         */
        @XmlElement
        public void setPeriodo(int periodo) {
            this.periodo = periodo;
        }
       
       
    }
    Convertir esa clase a xml.
    ControlDatos1Xml.java
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package control.pruebas; import java.io.File;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import modelo.pruebas.Datos1;
    import javax.swing.JOptionPane;
    /**
     *
     * @author yo
     */
    public class ControlDatos1Xml {
       
        Datos1 datos= new Datos1();
        public static void main(String[] args){
             ControlDatos1Xml control= new ControlDatos1Xml();
           
             double v=0,t=0; int p;
             v=Double.parseDouble(JOptionPane.showInputDialog("valor"));
             t=Double.parseDouble(JOptionPane.showInputDialog("tasa"));
             p=Integer.parseInt(JOptionPane.showInputDialog("periodo"));
           
           
             control.datos.setPeriodo(p);
             control.datos.setTasa(t);
             control.datos.setValor(v);
           
             //------------------------------------
             try {

                    File file = new File("/home/user/PruebasClases/dat1.xml");
                    JAXBContext jaxbContext = JAXBContext.newInstance(Datos1.class);
                    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

                   
                    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

                    jaxbMarshaller.marshal(control.datos, file);
                    jaxbMarshaller.marshal(control.datos, System.out);

                  } catch (JAXBException e) {
                    e.printStackTrace();
                  }
           
             JOptionPane.showMessageDialog(null, "XML generado");
           
            //-----------------------------------
       
           
           
         
        }
       
       
       
    }
    Leer el XML como si fuera objeto.
    ControlDatos1Class.java
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package control.pruebas;
    import java.io.File;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Unmarshaller;
    import modelo.pruebas.Datos1; /**
     *
     * @author yo
     */
    public class ControlDatos1Class {
        public static void main(String[] args){
           
            try {

                    File file = new File("/home/user/PruebasClases/dat1.xml");
                    JAXBContext jaxbContext = JAXBContext.newInstance(Datos1.class);

                    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
                    Datos1 datos = (Datos1) jaxbUnmarshaller.unmarshal(file);
                    System.out.println(datos);
                   
                   
                    //---------------------------------------
                    if(datos.getValor()<=0){
                      System.out.println("El valor no debe ser menor o igual a cero");
                    }
                   
                    //------------------------------------
                   
                    else{
                    System.out.println("valor -->"+datos.getValor());
                   
                   
                    System.out.println("tasa -->"+datos.getTasa());
                    System.out.println("periodo -->"+datos.getPeriodo());
                    }

              } catch (JAXBException e) {
                    e.printStackTrace();
              }
           
            //-----------------------------------
           
       
        }
       
    }



    JAXB

    Es una tecnología que permite obtener una representación XML de un objeto Java y viceversa.

    Algunas librerías necesarias para trabajar con JAXB:

    javax.xml.bind.JAXBContext
    javax.xml.bind.JAXBException
    javax.xml.bind.Mashaller
    javax.xml.bind.Unmashaller
    javax.xml.bind.annotation.XmlAttribute
    javax.xml.bind.annotation.XmlRootElement
    javax.xml.bind.annotation.XmlElement
    javax.xml.bind.annotation.XmlType
    javax.xml.bind.annotation.XmlAccessType
    javax.xml.bind.annotation.XmlAccessorType
    javax.xml.bind.annotation.XmlEnumValue
    javax.xml.bind.annotation.XmlList
    javax.xml.bind.annotation.XmlElementWrapper


    XML … XML Schemas

    XML Schemas (*.xsd): Se tratan de documentos XML que permiten definir la estructura y validez de documentos XML.

    Parecidos a los archivos *.dtd, pero permiten definir una serie de tipos como string, int, integer, etc. Y poseen un mecanismo para crear nuevos tipos, simples y complejos que representan los tipos de documentos XML.


    Tanto Eclipse como NetBeans poseen herramientas para crear estos archivos XML.


    Estructura básica de un XML Schema

    <?xml version=”1.0” encoding=”UTF-8”?>
    <xs:schema xmlns:xs=”http://www.w3.org./2009/XMLSchema”>
    <!-- aquí pones los elementos y/o descripción del Schema -->
    </xs:schema>



    Definición de tipos simples

    1.     Mediante enumeración
    2.     Mediante derivación
    3.     Mediante unión

    <xs:simpleType name=”Algo”>
    </xs:simpleType>



    Definición de tipos complejos

    <xs:complexType name=’Algo’>
    <xs:sequence>
    </xs:sequence>
    </xs:complexType>

    Ejemplo.  Crear una estructura “persona” con 4 atributos: nombre, edad, peso, y talla.

    persona.xsd

    <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>
    <xs:schema xmlns:xs=”http://www.w3.org/2009/XMLSchema ”>
    <xs:element name=”Persona” type=”tPersona”/>
    <xs:complextType name=”tPersona”>
    <xs:sequence>
    <xs:element name=”nombre” type=”xs:string”/>
    <xs:element name=”edad” type=”xs:integer”/>
    <xs:element name=”peso” type=”xs:double”/>
    <xs:element name=”talla” type=”xs:double”/>
    </xs:sequence>
    </xs:complexType>
    </xs:schema>


    persona.xml

    <Persona xmlns:xs=”http://www.w3.org/2009/XMLSchema -instance” xsi:noNamespaceSchemaLocation=”persona.xsd”>
    <nombre>Horacio</nombre>
    <edad>20</edad>
    <peso>56</peso>
    <talla>1.65</talla>
    </Persona>

    Ejemplo con NetBeans

    1. Bajar  e instalar el pugin  XMLTools

    2. Crear el XML Schema

    3.  Crear el JAXB Binding (elegir en verbose)

    4. Crear el archivo xml

    5. Crear la clase java que lea el xml


    Ejemplo con Eclipse

    1.     Crear el XML Schema
    2.     Generar:  XML File  y/o JAXB Class
    3.     Crear la clase java que lea el xml

    martes, 25 de octubre de 2011

    Comparativa C/Java/Python




    1. Introducción de datos

    //en C
    int entero;
    printf(“Introduce valor entero: ”);
    scanf(“%d”,&entero);

    float real;
    printf(“Introduce valor real: ”);
    scanf(“%f”,&real);

    char cadena[10];
    printf(“Introduce cadena: ”);
    gets(cadena);

    //en Java
    Scanner teclado=new Scanner(System.in);

    int entero;
    System.out.println(“Introduce entero:”);
    entero=teclado.nextInt();

    double real;
    System.out.println(“Introduce real:”);
    real=teclado.nextDouble();

    String cadena;
    System.out.println(“Introduce cadena:”);
    cadena=teclado.nextLine();

    #Python
    cadena=raw_input('Cadena:')
    entero=int(raw_input('Entero:'))
    real=float(raw_input('Real:'))

    2. Arreglos: listas

    //en C
    int vector[4]={5,7,9,11,13};
    int i;
    for(i=0;i<3;i++){
    printf(“%d\n”,vector[i]);
    }



    //en Java
    int[] vector={6,9,12,15,18};
    for(int e: vector){
    System.out.println(e);
    }

    #en Python
    vector=[3,5,7,9,11,13]
    i=0
    for i in range(len(vector)):
    print vector[i]

    3. Arreglos: tablas

    //en C
    int matriz[3][3]={{4,5,6},{8,10,12},{7,4,2}};
    int i, j;
    for(i=0;i<2;i++){
    for(j=0;j<2;j++){
    printf(“%d\n”,matriz[i][j]);
    }
    }

    //en Java
    int[][] matriz={{4,5,6},{8,10,12},{7,4,2}};
    int i, j;
    for(i=0;i<2;i++){
    for(j=0;j<2;j++){
    System.out.println(matriz[i][j]);
    }
    }

    #en Python
    matriz=[[6,5,3],[9,12,32],[0,54,87]]
    i, j=0,0
    for i in range(len(matriz)):
    for j in range(len(matriz)):
    print matriz[i][j]

    4. Funciones matemáticas
    //en C
    #include<math.h>

    void main(){
    int a=2,b=4;
    printf(“%d elevado a %d es: %d”,b,a,pow(b,a));

    printf(“La raiz cuadrada de %d es: %f”,b,(float)sqrt(b));
    printf(“El seno de %d es: %f”,a,sin(a));


    }

    //en Java
    import java.lang.Math;

    int a=4,b=2;
    System.out.println(a+” elevado a ”+b+” es: ”+Math.pow(a,b));

    System.out.println(“La raiz cuadrada de ”+a+” es: ”+Math.sqrt(a));
    System.out.println(“El seno de ”+a+” es: ”+Math.sin(a));


    #en Python
    from math import pow,sqrt
    a,b=4,2
    print “La raiz cuadrada de ”,a,” es: ”,sqrt(a)
    print “%d elevado a %d es: %d”%(a,b,pow(a,b))
    print “El seno de %d es %f”%(b,sin(b))

    5. Estructuras de control: selectivas
    //en C
    int a=4,b=6;
    if(a<b){
    printf(“%d es menor que %d”,a,b);
    }
    else{
    printf(“%d es menor que %d”,b,a);
    }

    int opcion; opcion=1;
    switch(opcion){
    case 1: puts(“opción 1”);break;
    case 2: puts(“opción 2”);break;
    default: puts(“opción no definida”);break;
    }

    //en Java
    boolean expresion;
    int a=3,b=9;

    expresion=(a<b)&&(b>0);

    if(!expresion){
    System.out.println(“La expresión da falso”);
    }else{
    System.out.println(“La expresión da verdadero”);
    }

    int opc=1;
    switch(){
    case 1: System.out.println(“opción 1”);break;
    case 2: System.out.println(“opción 2”);break;
    default: System.out.println(“opción no definida”);break;
    }

    #en Python
    a,b=5,3
    expresion1=(a>b)
    expresion2=(a>0)

    if expresion1 or expresion2:
    print "La expresión es falsa"

    else:
    print "La expresión es verdadera"


    opcion=1
    if opcion==1:
    print “Opción 1”

    if opcion==2:
    print “Opción 2”

    else:
    print “Ninguna”




    lunes, 17 de octubre de 2011

    Comparativa: Java y Python



    He aquí una serie de ejercicios escritos en Java y Python que resuelven un mismo problema. El código Java no está del todo completo (falta declaración de librerías, la función main, etc.), pero
    tiene lo esencial.

    1. Sumar los primeros 20 números impares.
    número impar= (2*i)+1
    //código Java
    int suma=0;
    for(int i=0;i<19;i++){
      suma+=(2*i)+1;
    }
    System.out.println("Suma total: "+suma);

    #código Python
    suma, i,=0, 0
    for i in range(19):
      suma+=i

    print "Suma total: ",suma

    2. Factorial de un número.
    //código Java
    int numero=0, fact=0;
    Scanner teclado=new Scanner(System.in);
    do{
    System.out.println("Introduce número >0 :");
    numero=teclado.nextInt();
    }while(numero<=0);

    for(int i=0;i<=numero;i++) {
      fact*=i;
    }
    System.out.println("Factorial de "+numero+"  es:"+fact);

    #código Python
    numero, fact, i=0, 0, 0
    while numero<=0:
      numero=int(raw_input('Introduce número >0 :'))

    for i in range(numero):
      fact*=i

    print "Factorial de %d es %d"%(numero,fact)


    3.  Grados Celsius a Fahrenheit
    Fórmula--> F=(C*1.8)+32 , donde C=grados Celsius
    //código Java
    public static final int k1=32;
    public static final double k2=1.8;

    //función
    static double conversionGrados(double va){
      return (va*k2)+ k1;
    }

    double gradosC=0.0;
    Scanner teclado=new Scanner(System.in);

    do{
    System.out.println("Introduce valor :");
    gradosC=teclado.nextDouble();
    }while(gradosC<=0);

    System.out.println("Grados Celsius "+gradosC+" a grados Fahrenheit "+conversionGrados(gradosC));



    #código Python
    def  conversionGrados(va):
      return (va*1.8)+32

    gradosC=0
    while gradosC<=0:
      gradosC=float(raw_input('Introduce valor: '))

    print "Grados Celsius %f a grados Fahrenheit %f"%(gradosC,conversionGrados(gradosC))

    4. Ejemplo de una clase
    //código Java
    public class Persona{
      private String nombre;
      private int edad;

      public void setNombre(String nombre){
       this.nombre=nombre;
      }

      public String getNombre(){
       return this.nombre;
     }


      public void setEdad(int edad){
       this.edad=edad;
     }

     public int getEdad()
       return this.edad;
     }

     public static void main(String[] args){
       Persona miObjeto=new Persona();
     
       miObjeto.setNombre("Pedro");
       miObjeto.setEdad(29);

      System.out.println("Nombre: "+miObjeto.getNombre());
      System.out.println("Edad: "+miObjeto.getEdad());

     }



    }




    #código Python
    Nombre=""
    Edad=0
    class Persona:
        def setNombre(self,Nombre):
            self.Nombre=Nombre

        def getNombre(self):
            return Nombre

        def setEdad(self,Edad):
            self.Edad=Edad

        def getEdad(self):
            return Edad


    miObjeto=Persona()
    Nombre="Jose"
    Edad=23
    miObjeto.setNombre(Nombre)
    miObjeto.setEdad(Edad)
    print "Nombre: ",miObjeto.getNombre()
    print "Edad:  ",miObjeto.getEdad()

    5.  Multiplicar un arreglo de números.
    //código Java
    int[] numeros={3,4,5,6,7};
    int i=0;
    for(int i=0;i<numeros.length;i++){
       System.out.println(""+(numeros[i]*3));
    }
    /*salida: 8,12,15, 18, 21

    */

    #código Python
    numeros=[3,4,5,6,7]
    print [3*x for x in numeros]

    '''
    salida:
    [9, 12, 15, 18, 21]
    '''

    6. Horoscopo chino.
    //código Java
    public class HoroscopoChino {

                /**
                 * @param args
                 */
                public static void main(String[] args) {
                            int resto=0;
                            String horos="";
                            String[] nombres={"Pepe","Jose","Tacho","Ana"};
                            int[] anyos={1981,1982,1985,1987};
                            for(int i=0;i<anyos.length;i++){
                                       resto=anyos[i]%2;
                                       switch(resto){
                                       case 0:horos="Mono";break;
                                       case 1:horos="Gallo";break;
                                       case 2:horos="Perro";break;
                                       case 3:horos="Cerdo";break;
                                       case 4:horos="Rata";break;
                                       case 5:horos="Buey";break;
                                       case 6:horos="Tigre";break;
                                       case 7:horos="Conejo";break;
                                       case 8:horos="Dragon";break;
                                       case 9:horos="Serpiente";break;
                                       case 10:horos="Caballo";break;
                                       case 11:horos="Cabra";break;
                                       }
                                       System.out.println(nombres[i]+" nacio en "+anyos[i]+" le corresponde el signo del "+horos);
                            }

                }

    }

    #código Python
    horos=""
    resto=0
    i=0
    nombres=['Juan','Pepe','Ana','Tacho']
    anyos=[1981,1982,1987,1997]
    for i in range(len(anyos)):

        resto=anyos[i] % 2
     
     
        if resto==0:
            horos='Mono'
         

        if resto==1:
            horos='Gallo'
         

        if resto==2:
            horos='Perro'
         

        if resto==3:
            horos='Cerdo'
         

        if resto==4:
            horos='Rata'
         

        if resto==5:
            horos='Buey'
         

        if resto==6:
            horos='Tigre'
         

        if resto==7:
            horos='Conejo'
         

        if resto==8:
            horos='Dragon'
         

        if resto==9:
            horos='Serpiente'
         

        if resto==10:
            horos='Caballo'
         

        if resto==11:
            horos='Cabra'
         

        print nombres[i]," nacio en ",anyos[i]," le corresponde el signo del ",horos



    7. Funciones matemáticas

    //código Java
    import java.util.*;

    int a=9,b=3;
    System.out.println(Math.pow(a,b));

    double c=9.453322;
    System.out.println(Math.round(c));

    double d=112.0;
    System.out.println(Math.sqrt(d));

    double e=45.0;
    System.out.println(Math.sin(e));
    System.out.println(Math.cos(e));
    System.out.println(Math.tan(e));


    #código Python
    from math import *

    a, b=9, 3
    print pow(a,b)

    c=9.453322
    print round(c)

    d=112.0
    print sqrt(d)

    e=45.0
    print sin(e)
    print cos(e)
    print tan(e)

    8. Promedio
    //código Java
    int maximo=6,j=0;
    double calf=0.0,total=0.0,promedio=0.0;
    Scanner teclado=new Scanner(System.in);
    for(j=0;j<maximo;j++){
    System.out.println("Introduce calificación: ");
    calf=teclado.nextDouble();
    total+=calf;
    }
    System.out.println("Total: "+total);
    promedio=total/maximo;
    System.out.println("Promdeio: "+promedio);

    #código Python
    maximo, calf, total, j= 6, 0.0, 0.0, 0
    print "[Segundo programa] -->Calcular promedio<--"
    for j in range(maximo):
      calf=float(raw_input('Introduce calificación: '))
      total+=calf
    print "Total: ",total
    promedio=total/maximo
    print "Promedio: ",promedio

    9. Expresiones

    //código Java
    boolean expresion;
    int a=5,b=10;
    expresion=(a<b) or (b>a);
    System.out.println(“(a<b) or (b>a)  es: ”+expresion);
    expresion=(a==a) ;
    System.out.println(“(a==a) es: ”+expresion);
    expresion=(a<b) and (b<a)
    System.out.println( "(a<b) and (b<a) es: "+expresion);

    #código Python
    a, b=10, 5
    expresion= (a<b) or (b>a)
    print "(a<b) or (b>a) es: ",expresion
    expresion=(a==a)
    print "(a==a) es: ",expresion
    expresion=(a<b) and (b<a)
    print "(a<b) and (b<a) es: ",expresion

    10. Bucles

    //código Java
    int cont=0;
    while(cont<100){
      System.out.println(cont);
      cont++;
      if(cont==50)
         break;
    }

    #código Python
    cont=0
    while cont<100:
        cont+=1
        print cont
        if cont==50:
            break





    domingo, 2 de octubre de 2011

    Java, ejemplos prácticos

    Una serie de programas hechos en Java. Trataré de explicar algunos programas más o menos complejos, otros son muy claros como dar una explicación larga y detallada. Te recomiendo estudiarlos y revisarlos


    1. Promedio.java

    import java.util.Scanner;
    import java.io.*;
    import java.lang.*;

    public class Promedio{

      public static void main(String[] args)throws IOException{
      int n=0,contador=0;double suma=0,promedio=0,valor=0;
      Scanner teclado=new Scanner(System.in);
      System.out.println("******************");
      System.out.println("[Promedio en Java]");
      System.out.println("******************");
      do{
      System.out.println("Introduce numero de materias: ");
      n=teclado.nextInt();
      }while(n<0); 

    System.out.println("\nNumero de materias:  ["+n+"]");
     
      while (contador<n){
     
      System.out.println("\nCalificacion no.  "+(contador+1));
      valor=teclado.nextDouble();

       contador++;
      suma+=valor;
      //System.out.println("\nSuma parcial: "+suma+" para no. "+contador);
     
      }
      promedio=suma/n;
      System.out.println("\nSuma total ["+suma+"]");
      System.out.println("\nPromedio ["+promedio+"] redondeado:["+Math.round(promedio)+"]");
      System.exit(0);

      }
    }//fin clase 

    2. Burbuja.java

    import java.io.*;

    public class Burbuja{


     public static void main(String[]args){

      int[] arreglo={100,54,0,43,56,12,4,95,32,5};
      System.out.println("\tArreglo sin ordenar");
      verArreglo(arreglo);
     
      System.out.println("\tArreglo ordenado");
    /*
    esto se pudo hacer con 
    Arrays.sort(arreglo);

    en vez de usar está función
    */
      burbuja(arreglo);
      verArreglo(arreglo);
    }


     static int verArreglo(int[] vector){
      int i=0;
      for(i=0;i<vector.length;i++)
        System.out.println("Posicion no. "+i+" Valor= "+vector[i]);
      return i;
     }


     static int burbuja(int[] arreglo){
          int i,j;
          int aux;
          for(i=0;i<arreglo.length-1;i++)
                for(j=0;j<arreglo.length-1;j++)
                      if(arreglo[j]>arreglo[j+1]){
                            aux=arreglo[j];
                            arreglo[j]=arreglo[j+1];
                            arreglo[j+1]=aux;

                      }
          return i;
    }

    }


    3. Calcular el IMC de una persona: IMC.java
    import java.io.*;
    import java.util.Scanner;

    public class IMC{

       //miembros
       private double Peso;
       private double Talla;

       

       public IMC(double miPeso,double miTalla){
           this.Peso=miPeso;
           this.Talla=miTalla;
      }

      //métodos Set y Get
     
     
      
     //otros métodos

     public void verDatos(){
       System.out.println("\nPeso ["+Peso+"] Talla ["+Talla+"]");
     }

     public double obtenerIMC(){
       return Peso/(Talla*Talla);
     }


    //main

     public static void main(String[] args)throws IOException{

      IMC miPrograma3=new prog4(0,0);
      double peso=0,talla=0;
     Scanner teclado=new Scanner(System.in);
     Mensaje1();
      do{
       System.out.println("\nIntroduce peso: ");
        peso=teclado.nextDouble();
      }while(peso<=0);

     do{
       System.out.println("\nIntroduce talla: ");
        talla=teclado.nextDouble();
      }while(talla<=0);

      miPrograma3=new IMC(peso,talla);
      miPrograma3.verDatos();
      System.out.println("\nIMC generado ["+miPrograma3.obtenerIMC()+"] ");
       Mensaje2();System.exit(0);

     }

       static void Mensaje2(){

        System.out.println("\t**************************************************");
        System.out.println("\t*********** codemonkey *************");
        System.out.println("\t**************************************************");
        }


       static void Mensaje1(){

        System.out.println("\t*******************************************************");
        System.out.println("\t*********** [Calculo del IMC en Java] *************");
        System.out.println("\t*******************************************************");
        }


    }//fin clase 

    Próximamente más ejemplos.

    Programadores

    Un programador es una persona que no solo teclea código. Es un profesional, certificado o no, que tiene ciertas peculiaridades. ...

    Etiquetas

    Archivo del blog