domingo, 31 de marzo de 2013

Programando en Perl no. 2


1. Uso de clases: En este ejemplo se va crear dos archivos: Alumno.pm (esta es la clase) y usoAlumno.pl. Se definen 7 atributos:

  • nombre
  • apellidos
  • edad
  • dirección
  • ciudad
  • teléfono y
  • email
Se crea una función para mostrar los datos.


Alumno.pm


1. Creamos la clase Alumno:

package Alumno;
use strict; 

sub new{
my $this=shift; 
     my $class = ref($this) || $this; 

     my $self={}; 
     $self ->{NOMBRE} =undef ; 
     $self ->{APELLIDOS} =undef ;
     $self ->{EDAD}   =0 ; 
     $self ->{DIRECCION}   =undef ; 
     $self ->{CIUDAD}   =undef ; 
     $self ->{TELEFONO}   =undef ; 
     $self ->{EMAIL}   =undef ;    

     bless $self, $class; 
     return ($self);
}

sub nombre{
       my $self=shift;
       $self->{NOMBRE}=shift if (@_);
       return $self->{NOMBRE};
  }

  sub apellidos{
       my $self=shift;
       $self->{APELLIDOS}=shift if (@_);
       return $self->{APELLIDOS};
  }

  sub edad{
       my $self=shift; 
       $self->{EDAD}=shift if (@_);
       return $self->{EDAD};
  }

  sub direccion{
       my $self=shift;
       $self->{DIRECCION}=shift if (@_);
       return $self->{DIRECCION};
  }

  sub telefono{
       my $self=shift; 
       $self->{TELEFONO}=shift if (@_);
       return $self->{TELEFONO};
  }

  sub email{
       my $self=shift; 
       $self->{EMAIL}=shift if (@_);
       return $self->{EMAIL};
  }

  sub ciudad{
       my $self=shift; 
       $self->{CIUDAD}=shift if (@_);
       return $self->{CIUDAD};
  }

  sub DESTROY {
        my $self=shift; 
        delete ($self->{NOMBRE});  
        delete ($self->{EDAD}); 
        delete ($self->{APELLIDOS});  
        delete ($self->{EMAIL});
        delete ($self->{DIRECCION});  
        delete ($self->{TELEFONO}); 
        delete ($self->{CIUDAD});
  }

1;
2. El archivo "usoAlumno.pl" que emplea la clase Alumno:
usoAlumno.pl

use Alumno;

$alumno=Alumno->new();
$alumno->nombre("horacio");
$alumno->apellidos("Sanchez");
$alumno->edad(31);
$alumno->direccion("aldama 34");
$alumno->ciudad("San Luis");
$alumno->email("alguien@gommail.com");
$alumno->telefono("722156444");

print "Hola: ".$alumno->nombre." ".$alumno->apellidos."  tienes: ".$alumno->edad."  de edad, vives en ".$alumno->direccion."  ".$alumno->ciudad." \n ";
print "tu email es: ".$alumno->email."  tu telefono es: ".$alumno->telefono."  \n";

Para ejecutar: perl usoAlumno.pl




jueves, 28 de marzo de 2013

Determinar el biotipo de una persona en Java


¿Qué es el biotipo?
Es la forma característica de un animal o planta. Es el aspecto general de un sujeto de acuerdo a sus características somáticas o morfológicas y se basa en los datos que refleja su estructura corporal, en todo lo que se ve y se puede medir de su cuerpo.

Establece que hay una relación entre las características físicas y la personalidad.

Braquitipo. 

  • Sobrepeso
  • Acumula grasas
  • Puede ganar musculatura si realiza ejercicio

Longitipo.

  • Largo
  • Delgado
  • De apariencia frágil

Normotipo.

  • Fuerte
  • Atlético
  • Musculoso


Biotipo.java

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.event.*;
import javax.swing.JPanel;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.awt.*;
import javax.swing.JLabel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;



public class Biotipo{
   
     public static void main(String[] args)throws Exception {
        
        SwingUtilities.invokeLater(new Runnable(){public void run(){new Ventana().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;}});
    }   
    
}


class Ventana extends JFrame{
    public final static int ANCHO=350;
    public final static int ALTO=90;

    private JPanel panel;
    private JButton btnActiva;
    private JButton btnSalir;
    private JLabel lblResultado;
    
    Ventana(){
        setTitle(getFecha());
        setSize(ANCHO,ALTO);
        setVisible(true);
        add(getGUI());

    }

    static String getFecha(){
        String strFecha=null;
        try{
            java.util.Date fecha=new java.util.Date();
            java.text.SimpleDateFormat formato = new java.text.SimpleDateFormat("'Hoy es' EEEEEEEEE dd 'de' MMMMM 'de' yyyy");
            strFecha=formato.format(fecha);
        }catch(Exception ex){
            System.err.println("error: "+ex.getCause());
        }
        return strFecha;
    }


    public JPanel getGUI(){
        if(panel==null){
            panel=new JPanel();
            panel.setVisible(true);

            panel.add(getActiva());
            panel.add(getSalir());

            lblResultado=new JLabel("<html><font color='blue'>--</font></html>");
            lblResultado.setVisible(false);

            panel.add(lblResultado);


        }
        return panel;
    }


    public JButton getActiva(){
        if(btnActiva==null){
            btnActiva=new JButton("<html><font color='white'>Calcular</font></html>");
            btnActiva.setBackground(Color.black);
            btnActiva.setToolTipText("calcular ahora...");


            btnActiva.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    String peso="";
                    String talla="";
                    double desviacion=0.0;
                    String miPeso="";
                    String miTalla="";
                    
                    HashMap<String,Double> mapaPeso=new HashMap<String,Double>();
                    HashMap<String,Double> mapaEstatura=new HashMap<String,Double>();
            try{
            //llenar mapaPeso
            mapaPeso.put("85.54",3.0);
            mapaPeso.put("83.79",2.75);
            mapaPeso.put("82.04",2.5);
            mapaPeso.put("80.29",2.25);
            mapaPeso.put("78.54",2.0);
            mapaPeso.put("76.79",1.75);
            mapaPeso.put("75.04",1.5);
            mapaPeso.put("73.29",1.25);
            mapaPeso.put("71.54",1.0);
            mapaPeso.put("69.79",0.75);
            mapaPeso.put("68.04",0.50);
            mapaPeso.put("66.29",0.25);
            mapaPeso.put("64.54",0.0);
            mapaPeso.put("62.79",-0.25);
            mapaPeso.put("61.04",-0.50);
            mapaPeso.put("59.29",-0.75);
            mapaPeso.put("57.54",-1.0);
            mapaPeso.put("55.79",-1.25);
            mapaPeso.put("54.04",-1.50);
            mapaPeso.put("52.29",-1.75);
            mapaPeso.put("50.54",-2.0);
            mapaPeso.put("45.79",-2.25);
            mapaPeso.put("47.04",-2.5);
            mapaPeso.put("45.29",-2.75);
            mapaPeso.put("43.54",-3.0);

            //llenar mapaEstatura
            mapaEstatura.put("1.87",3.0);
            mapaEstatura.put("1.86",2.75);
            mapaEstatura.put("1.85",2.50);
            mapaEstatura.put("1.83",2.23);
            mapaEstatura.put("1.82",2.0);
            mapaEstatura.put("1.81",1.75);
            mapaEstatura.put("1.79",1.50);
            mapaEstatura.put("1.78",2.25);
            mapaEstatura.put("1.77",1.0);
            mapaEstatura.put("1.75",0.75);
            mapaEstatura.put("1.74",0.50);
            mapaEstatura.put("1.73",0.25);
            mapaEstatura.put("1.71",0.0);
            mapaEstatura.put("1.7",-0.25);
            mapaEstatura.put("1.69",-0.50);
            mapaEstatura.put("1.67",-0.75);
            mapaEstatura.put("1.66",-1.0);
            mapaEstatura.put("1.65",-1.25);
            mapaEstatura.put("1.63",-1.50);
            mapaEstatura.put("1.62",-1.75);
            mapaEstatura.put("1.61",-2.0);
            mapaEstatura.put("1.59",-2.25);
            mapaEstatura.put("1.58",-2.50);
            mapaEstatura.put("1.57",-2.75);
            mapaEstatura.put("1.55",-3.0);
        }

        catch(Exception ex){
            System.out.println("1. Ha ocurrido un error: "+ex.getCause());
        }
            try{
            miPeso=JOptionPane.showInputDialog("Tu peso es de: ");
            miTalla=JOptionPane.showInputDialog("Tu estatura es de: ");
            }catch(Exception ex){
            System.out.println("2. Ha ocurrido un error: "+ex.getCause());
            }
            
             try{
            peso=getPeso(mapaPeso,String.valueOf(miPeso));
            talla=getTalla(mapaEstatura,String.valueOf(miTalla));

            desviacion=Double.parseDouble(peso)-Double.parseDouble(talla);

            if(desviacion<0){
                lblResultado.setVisible(true);
                lblResultado.setText("tu biotipo es: longitipo");
                JOptionPane.showMessageDialog(null, "tu biotipo es: longitipo", "Aviso del sistema", JOptionPane.WARNING_MESSAGE, new ImageIcon("longitipo.jpg"));
            }else if(desviacion>0){
                lblResultado.setVisible(true);
                lblResultado.setText("tu biotipo es: braquitipo");
                JOptionPane.showMessageDialog(null, "tu biotipo es: braquitipo", "Aviso del sistema", JOptionPane.WARNING_MESSAGE, new ImageIcon("longitipo.jpg"));
            }else{
                lblResultado.setVisible(true);
                lblResultado.setText("tu biotipo es: normotipo");
                JOptionPane.showMessageDialog(null, "tu biotipo es: normotipo", "Aviso del sistema", JOptionPane.WARNING_MESSAGE, new ImageIcon("longitipo.jpg"));
            }
            }
            catch(Exception ex){
                System.out.println("3. Ha ocurrido un error: "+ex.getCause());
            }



                }
            });

        }
        return btnActiva;
    }

    public JButton getSalir(){
        if(btnSalir==null){
            btnSalir=new JButton("<html><font color='red'>Salir</font></html>");
            btnSalir.setBackground(Color.black);
            btnSalir.setToolTipText("salir...");
            btnSalir.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    System.exit(0);
                }
            });
        }
        return btnSalir;
    }



    static String getPeso(HashMap<String,Double> m,String peso){
        String cadPeso=null;
        try{
            Iterator it=m.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry e = (Map.Entry)it.next();
                if(e.getKey().equals(peso)){ 
                    System.out.println("peso: "+e.getValue());
                    cadPeso=String.valueOf(e.getValue());
                }
            }

        }catch(Exception ex){
            System.err.println("error: "+ex.getCause());
        }
        return cadPeso;
    }


    static String getTalla(HashMap<String,Double> m,String talla){
        String cadTalla=null;
        try{
            Iterator it=m.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry e = (Map.Entry)it.next();
                if(e.getKey().equals(talla)){ 
                    System.out.println("talla: "+e.getValue());
                    cadTalla=String.valueOf(e.getValue());
                }
            }

        }catch(Exception ex){
            System.err.println("error: "+ex.getCause());
        }
        return cadTalla;
    }

}
Programa en ejecución


Entradas
peso: 85.54
estatura: 1.79


Se muestra el resultado


El programa tiene algunos errores, solo admite valores (peso y estatura) colocados en los mapas (HashMap). 
Enlaces:

lunes, 18 de marzo de 2013

¿Elegir un lenguaje de programación?

Elegir una carrera, un auto, una mascota, a tu mejor amigo, etc. no es nada fácil de realizar. Siempre va surgir los pros y contras en tu decisión.

¿Me equivoque de carrera? ... ¿ Debí ser contador? 


Si decidiste estudiar ISC o una carrera afín tendrás que lidiar con constantes dudas ¿qué lenguaje debo elegir?, ¿cuál es el más usado?...

Muchas alternativas

Lenguajes como Java, PHP, y C siguen siendo de los más usados. Tal vez no sean los mejores, pero como muchos sistemas están hechos en esos lenguajes no se elijen otros "nuevos" como Scala, Groovy, etc.

Lo que esta de "moda" son las aplicaciones web, sin embargo a estas alturas no escogería  lenguajes como PHP, preferiría Groovy o Python para el desarrollo. Es cuestión de gustos cabe aclarar.


¿Cómo elegir?


Es algo subjetivo, se deben tomar en cuenta los pros y contras de cada lenguaje. Lo más recomendable es si existe una documentación adecuada y soporte del lenguaje.

String resultado=adecuado()==false ? "Arriesgate" : "Factible";

if(resultado.equals("Factible")){
    adelante();
}  else{
    otro();
}

Tal vez ya elegiste uno y se ve muy "bonito", pero cuando tienes un problema no hay nadie quien te ayude, y muchas veces la documentación no esta completa o no se entiende.


Factores importantes a la hora de elegir

No basta querer o tener la intención aprender, lo importante es ponerse a leer y practicar. Conseguir ayuda, consultar foros, etc. cualquier cosa que te ayude.

viernes, 8 de marzo de 2013

Ejecutar un proceso o comando en Perl


En ocasiones tenemos la necesidad de ejecutar algún proceso externos (puede ser un script en Linux/Windows) desde nuestras aplicaciones, por ejemplo crear un directorio donde se guardaran los documentos PDF o XML que descargamos.

Update:
Pero antes de nada, ¿qué es un proceso?
Según la wikipedia es:  es un programa en ejecución, incluyendo el valor del program counter, los registros y las variables. Conceptualmente, cada proceso tiene un hilo (thread) de ejecución que es visto como un CPU virtual.

Supongamos creamos un script en Linux, lo llamamos "miScript.sh" y escribimos lo siguiente:

#!/bin/bash

activa(){
 echo hola $USER
}

ver(){

usuario=$(whoami)

if [ "$USER"="$usuario" ]; then

  activa

else

  echo usuario no registrado

fi

}
#invocar función
ver


Tenemos dos funciones  "ver" y "activa", si el nombre corresponde a un usuario registrado entonces se ejecutará la función "activa".


 Le damos los permisos de ejecución:  chmod +x miScript.sh , y ejecutamos con sh miScript.sh.


Con Perl podemos hacer uso de comandos del sistema.

ejecuta.pl

#!/usr/bin/perl

print "Ejecutar un script desde Perl\n";

system("sh miScript.sh"); // ejecuta el script


También podriamos usar:


print `sh miScript.sh´;


Ahora en Groovy podemos hacer lo siguiente.

ejecuta.groovy

print "sh miScript.sh".execute().text


En Python.

ejecuta.py

#!/bin/python

import os

os,system("sh miScript.sh")


En Scala.

ejecuta.scala

import scala.sys.process._;


object Scala extends App{

  "sh miScript.sh"!

}



Espero les sirva.

domingo, 3 de marzo de 2013

Programando en Perl no.1




Lo prometido es deuda. He aquí algunos ejercicios de programación en Perl. No tienen una explicación detallada, pero se entienden.

1. Paso de parámetros:
my $parametro=$ARV[0];
print "Introduciste:  ",$parametro,"\n";

2. Obtener salario bruto y neto:

my $extras; 
my $salarioBruto;
my $salarioNeto;

print "Introduce horas:";
$horas= <STDIN>;
if($horas <= 38){
  $extras=0,
}else{
  $extras=$horas-38;
  $horas=38;
}

print "Introduce tasa de interes:";
$tasa= <STDIN>;

$salarioBruto=$horas*$tasa+$extras*$tasa*1.5;

if($salarioBruto<=300){
  $salarioNeto=$salarioBruto;
}else{
  $salarioNeto=$salarioBruto*0.9;
}

print "Datos:\n";
print "horas: ",$horas,"\n";
print "extras: ",$extras,"\n";
print "salario bruto: ",$salarioBruto,"\n";
print "salario neto: ",$salarioNeto,"\n";


3.  Calcular el valor futuro

#definimos una función
sub valorfuturo{
 print "valor futuro obtenido: ",$_[0]*((1+$_[1]/100)**$_[2]),"\n";
}

print "Valor presente: \n";
$valor= <STDIN>;
print "Tasa de interes: \n";
$interes= <STDIN>;
print "Plazo de pago: \n";
$plazo= <STDIN>;

&valorfuturo($valor,$interes,$plazo);

4. Obtener pulsaciones e índice de masa corporal:
#ejecutamos el comando clear (Linux  en Windwos sería cls)

print `clear`;
print "\n";
print "Tu nombre:\n";
$nombre = <STDIN>;
print "Tu edad:";
$edad= <STDIN>;
print "Tu peso:\n";
$peso = <STDIN>;
print "Tu talla:";
$talla= <STDIN>;


print "Hola $nombre\n";
print "tienes $edad de edad\n";
print "tu peso es de $nombre kg\n";
print "tu talla es de $edad mts\n";

$pulsaciones=(220-$edad);
$imc=$peso/($talla*$talla);
print "pulsaciones: ",$pulsaciones,"\n";
print "indice de masa corporal: ",$imc,"\n";

Si usas Windows te conviene usar  Strawberry Perl.